💫

分散型SQLとは?データベースの進化形

2023/04/13に公開約5,500字

https://www.cockroachlabs.com/blog/what-is-distributed-sql/

クラウドへの移行が進むにつれ、最も重要なアプリケーションを支えているレガシーリレーショナルデータベースがクラウドの利点を生かせず、拡張が困難であることに気づきます。このデータベースがクラウドへの移行のスピードと効果を制限しているのです。この問題に対処するため、組織はOracle、SQL Server、Postgres、MySQLなどのテスト済みのリレーショナルデータストアの信頼性とクラウドに伴うスケールとグローバルカバレッジの利点を求めています。

このような要件を満たすためにNoSQLストアに目を向けた企業もあります。これらの選択肢は一般的に規模の要件を満たすことができますが、真の一貫性を提供するためにゼロから設計されていないため、トランザクションデータベースとしては不十分です。最近、NoSQLソリューションの中には「ACIDトランザクション」を提供するものもありますが、注意点が多く、財務台帳、在庫管理、ID管理などのミッションクリティカルなワークロードに必要な分離レベルを提供することはできません。

分散型SQLは新しいタイプのデータベース

グローバルに活躍する企業の中にはこの問題を解決し、専用のデータベースを構築しているところがあります。その最も一般的な例がGoogle Cloud Spannerです。2012年、GoogleはSpannerに関する論文を発表し、分散システムとグローバルスケールに根差したデータベースの新しい見方を示しました。

「SpannerはGoogleが開発したスケーラブルでマルチバージョン、グローバルに分散し、同期して複製されるデータベースです。グローバル規模でデータを分散し、外部整合性のある分散トランザクションをサポートする最初のシステムです。」

また、14ページにわたる論文ではどのようにして一貫性のあるスケーラブルなデータベースを構築することができたのか、その詳細が明示されています。この論文は純粋に天才的で、データベースの次の進化の基礎を概説しています: 分散型SQLです。

分散型SQLは単一のデータセンター内の複数の物理ノード、あるいは必要に応じて多くのデータセンターに分散して配置された単一の論理データベースであり、これらすべてによって弾力的なスケールと弾丸のような耐障害性を実現することができます。

分散型SQLデータベースとは?

分散環境で真にスケーラブルなSQLを実現しようとする試みは、これまでにもいくつか行われてきました。既存のデータベースを自分たちのニーズに合わせて改造しようとする試みもありますが、結局のところ真の分散型SQLデータベースの約束は果たせません。では、分散型SQLデータベースを構成するものは何でしょうか?その要件は次の5つのコア条件に集約されます:

1. スケール

分散型SQLデータベースは運用の複雑さを招くことなく、クラウド環境の機能をミラーリングするために、シームレスにスケールする必要があります。コンピュートで大掛かりな作業をせずにスケールアップできるように、データベースも同様にスケールアップできる必要があります。これにはデータベース内の複数の分散参加者にデータを均等に分散させる機能も含まれます。

2. 一貫性

分散SQLデータベースは分散環境において高いレベルの分離を実現する必要があります。分散システムとマイクロサービスがデフォルトのアーキテクチャであるクラウドベースの世界では、複数のオペレータが同じデータに取り組もうとする可能性があるため、トランザクションの一貫性が難しくなります。データベースは競合を調停し、シングルインスタンスデータベースに期待するのと同じレベルのトランザクションの分離を提供する必要があります。

3. 回復力

分散型SQLデータベースは外部ツールに頼らずとも、当然ながら最高レベルの耐障害性を実現する必要があります。クラウドはワークロードにとって常時接続の環境であり、データベースも同じ特性を持つ必要があります。分散データベースを使えば障害からの復旧にかかる時間をゼロに近づけることができ、外部からの設定なしに自然にデータを複製することができます。

4. ジオ・レプリケーション

分散型SQLデータベースは複雑で広く分散した地理的環境全体にデータを配布することを可能にする必要があります。クラウドは世界の隅々まで許容できるサービス品質で到達できる能力を備えており、データベースがアプリケーションを制限するようなことがあってはなりません。データベースはあなたの期待に応えるパフォーマンスを発揮する必要があります。

5. SQL

そして、これら4つの技術要件は最重要ですが、何よりも重要な前提条件が1つあります。データベースはSQLを話さなければなりません。これはデータの言語であり、すべてのアプリケーションロジックのデフォルトでもあります。データベースを使うために開発者を再教育する必要はありません。開発者はすでに慣れ親しんだSQLの方言を使うことができるはずです。

このような要件を満たすデータベースはいくつかあります。リストにはもちろんSpannerも含まれているが、Amazon Aurora、Yugabyte、FaunaDB、CockroachDBもこの新しいカテゴリーのメンバーとして考えることができるでしょう。これらのメンバーはすべて何らかの形で要件を満たしており、あるものは他のものより優れています。このリストに含まれていないのはOracle、Postgres、MySQL、そしてNoSQLのオプションのすべてです。それぞれは要件の一部を満たすかもしれませんが、すべての要件を満たすものはなく、代替品とみなすことはできません。

この原則を説明するビデオをご覧ください:

https://www.youtube.com/watch?v=SxsMgHFNvWg

分散型SQLデータベースはデータローカリティを提供する必要がある

