図解 global transaction

43
図図 Global Transaction appengine ja night #6 図図図図 (@ashigeru)

Upload: honorato-hurley

Post on 01-Jan-2016

32 views

Category:

Documents


5 download

DESCRIPTION

図解 Global Transaction. appengine ja night #6 あらかわ (@ashigeru). 講演者について. 名前 あらかわ (@ashigeru) 所属 株式会社グルージェント 開発部 普段の業務 教育 (Computer Aided Education) 研究開発 ( コンパイラ系 ) ブログ書き (Song of Cloud Blog). 祝 Slim3 1.0.0 Released. “The main features of Slim3 are as follows: Global Transactions - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 図解 Global Transaction

図解Global Transaction

appengine ja night #6あらかわ (@ashigeru)

Page 2: 図解 Global Transaction

appengine ja night #6 - @ashigeru

22010/03/19

講演者について 名前

あらかわ (@ashigeru) 所属

株式会社グルージェント 開発部 普段の業務

教育 (Computer Aided Education)研究開発 ( コンパイラ系 )ブログ書き (Song of Cloud Blog)

Page 3: 図解 Global Transaction

appengine ja night #6 - @ashigeru

32010/03/19

祝 Slim3 1.0.0 Released

“The main features of Slim3 are as follows:Global TransactionsFaster than JDO/JPAFast spin-upHOT reloadingType safe query”

Page 4: 図解 Global Transaction

appengine ja night #6 - @ashigeru

42010/03/19

今日の内容 トランザクションの基礎 グローバルトランザクションの仕組み グローバルトランザクションの制限

今回のルール最適化に関するネタバレなし30 分ルールでしゃべるDSL 禁止

Page 5: 図解 Global Transaction

appengine ja night #6 - @ashigeru

52010/03/19

トランザクションの基礎まずはおさらい

5

Page 6: 図解 Global Transaction

appengine ja night #6 - @ashigeru

62010/03/19

トランザクション処理の考え方 リソースを一時的に独占できる技術

同時に変更して不整合が起こる、などを回避

すべて成功するか、すべて失敗するか中途半端に終わらないアトミック性 (ACID の A)

Page 7: 図解 Global Transaction

appengine ja night #6 - @ashigeru

72010/03/19

App Engine のトランザクション Entity Group (EG) ごとのローカルトラ

ンザクションACID 特性を持つ楽観的並行性制御

難点2 つ以上の EG をまたいだ操作ができないエンティティは作成後 EG を変更できないEG に含まれるエンティティを全て独占

Page 8: 図解 Global Transaction

appengine ja night #6 - @ashigeru

82010/03/19

モデリングの例 (1)

チケットをポイントで買うシステムユーザごとにポイントの口座があるポイントを消費してチケットを買えるポイントが足りないとチケットを買えないチケットは数に限りがある

Page 9: 図解 Global Transaction

appengine ja night #6 - @ashigeru

92010/03/19

モデリングの例 (2)

全ての人が全てのチケットを買える同時に操作する可能性があれば同一 EG へ

Page 10: 図解 Global Transaction

appengine ja night #6 - @ashigeru

102010/03/19

ローカルトランザクションの問題 EG 設計が難しい

同時に操作するものを同じ EG にEG 内のエンティティを全て独占

Page 11: 図解 Global Transaction

appengine ja night #6 - @ashigeru

112010/03/19

グローバルトランザクションの仕組み

トランザクションプロトコルの設計を段階的に

11

Page 12: 図解 Global Transaction

appengine ja night #6 - @ashigeru

122010/03/19

グローバルトランザクション 複数の EG にまたがるトランザクション

参加する EG を選択して独占

Page 13: 図解 Global Transaction

appengine ja night #6 - @ashigeru

132010/03/19

説明の進め方 うまくいかない実装方法を中心に紹介

ちゃんと動いている例は後半戦で 今回利用する題材

Alice がチケット「 ajn6 」を購入チケット「 ajn6 」は 500 ポイント消費Alice の残りポイントが 500 を切ると買えな

いチケット「 ajn6 」は数に限りがある

※appengine ja night #6 は参加無料です

Page 14: 図解 Global Transaction

appengine ja night #6 - @ashigeru

142010/03/19

順次ローカルトランザクションまずはダメな例から

14

Page 15: 図解 Global Transaction

appengine ja night #6 - @ashigeru

152010/03/19

順次ローカルトランザクション (1) ローカルトランザクションを順番に実行

Page 16: 図解 Global Transaction

appengine ja night #6 - @ashigeru

162010/03/19

順次ローカルトランザクション (2) チケットが売り切れていた場合

順番を逆にすると「残高が足らない場合」補償トランザクションで払い戻しが必要

Page 17: 図解 Global Transaction

appengine ja night #6 - @ashigeru

172010/03/19

並行ローカルトランザクション早めにチケットの残数を確認

17

Page 18: 図解 Global Transaction

appengine ja night #6 - @ashigeru

182010/03/19

並行ローカルトランザクション (1) ローカルトランザクションを同時に実行

独占しながら先に前提条件を確認

Page 19: 図解 Global Transaction

appengine ja night #6 - @ashigeru

192010/03/19

