appengine ja night #6 あらかわ

Slides:



Advertisements
Similar presentations
Global Ring Technologies
Advertisements

Windows HPC Server を使ってみる
情報処理実習 第05回 Excelマクロ機能入門 操作マクロ入門.
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
Chapter11-4(前半) 加藤健.
リレーショナル・データベース データベース論 第10回.
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
3-1 MySQLについて 発表者:藤村元彦 自然言語処理研究室.
テキストベースの会議における議論の効率化に関する研究
知識情報演習Ⅲ(後半第1回) 辻 慶太(水)
LMNtalからC言語への変換の設計と実装
appengine ja night #13 開発事例紹介 mixi Xmas 2010
過負荷時のWebアプリケーションの性能劣化を改善する Session-level Queue Scheduling
ソフトウェア工学 知能情報学部 新田直也.
第10章 機械設計の高度化 ★本講義の内容だけでは機械設計はできない? ★教科書や参考書の設計手順で設計ができるのか?
第6章 トランザクション管理 6.1 トランザクションの概念 6.2 同時実行制御 6.3 障害回復.
     年  月  日 名前 太郎 1 班.
構造化オーバーレイネットワークに適した 分散双方向連結リストDDLL
RDBMSについて 2年7組  小鹿 慎太郎.
セッション管理 J2EE I 第9回 /
利用者が守るセキュリティー (パスワードについて)
Web上で管理・利用できる 面接予約データベースシステムの構築
第5回 CPUの役割と仕組み3 割り込み、パイプライン、並列処理
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
~企画~ GO,桑田,ヒルズ.
SAP & SQL Server テクニカルアーキテクチャ概要 マイクロソフト株式会社 SAP/Microsoft コンピテンスセンター
マイクロソフト Access での SQL 演習 第1回 SQL問い合わせ(クエリ)
Javaによる Webアプリケーション入門 第9回
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
15.同時実行制御,トランザクション, データベースの回復
プログラム実行履歴を用いたトランザクションファンクション抽出手法
PC/NAS/UPS/対策ツールを一括導入
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
製造準備段階における 工程FMEAの実施と不具合未然防止
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
Damping ring単独運転用 Bucket Selectionサブルーティンについて
Xenによる ゲストOSの監視に基づく パケットフィルタリング
PC/NAS/UPS/対策ツールを一括導入
セキュリティ(6) 05A2013 大川内 斉.
三浦元喜 北陸先端科学技術大学院大学 知識科学研究科 2007/9/7
     年  月  日 名前 太郎 1 班.
     年  月  日 名前 太郎 x 班.
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
プロジェクト管理ソフトの群雄割拠をどうやって勝ち抜くか?②
日本郵便 「Web-EDI」利用ガイド (JP EDIシステム)
appengine ja night beer talk あらかわ
SiTCP-VME変換モジュールの開発 KEK 物構研:中性子 佐藤節夫.
計算機工学III オペレーティングシステム #4 並行プロセス:排他制御基礎 2006/04/28 津邑 公暁
そろそろvolatileについて一言いっておくか
情報システム1及び演習 第一回 データベースの概要.
ネットワークプログラミング 05A1302 円田 優輝.
オペレーティングシステムJ/K 2004年11月15日2時限目
リカバリ 東大生研 情報融合研究センタ 喜連川優.
ガイダンス 情報システム管理 ガイダンス 水野 嘉明 情報システム管理 1.
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
オペレーティングシステム (プロセススケジューリング)
第10章 機械設計の高度化 ★本講義の内容だけでは機械設計はできない? ★教科書や参考書の設計手順で設計ができるのか?
手書き文字の自動認識アプリケーション 15K1013 坂本 倖輝
設計情報の再利用を目的とした UML図の自動推薦ツール
リレーショナル・データベース J2EE I (データベース論) 第2回 /
オペレーティングシステムJ/K (並行プロセスと並行プログラミング)
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
オペレーティングシステム (プロセススケジューリング)
SMP/マルチコアに対応した 型付きアセンブリ言語
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
より分かりやすい ユースケースモデルを作る
第2回.リレーショナルデータベース入門 SQL を用いたテーブルへの行の挿入 SQL 問い合わせの発行と評価結果の確認.
全体ミーティング(9/15) 村田雅之.
FPS(続き).
Presentation transcript:

appengine ja night #6 あらかわ (@ashigeru) 図解 Global Transaction appengine ja night #6 あらかわ (@ashigeru)

appengine ja night #6 - @ashigeru 講演者について 名前 あらかわ (@ashigeru) 所属 株式会社グルージェント 開発部 普段の業務 教育 (Computer Aided Education) 研究開発 (コンパイラ系) ブログ書き (Song of Cloud Blog) 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 祝 Slim3 1.0.0 Released “The main features of Slim3 are as follows: Global Transactions Faster than JDO/JPA Fast spin-up HOT reloading Type safe query” 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 今日の内容 トランザクションの基礎 グローバルトランザクションの仕組み グローバルトランザクションの制限 今回のルール 最適化に関するネタバレなし 30分ルールでしゃべる DSL禁止 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru まずはおさらい トランザクションの基礎 2010/03/19 appengine ja night #6 - @ashigeru 5 5

