Submit Search
そんなトランザクションマネージャで大丈夫か?
31 likes
24,887 views
T
takezoe
1 of 37
Download now
Downloaded 56 times
1
2
3
4
5
6
7
8
9
Most read
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Most read
36
Most read
37
More Related Content
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
PDF
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
PDF
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
PPTX
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
PPTX
Redisの特徴と活用方法について
Yuji Otani
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
PPTX
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
pg_bigmで全文検索するときに気を付けたい5つのポイント(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
Redisの特徴と活用方法について
Yuji Otani
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
What's hot
(20)
PDF
Dockerからcontainerdへの移行
Kohei Tokunaga
PPTX
マイクロサービスにおける 結果整合性との戦い
ota42y
PDF
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
PDF
Javaのログ出力: 道具と考え方
Taku Miyakawa
PDF
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
PDF
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
PDF
マイクロにしすぎた結果がこれだよ!
mosa siru
PDF
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
PDF
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
PDF
イミュータブルデータモデルの極意
Yoshitaka Kawashima
PDF
できる!並列・並行プログラミング
Preferred Networks
PDF
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
PDF
君はyarn.lockをコミットしているか?
Teppei Sato
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
whywaita
PPTX
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
PPTX
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
PDF
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
Dockerからcontainerdへの移行
Kohei Tokunaga
マイクロサービスにおける 結果整合性との戦い
ota42y
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
Javaのログ出力: 道具と考え方
Taku Miyakawa
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
マイクロにしすぎた結果がこれだよ!
mosa siru
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
NTT DATA Technology & Innovation
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
Preferred Networks
コンテナにおけるパフォーマンス調査でハマった話
Yuta Shimada
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
イミュータブルデータモデルの極意
Yoshitaka Kawashima
できる!並列・並行プログラミング
Preferred Networks
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
君はyarn.lockをコミットしているか?
Teppei Sato
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
whywaita
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
RLSを用いたマルチテナント実装 for Django
Takayuki Shimizukawa
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
Ad
Viewers also liked
(20)
PDF
small 画面でも、 BIG 画面でも、 今すぐ使えるレスポンシブ活用術
ourmaninjapan
PDF
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
PDF
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
PPTX
ゲームエンジニアのためのデータベース設計
sairoutine
PDF
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
PDF
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
Takahiro YAMAGUCHI
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PDF
第2回関西ソーシャルゲーム勉強会
ha1t
ODP
HTML5概要、コードサンプル
ourmaninjapan
PDF
クラウド・SaaS型 統合基幹業務システム 「CAM MACS」を支える PostgreSQL ~雲に乗ったゾウ~
学 松崎
PDF
業務系WebアプリケーションがStrutsから旅立つ日
Mitsuru Ogawa
PPTX
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
Tokoroten Nakayama
PPTX
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
PPTX
Serverspec at hbstudy #45
Gosuke Miyashita
PDF
Scala界隈の近況
takezoe
PDF
PG-REXで学ぶPacemaker運用の実例
kazuhcurry
KEY
実録!Railsのはまりポイント10選
Drecom Co., Ltd.
PDF
MySQL Index勉強会外部公開用
CROOZ, inc.
PDF
Doma SQLテンプレートのしくみ
Toshihiro Nakamura
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
small 画面でも、 BIG 画面でも、 今すぐ使えるレスポンシブ活用術
ourmaninjapan
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
ゲームエンジニアのためのデータベース設計
sairoutine
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
Takahiro YAMAGUCHI
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
第2回関西ソーシャルゲーム勉強会
ha1t
HTML5概要、コードサンプル
ourmaninjapan
クラウド・SaaS型 統合基幹業務システム 「CAM MACS」を支える PostgreSQL ~雲に乗ったゾウ~
学 松崎
業務系WebアプリケーションがStrutsから旅立つ日
Mitsuru Ogawa
レベルを上げて物理で殴れ、Fuzzing入門 #pyfes
Tokoroten Nakayama
ソーシャルゲームにレコメンドエンジンを導入した話
Tokoroten Nakayama
Serverspec at hbstudy #45
Gosuke Miyashita
Scala界隈の近況
takezoe
PG-REXで学ぶPacemaker運用の実例
kazuhcurry
実録!Railsのはまりポイント10選
Drecom Co., Ltd.
MySQL Index勉強会外部公開用
CROOZ, inc.
Doma SQLテンプレートのしくみ
Toshihiro Nakamura
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
Hironobu Suzuki
Ad
More from takezoe
(20)
PDF
Journey of Migrating Millions of Queries on The Cloud
takezoe
PDF
GitBucket: Open source self-hosting Git server built by Scala
takezoe
PDF
Testing Distributed Query Engine as a Service
takezoe
PDF
Revisit Dependency Injection in scala
takezoe
PDF
How to keep maintainability of long life Scala applications
takezoe
PDF
頑張りすぎないScala
takezoe
PDF
GitBucket: Git Centric Software Development Platform by Scala
takezoe
PDF
Non-Functional Programming in Scala
takezoe
PDF
Scala警察のすすめ
takezoe
PDF
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
PDF
The best of AltJava is Xtend
takezoe
PDF
Scala Warrior and type-safe front-end development with Scala.js
takezoe
PDF
Tracing Microservices with Zipkin
takezoe
PDF
Type-safe front-end development with Scala
takezoe
PDF
Scala Frameworks for Web Application 2016
takezoe
PDF
Macro in Scala
takezoe
PDF
Java9 and Project Jigsaw
takezoe
PDF
Reactive database access with Slick3
takezoe
PDF
markedj: The best of markdown processor on JVM
takezoe
PDF
ネタじゃないScala.js
takezoe
Journey of Migrating Millions of Queries on The Cloud
takezoe
GitBucket: Open source self-hosting Git server built by Scala
takezoe
Testing Distributed Query Engine as a Service
takezoe
Revisit Dependency Injection in scala
takezoe
How to keep maintainability of long life Scala applications
takezoe
頑張りすぎないScala
takezoe
GitBucket: Git Centric Software Development Platform by Scala
takezoe
Non-Functional Programming in Scala
takezoe
Scala警察のすすめ
takezoe
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
The best of AltJava is Xtend
takezoe
Scala Warrior and type-safe front-end development with Scala.js
takezoe
Tracing Microservices with Zipkin
takezoe
Type-safe front-end development with Scala
takezoe
Scala Frameworks for Web Application 2016
takezoe
Macro in Scala
takezoe
Java9 and Project Jigsaw
takezoe
Reactive database access with Slick3
takezoe
markedj: The best of markdown processor on JVM
takezoe
ネタじゃないScala.js
takezoe
そんなトランザクションマネージャで大丈夫か?
1.
そんなトランザクション マネージャで大丈夫か? @takezoen BizReach,Inc.
2.
JTA、使っていますよね? ● JavaEEサーバ ● Seasar2 ●
Spring Framework
3.
トランザクションマネージャの役割 ● 複数のリソースを1つのトランザクションで処理 する ● トランザクションに参加するリソースの整合性を 保証する
4.
たとえば... ● 複数のDBに対する処理 ● DBに対する処理とJMSによるメッセージ送信 DB
DB プログラム DB MQ プログラム 参照・更新 メッセージ 送信・受信参照・更新 参照・更新 1トランザクションで処理する
5.
以下のどちらかであることを保証する ● すべてのリソースがコミットされる ● すべてのリソースがロールバックされる
6.
どうやって保証しているのか?
7.
2フェーズコミット リソース1 リソース2 トランザクション マネージャ プログラム commit prepare? commit prepare? commit
8.
2フェーズコミット ● 全てのリソースがprepareに対してOKを返した 場合のみcommitする ● どれか1つでもprepareに対してNGを返した場 合は全てのリソースをrollbackする
9.
2フェーズコミット ● XADataSourceが必要 ● XADataSourceの実装はJDBCドライバによっ て提供される ●
非XAリソースをラップしてエミュレーションする 機能を持っている場合もある
10.
XAトランザクションのSQL(MySQLの場合) mysql> XA START
'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO account VALUES(1, 'takezoe'); Query OK, 1 row affected (0.04 sec) mysql> XA END 'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> XA PREPARE 'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> XA COMMIT 'xatest'; Query OK, 0 rows affected (0.00 sec)
11.
様々な最適化 ● リソースが1つの場合は1フェーズでcommitする ● 最後のリソースはprepareせずにcommitする ●
非XAリソースでも1つだけならJTAトランザク ションに参加可能
12.
めでたしめでたし
13.
ちょっと待った!!
14.
ここからが本題です
15.
途中で落ちたらどうなるの?
16.
不整合が発生してしまう ● リソース側にトランザクションが残ってしまう ● 一部のリソースだけがコミットされた状態になっ てしまう
17.
リカバリマネージャ ● トランザクションマネージャはトランザクションの 状態をトランザクションログに出力している ● リカバリマネージャはトランザクションログを見て 不正なトランザクションを自動的にリカバリする
18.
リカバリマネージャ トランザクション マネージャ リカバリ マネージャ トランザクションログ トランザクション の状態を書き込み 残ってしまっている トランザクションがないか 定期的にチェック 残ってしまっている トランザクションを検出した 場合はリカバリを実行 誤検出しないよう、トランザクションマネー ジャの管理下になく、かつ一定時間ステー タスが変わっていないもの、というような チェックを行っている
19.
トランザクションのリカバリとは? ● リソース側に残っているトランザクションを rollbackまたはcommitのどちらかに倒す ● 基本的には安全サイド(rollback)に倒す ●
すでに1つでもリソースをcommitしてしまってい る場合は全部commitする
20.
どこで落ちたかでリカバリ方法が異なる リソース1 リソース2 トランザクション マネージャ プログラム commit prepare? commit prepare? commit ここで落ちた場合は両方 rollbackする ここで落ちた場合はリソー ス2をcommitする
21.
リカバリマネージャがあれば安心
22.
リカバリマネージャがあれば安心 ではありません
23.
リカバリマネージャではリカバリ できないケースがあります
24.
トランザクションログが壊れた場合ヽ(‘ ∇‘ )ノ ●
リソースに対する操作を行ってからトランザク ションログを書き込み前に死んだ場合 ● トランザクションログのファイル書き込み中に死 んだ場合
25.
リソース側に残ってしまった トランザクションを手動でcommitまたは rollbackする必要があります
26.
手動リカバリ(MySQLの場合) mysql> XA RECOVER; +----------+--------------+--------------+--------+ |
formatID | gtrid_length | bqual_length | data | +----------+--------------+--------------+--------+ | 1 | 6 | 0 | xatest | +----------+--------------+--------------+--------+ 1 row in set (0.00 sec) mysql> XA ROLLBACK 'xatest'; Query OK, 0 rows affected (0.00 sec) mysql> XA RECOVER; Empty set (0.00 sec) XAトランザクションが残ってしまって いる 他のリソースの状態をトランザクショ ンIDで突き合せてcommitするべき かrollbackするべきか判断し、トラン ザクションをリカバリする 残ってしまっていたXAトランザクショ ンが消えた
27.
めでたしめでたし
28.
ちょっと待った!!
29.
Seasar2やSpringを使っている場合
30.
Seasar2 ● トランザクションログを書いていない ● もちろん自動リカバリ機能もない
31.
Seasar2 ● なんちゃってXADataSource <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property
name="driverClassName">"oracle.jdbc.driver.OracleDriver"</property> <property name="URL">"jdbc:oracle:thin:@xxx:1521:yyy"</property> <property name="user">"aaa"</property> <property name="password">"bbb"</property> </component> Seasar2のサンプルなどにはこういった設定例が紹介されているが、これは Seasar2側で用意しているXADataSourceのなんちゃって実装で、通常の java. sql.ConnectionをラップしてXAの動作をエミュレートするもの。
32.
Seasar2 ● 2フェーズコミットを行うのであればJDBCドライバが提供し ているXADataSourceの実装を使うべき ○ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource ○
org.postgresql.xa.PGXADataSource <component name="xaDataSource" class="org.postgresql.xa.PGXADataSource"> <property name="serverName">"localhost"</property> <property name="databaseName">"TEST"</property> <property name="user">"xxxx"</property> <property name="password">"xxxx"</property> </component>
33.
Spring Framework ● 自前ではJTA対応のトランザクションマネージャ の実装は持っていない ●
JTA対応のトランザクションマネージャをSpring 上で使用するためのアダプタが用意されている ● 2フェーズコミットを使用するにはJavaEEサーバ もしくはスタンドアロンのJTA実装と組み合わせ て使用する必要がある
34.
2フェーズコミットを行う場合は APサーバのトランザクションマネージャを 使ったほうが安全です
35.
まとめ
36.
まとめ ● 2フェーズコミットを行う場合、手動でのリカバリが必要にな るケースが存在するということを意識しておきましょう ● 2フェーズコミットを行う場合はなるべくJavaEEサーバのトラ ンザクションマネージャを使うことをおすすめします ●
そもそも2フェーズコミットを行わなくても済むのであればそ のほうがよいです ● 分散トランザクションはさらに危険がいっぱいなので近づか ないようにしましょうw
37.
おわり
Download