SyntaxHighlighter

2011年1月9日日曜日

トランザクションの厳密さについて考えてみた

今月からお仕事で新しいプロジェクトに就く予定です。

要求というか、プロジェクトで目指すものについても、関係者それぞれのイメージが全く違っている状態なので、そもそもこのプロジェクトを開始して良いものかと悩むところです。

少なくとも、今までの経験上、嫌な感じのするプロジェクトですわ~orz

で、今のところ、うちの会社のワークフロー・エンジンをベースにヒューマンタスクを制御するエンジンを目指す予定なのですが、EJBとJPAを利用したものを...と思っていたんですが、昨今のクラウド事情で、ここ数日GAE上に展開できるかを検討してました。
特にスケーラビリティに関しては、元々のワークフロー・エンジンに限界があるのが分かっていましたので、どうにかならないかと思ってGAEの勉強していたんですが、結構面白いですねぇ。

BASEトランザクションという考えが今までの非クラウドアプリケーションにない考え方で、いままでACIDでどうやって整合性を保つかという側面でしか考えていなかったので、すごく新鮮でした。
  • Basically Available
  • Soft-State
  • Eventual Consistency
BASEトランザクションについては、この資料が一番解りやすかったです。

よくよく考えたら、ACIDや分散トランザクションで厳密にConsistencyを確保させても、そんなに厳密さを要求する場面って結構少ない気がします。
Soft-Stateなデータを読み込んで処理したって、アプリのAvailabilityをある程度確保しようとしたら、悲観的ロックなんて利用できないです。また、JPAのエンティティをリモート環境にDTOとして利用するなど、トランザクション境界外に持っていったら、Soft-Stateなデータとあんまり変わらない気がする...。

そもそも今まで盲目的に信じていたACIDでなくて、十分なんとかなるし、2pcなど分散トランザクションを利用していた場合は、ネットワーク障害などでHeuristic例外が発生し得ることを考えたら、そんなに厳密さっていらないんじゃないかと思ってしまいます。

結局は、適材適所なわけで、アプリケーションの要件によるんですが、見方を変えればいろんな可能性が考えれて面白いと思います。

0 件のコメント:

コメントを投稿