appengine ja night #6 - @ashigeru トランザクション処理の考え方 リソースを一時的に独占できる技術 同時に変更して不整合が起こる、などを回避 すべて成功するか、すべて失敗するか 中途半端に終わらない アトミック性 (ACIDのA) 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru Entity Group (EG) ごとのローカルトランザクション ACID特性を持つ 楽観的並行性制御 難点 2つ以上のEGをまたいだ操作ができない エンティティは作成後EGを変更できない EGに含まれるエンティティを全て独占 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru モデリングの例 (1) チケットをポイントで買うシステム ユーザごとにポイントの口座がある ポイントを消費してチケットを買える ポイントが足りないとチケットを買えない チケットは数に限りがある 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru モデリングの例 (2) 全ての人が全てのチケットを買える 同時に操作する可能性があれば同一EGへ 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru ローカルトランザクションの問題 EG設計が難しい 同時に操作するものを同じEGに EG内のエンティティを全て独占 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru トランザクションプロトコルの設計を段階的に グローバルトランザクションの 仕組み 2010/03/19 appengine ja night #6 - @ashigeru 11 11

appengine ja night #6 - @ashigeru グローバルトランザクション 複数のEGにまたがるトランザクション 参加するEGを選択して独占 2010/03/19 appengine ja night #6 - @ashigeru

説明の進め方 うまくいかない実装方法を中心に紹介 今回利用する題材 ちゃんと動いている例は後半戦で Aliceがチケット「ajn6」を購入 ※appengine ja night #6 は参加無料です 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru まずはダメな例から 順次ローカルトランザクション 2010/03/19 appengine ja night #6 - @ashigeru 14 14

appengine ja night #6 - @ashigeru 順次ローカルトランザクション (1) ローカルトランザクションを順番に実行 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 順次ローカルトランザクション (2) チケットが売り切れていた場合 順番を逆にすると「残高が足らない場合」 補償トランザクションで払い戻しが必要 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 早めにチケットの残数を確認 並行ローカルトランザクション 2010/03/19 appengine ja night #6 - @ashigeru 17 17

appengine ja night #6 - @ashigeru 並行ローカルトランザクション (1) ローカルトランザクションを同時に実行 独占しながら先に前提条件を確認 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 並行ローカルトランザクション (2) コミットが成功するとは限らない 30秒ルール + 楽観的並行性制御 結局この場合も払い戻しが必要 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 成功するまで繰り返せるように 準備と適用 2010/03/19 appengine ja night #6 - @ashigeru 20 20

appengine ja night #6 - @ashigeru 準備と適用 (1) ログを保存してから適用 途中で失敗してもログから復帰可能 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 準備と適用 (2) 適用に失敗しても再試行すればいい タスクキューを使えば自動的に再試行 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 準備と適用 (3) 準備に失敗したらログを捨てる rollback 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 準備と適用 (4) 準備と適用の間に割り込まれる 独占していない状態がある 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 準備したものを排他制御で独占 排他制御の導入 2010/03/19 appengine ja night #6 - @ashigeru 25 25

appengine ja night #6 - @ashigeru 準備と適用の排他制御 (1) ソフトウェアで排他制御を行う 準備から適用までをロックする 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 準備 + ロック取得 ユニークにロックエンティティを作成 作成できない場合は他人がロック中 (排他) 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 適用 + ロック開放 ユニークにロックを開放しつつ適用処理 存在しない場合は処理済み (べき等) 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 準備と適用の排他制御 (2) Commit / Abort ? インダウトな状態から復元できない 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru Commit / Abort を区別できるようにする 状態の保持 2010/03/19 appengine ja night #6 - @ashigeru 30 30

appengine ja night #6 - @ashigeru 2相コミット (1) トランザクションの状態も記録 これでほぼ2相コミットと同じ状態 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 2相コミット (2) 「Committed」なら絶対に適用する ACIDのDurabilityを保証 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 2相コミット (2) 「Aborted」なら絶対に適用しない ロックだけ開放 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 2相コミット (3) 長時間不明なら「Aborted」にする ロックの開放漏れを防ぐ 2010/03/19 appengine ja night #6 - @ashigeru

Slim3 Global Transaction 2相コミットプロトコルが基礎 でも Local Tx * 5 より明らかに速い! 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru まとめ 2010/03/19 appengine ja night #6 - @ashigeru 36 36

appengine ja night #6 - @ashigeru 前半の終了 2相コミットはそれなりに重い ロック取得、ログ作成、コミット、ログ適用、ロック開放 まともに実装すると( 2 * EGs + 1 )回のローカルトランザクションが必要 Slim3 Global Transactionは2相コミットを基礎 得られる効果は今回の内容と同じ しかも妙に速い 最適化や個々の実装については後半に 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 参考資料 トランザクション処理(下) – 概念と技法 ジム グレイほか, 日経BP社, 2001年 リレーショナルデータベース入門 増永 良文, サイエンス社, 2003年 Transaction Puzzlers (手前味噌) http://www.slideshare.net/ashigeru/ajn4 2010/03/19 appengine ja night #6 - @ashigeru

Question and Discussion 後半戦に入る前に Question and Discussion 2010/03/19 appengine ja night #6 - @ashigeru 39 39

appengine ja night #6 - @ashigeru 時間が余ったら グローバルトランザクションの制限 2010/03/19 appengine ja night #6 - @ashigeru 40 40

appengine ja night #6 - @ashigeru ローカルトランザクションと併用不可 通常のltxはgtxのロックを見ない Prepare → Apply のタイミングに割り込める 2010/03/19 appengine ja night #6 - @ashigeru

クエリのinconsistent windowが長い クエリはgtxのロックを見ない Apply中にクラッシュすると、続きはTQで 2010/03/19 appengine ja night #6 - @ashigeru

appengine ja night #6 - @ashigeru 単一EG操作のスループットが悪化 EGの独占時間が長くなる 短時間に大量のチケットをさばけない 2010/03/19 appengine ja night #6 - @ashigeru