CNDT2021、分散トランザクションを実装するScalar DBを開発元のエンジニアが解説

CNDT2021から、マイクロサービスにおける分散データベース、特にクリティカルなデータを扱う場合に必要なACID(不可分性、一貫性、独立性、永続性、Atomicity、Consistency、Isolation、Durability)を実現するために開発されたScalar DBというJavaのライブラリーに関するセッションを紹介する。「マイクロサービスにおける分散トランザクションライブラリ」というタイトルだが、株式会社Scalarというベンチャーが開発するScalar DBを解説するセッションだ。

動画:マイクロサービスにおける分散トランザクションライブラリ

プレゼンターはアーキテクトの鈴木俊裕氏

セッションの前半はマイクロサービスのアーキテクチャー、その中のデータ整合性に関する考察、トランザクションを管理するメカニズムに関する解説、分散トランザクションマネージャー、Scalar DBの解説などとなっている。

セッションの内容

セッションの内容

まずマイクロサービスについて、複数のプロセスが連携して稼働するシステムであることを踏まえた上で、データベースの持ち方について解説を行った。ここでは各プロセスにデータベースを保持するDatabase per Serviceについて解説を行っている。

データベースをプロセスごとに持つDatabase per Serviceを解説

データベースをプロセスごとに持つDatabase per Serviceを解説

ここではマイクロサービスの利点を活かすためにデータベースを共有せずに個別に持つことを推奨しているが、この方式ではデータの整合性を保つことが課題として浮き上がってくることを解説。

例を挙げて複数のデータベースの整合性を保つことの重要性を解説

例を挙げて複数のデータベースの整合性を保つことの重要性を解説

この例ではユーザーがECサイトなどで購買を行う際に、オーダーを受け付けるサービスが顧客のクレジットカードが利用可能なのかをチェックする別のプロセス、カスタマーサービスにデータを送信する途中で処理が中断してしまった場合を想定して、それぞれのプロセスが持つデータベース間で整合性が取れなくなってしまうことを解説した。

複数のサービスで整合性を保つ方法を解説

複数のサービスで整合性を保つ方法を解説

ここから整合性を保つための方法を解説。Sagaパターンと2フェーズコミットによる分散トランザクションについて説明を行った。

Sagaパターンについて解説

Sagaパターンについて解説

Sagaパターンについてはマイクロソフトが公開している技術ドキュメントを参照して欲しい。

参考:saga 分散トランザクション パターン

マイクロソフトのドキュメントではACIDを「原子性、一貫性、分離性、持続性」と翻訳していることに留意されたい。

例を使ってSagaパターンを解説

例を使ってSagaパターンを解説

前出のECサイトで購買を行う例を使ってSagaパターンを解説しているが、実装方法としてコレオグラフィとオーケストレーションの2つがあることは特に説明せずに、ここではオーケストレーションによる実装を解説している。

Sagaパターンの欠点を解説

Sagaパターンの欠点を解説

このスライドではSagaパターンの欠点、ACIDの独立性が保証されない、実装コストが高い、デバッグが難しい点などを挙げて、分散トランザクションにおけるACIDの保証の難しさを解説している。

2フェーズコミットを解説

2フェーズコミットを解説

ここでは分散データベースにおける2フェーズコミットについて、PrepareとCommit(もしくはRollback)の2つの段階が必要であることを解説している。

2フェーズコミットの欠点を解説

2フェーズコミットの欠点を解説

ただし欠点としてブロッキングが発生してしまうこと、パフォーマンスの低下、可用性の低下などを指摘している。

オープンソースのScalar DBを紹介

オープンソースのScalar DBを紹介

ここから自社が開発するScalar DBの概要を解説。Javaによる実装で、ACID準拠でないデータベースについてACIDトランザクションを実現するという。

Scalar DBの詳細な解説

Scalar DBの詳細な解説

このスライドではより詳細な内容を解説している。マイクロサービスによる分散プロセスにおいては、2フェーズコミットによるACIDを実装しているという。

Javaのコードを使って2フェーズコミットを解説

Javaのコードを使って2フェーズコミットを解説

ECサイトの例を使って解説

ECサイトの例を使って解説

次に先ほど説明した2フェーズコミットの欠点について、Scalar DBがどう対処しているか? を解説した。

Scalar DBによる2フェーズコミットの欠点への対策

Scalar DBによる2フェーズコミットの欠点への対策

また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

Original Post>