並行ローカルトランザクション (2) コミットが成功するとは限らない

30 秒ルール + 楽観的並行性制御結局この場合も払い戻しが必要

Page 20: 図解 Global Transaction

appengine ja night #6 - @ashigeru

202010/03/19

準備と適用成功するまで繰り返せるように

20

Page 21: 図解 Global Transaction

appengine ja night #6 - @ashigeru

212010/03/19

準備と適用 (1)

ログを保存してから適用途中で失敗してもログから復帰可能

Page 22: 図解 Global Transaction

appengine ja night #6 - @ashigeru

222010/03/19

準備と適用 (2)

適用に失敗しても再試行すればいいタスクキューを使えば自動的に再試行

Page 23: 図解 Global Transaction

appengine ja night #6 - @ashigeru

232010/03/19

準備と適用 (3)

準備に失敗したらログを捨てるrollback

Page 24: 図解 Global Transaction

appengine ja night #6 - @ashigeru

242010/03/19

準備と適用 (4)

準備と適用の間に割り込まれる独占していない状態がある

Page 25: 図解 Global Transaction

appengine ja night #6 - @ashigeru

252010/03/19

排他制御の導入準備したものを排他制御で独占

25

Page 26: 図解 Global Transaction

appengine ja night #6 - @ashigeru

262010/03/19

準備と適用の排他制御 (1)

ソフトウェアで排他制御を行う準備から適用までをロックする

Page 27: 図解 Global Transaction

appengine ja night #6 - @ashigeru

272010/03/19

準備 + ロック取得 ユニークにロックエンティティを作成

作成できない場合は他人がロック中 (排他 )

Page 28: 図解 Global Transaction

appengine ja night #6 - @ashigeru

282010/03/19

適用 + ロック開放 ユニークにロックを開放しつつ適用処理

存在しない場合は処理済み ( べき等 )

Page 29: 図解 Global Transaction

appengine ja night #6 - @ashigeru

292010/03/19

準備と適用の排他制御 (2)

Commit / Abort ?インダウトな状態から復元できない

Page 30: 図解 Global Transaction

appengine ja night #6 - @ashigeru

302010/03/19

状態の保持Commit / Abort を区別できるようにする

30

Page 31: 図解 Global Transaction

appengine ja night #6 - @ashigeru

312010/03/19

2相コミット (1)

トランザクションの状態も記録これでほぼ 2相コミットと同じ状態

Page 32: 図解 Global Transaction

appengine ja night #6 - @ashigeru

322010/03/19

2相コミット (2)

「 Committed 」なら絶対に適用するACID の Durability を保証

Page 33: 図解 Global Transaction

appengine ja night #6 - @ashigeru

332010/03/19

2相コミット (2)

「 Aborted 」なら絶対に適用しないロックだけ開放

Page 34: 図解 Global Transaction

appengine ja night #6 - @ashigeru

342010/03/19

2相コミット (3)

長時間不明なら「 Aborted 」にするロックの開放漏れを防ぐ

Page 35: 図解 Global Transaction

appengine ja night #6 - @ashigeru

352010/03/19

Slim3 Global Transaction

2 相コミットプロトコルが基礎でも Local Tx * 5 より明らかに速い!

Page 36: 図解 Global Transaction

appengine ja night #6 - @ashigeru

362010/03/19

まとめ

36

Page 37: 図解 Global Transaction

appengine ja night #6 - @ashigeru

372010/03/19

前半の終了 2 相コミットはそれなりに重い

ロック取得、ログ作成、コミット、ログ適用、ロック開放

まともに実装すると ( 2 * EGs + 1 ) 回のローカルトランザクションが必要

Slim3 Global Transaction は 2 相コミットを基礎 得られる効果は今回の内容と同じ しかも妙に速い

最適化や個々の実装については後半に

Page 38: 図解 Global Transaction

appengine ja night #6 - @ashigeru

382010/03/19

参考資料 トランザクション処理 (下 ) – 概念と技法

ジム グレイほか , 日経 BP 社 , 2001年 リレーショナルデータベース入門

増永 良文 , サイエンス社 , 2003年 Transaction Puzzlers (手前味噌 )

http://www.slideshare.net/ashigeru/ajn4

Page 39: 図解 Global Transaction

appengine ja night #6 - @ashigeru

392010/03/19

Question and Discussion後半戦に入る前に

39

Page 40: 図解 Global Transaction

appengine ja night #6 - @ashigeru

402010/03/19

グローバルトランザクションの制限

時間が余ったら

40

Page 41: 図解 Global Transaction

appengine ja night #6 - @ashigeru

412010/03/19

ローカルトランザクションと併用不可 通常の ltx は gtx のロックを見ない

Prepare → Apply のタイミングに割り込める

Page 42: 図解 Global Transaction

appengine ja night #6 - @ashigeru

422010/03/19

クエリの inconsistent window が長い クエリは gtx のロックを見ない

Apply 中にクラッシュすると、続きは TQ で

Page 43: 図解 Global Transaction

appengine ja night #6 - @ashigeru

432010/03/19

単一 EG 操作のスループットが悪化 EG の独占時間が長くなる

短時間に大量のチケットをさばけない