分散された世界に住むと、実はデータベース自体がデータの所在を把握することができることが分かってきます。参加者がさまざまな地域やデータセンターにいる場合、それぞれの場所を把握し、保存するデータを場所に関連付けることが可能になります。アプリケーションアーキテクトの中にはこれをアプリケーションの一部として実装している人もいますが、この方法はエラーが起こりやすく脆いものです。データベースを使用してテーブルの何らかのフィールドに基づいてデータをジオパーティションすることは、分散型SQLの新たな要件となります。これによりデータベースを使用してデータ主権に関する懸念に対処することができます。また、データをユーザーに追従させ、情報への低遅延アクセスを保証したり、データを明示的なクラウドに結びつけ、退出料を最小限に抑えたりすることも可能です。

真の分散型SQLデータベースはマルチクラウドでなければならない

分散型SQLデータベースの特徴は半自律的なユニットがあり、それがすべて大きなシステムに参加することです。各ユニットはそれ自体でデプロイされ、その後、より大きなシステムであるCockroachDBクラスタに参加することができるはずです。これは上記の最初の5つの要件を促進する固有の特性です。しかし、これはデータベースを真のマルチクラウドに拡張するために使用することもできます。データベースは配布を達成するために単一のネットワークに依存してはなりません。パブリッククラウド、プライベートクラウド、さらにはオンプレミスのインスタンスまで、参加者がどこにいてもいいように、この制限から切り離されるべきなのです。この要件は分散型ハイブリッドクラウドやマルチクラウドの世界に生きるコンピュートの将来にとって重要です。

分散型SQLの基本要件

前述の7つの要件は分散SQL独自のものですが(まあ、SQLの件以外はすべて)、データベースであることに変わりはなく、当然ながらデータベースであるための基本要件を満たすことが要求されていることに留意する必要があります。以下のような一連の期待があります:

  1. 管理: コマンドラインとグラフィカルベースのツールを使ってデータベースを簡単にインストールし、設定できるようにする必要があります。これには環境の制御やバックアップ/リストアのためのデータライフサイクルの制御が含まれます。また、テーブルの作成、スキーマの定義と実装、インデックスやパーティションの設定、DDLの再作成も可能です。
  2. 最適化: データベースはDBAがクエリのパフォーマンスを把握し、その実行を最適化することができるようにする必要があります。これにはコストベースのオプティマイザなどの高度な機能が含まれますが、分散型の世界ではこれは厄介で新しい概念となります。
  3. セキュリティ: データベースは、認証、認可、説明責任という AAA の主要な機能を提供する必要があります。また、データベースはそれ自体で完結するのではなく、アイデンティティ管理とガバナンスのための中央情報源と統合し、データベースが含むデータ(テーブル、行、列レベル)に対して一貫したポリシーを設定する必要があります。
  4. 統合: データベースは単独で機能するものではなく、十分にテストされた既知のドライバを使用して、既存のアプリケーションと統合する必要があります。既存のORMとうまく統合し、一括インジェストやエクスポートの機能を提供する必要があります。また、ETLツールとの連携やストリーミング分析やクラウドストレージなど、より高度なサービスと統合するためのデータ取得機能の変更など、主要な機能を提供する必要があります。

これらの「基本的な」要件は重要であり、より成熟したエンタープライズ対応のデータベースであることを示すものです。これらは最もエキサイティングな機能ではないかもしれませんが、どのようなプロジェクトでも採用され、成功するために重要です。

分散型SQLデータベースの評価方法

CockroachDBはクラウドネイティブな分散型SQLデータベースとして素晴らしい選択肢です。CockroachDBは何百もの組織でごくありふれたワークロードからミッションクリティカルなものまで、クラウドへの移行を支援してきました。また、より高度なオーケストレーション環境におけるクラウドネイティブ戦略の基礎となるものです。私たちは自分たちが構築したものを非常に誇りに思っています。

また、私たちはこの新しいカテゴリーの提唱者であり、分散型SQLはデータベースの正しい進化であり、クラウドにおけるデータ管理の方法の未来であると信じています。このため、私たちのソリューションと他のすべてのソリューションがこれらのコア要件に関して最高の評価を受けるべきだと強く感じています:

  1. 拡張性
  2. 一貫性
  3. 回復力
  4. ジオ・レプリケーション
  5. SQL
  6. ローカリティ
  7. マルチクラウド
  8. 管理
  9. 最適化
  10. セキュリティ
  11. 統合

これらの要件をすべて満たすデータベースはクラウド上のミッションクリティカルな(そしてそれほどミッションクリティカルではない)アプリケーションに信頼されるように成熟しています。そして、これらの要件の中には単純なものではないものもあります。これらは正しく理解するのに時間がかかる高度なテーマです。これらの項目についてベンダーと議論する際には、一貫性や局所性といった概念について深く掘り下げることをお勧めします。誰もが同じ論文を読んだことがあると思いますが、最終的には実装、そしてより重要なのは実運用です。新しいカテゴリーと同様に複雑なコーナーケースや問題を特定し、修正することができるのは実稼働時のみであるため、これが最も重要な関心事となるのです。つまり、最後の(そして12番目の)要件は成熟度ということになります。

Discussion

ログインするとコメントできます