CNDT2021から、マイクロサービスにおける分散データベース、特にクリティカルなデータを扱う場合に必要なACID(不可分性、一貫性、独立性、永続性、Atomicity、Consistency、Isolation、Durability)を実現するために開発されたScalar DBというJavaのライブラリーに関するセッションを紹介する。「マイクロサービスにおける分散トランザクションライブラリ」というタイトルだが、株式会社Scalarというベンチャーが開発するScalar DBを解説するセッションだ。
動画:マイクロサービスにおける分散トランザクションライブラリ
プレゼンターはアーキテクトの鈴木俊裕氏
セッションの前半はマイクロサービスのアーキテクチャー、その中のデータ整合性に関する考察、トランザクションを管理するメカニズムに関する解説、分散トランザクションマネージャー、Scalar DBの解説などとなっている。
まずマイクロサービスについて、複数のプロセスが連携して稼働するシステムであることを踏まえた上で、データベースの持ち方について解説を行った。ここでは各プロセスにデータベースを保持するDatabase per Serviceについて解説を行っている。
ここではマイクロサービスの利点を活かすためにデータベースを共有せずに個別に持つことを推奨しているが、この方式ではデータの整合性を保つことが課題として浮き上がってくることを解説。
この例ではユーザーがECサイトなどで購買を行う際に、オーダーを受け付けるサービスが顧客のクレジットカードが利用可能なのかをチェックする別のプロセス、カスタマーサービスにデータを送信する途中で処理が中断してしまった場合を想定して、それぞれのプロセスが持つデータベース間で整合性が取れなくなってしまうことを解説した。
ここから整合性を保つための方法を解説。Sagaパターンと2フェーズコミットによる分散トランザクションについて説明を行った。
Sagaパターンについてはマイクロソフトが公開している技術ドキュメントを参照して欲しい。
マイクロソフトのドキュメントではACIDを「原子性、一貫性、分離性、持続性」と翻訳していることに留意されたい。
前出のECサイトで購買を行う例を使ってSagaパターンを解説しているが、実装方法としてコレオグラフィとオーケストレーションの2つがあることは特に説明せずに、ここではオーケストレーションによる実装を解説している。
このスライドではSagaパターンの欠点、ACIDの独立性が保証されない、実装コストが高い、デバッグが難しい点などを挙げて、分散トランザクションにおけるACIDの保証の難しさを解説している。
ここでは分散データベースにおける2フェーズコミットについて、PrepareとCommit(もしくはRollback)の2つの段階が必要であることを解説している。
ただし欠点としてブロッキングが発生してしまうこと、パフォーマンスの低下、可用性の低下などを指摘している。
ここから自社が開発するScalar DBの概要を解説。Javaによる実装で、ACID準拠でないデータベースについてACIDトランザクションを実現するという。
このスライドではより詳細な内容を解説している。マイクロサービスによる分散プロセスにおいては、2フェーズコミットによるACIDを実装しているという。
次に先ほど説明した2フェーズコミットの欠点について、Scalar DBがどう対処しているか? を解説した。
またSagaパターン、2フェーズコミットなどの比較についても説明し、現実的な実装の分散データベースのトランザクションマネージャーとしてのScalar DBの利点を解説した。
Scalar DBについて今後の開発の予定を紹介し、今後対応を予定しているデータベースなどについて解説した。GraphQLに対するサポートなども予定しているようだ。
鈴木氏によるセッションの内容は、Scalarが2020年10月にApacheConで行ったCassandraに対するScalar DBのセッションのスライドや2020年6月に公開されたスライドなどをベースに日本語で行ったというものだ。Scalarによるマイクロサービス向けの機能拡張に関しては以下のページを参照されたい。
マイクロサービス向けのScalar DBの機能拡張:Scalar DB、マイクロサービス向けトランザクション管理機能の提供へ
ApacheCon 2020のプレゼンテーション:Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2020)
Scala DBの解説スライド(英語):Scalar DB: A library that makes non-ACID databases ACID-compliant