こんにちは、Aerospikeです。
本記事では、弊社の創設者兼CTOであるSrini Srinivasanが、最新の分散データベースを定義する重要な要素について探求しています。
この記事のまとめ
- 高速でデータの大幅な増加に対応できる信頼性と堅牢性を備えた最新の分散データベースの必要性
- 最新の分散データベースには、水平スケール(スケールアウト)、垂直スケール(スケールアップ)、高いパフォーマンスと可用性を備えた強力な一貫性、地理的に分散されたトランザクションが求められる
企業が競争力を維持するために必要な最新の分散データベースの重要なポイントについて前編、中編、後編と3部に分けて解説します。
最新の分散データベースを定義する要素と、ビジネスを成功に導くための準備とは
私はAerospike に在籍中、あらゆる地域と時間帯、業界の何百ものお客様や見込み客とお会いしてきました。
世界中で、より賢明な企業がリアルタイムデータを活用し、数千万から数億の消費者に対応するアプリケーションのユーザー体験を向上させようとしていると断言できます。
そのような企業は、IT予算を割くことなく年間30%以上のデータ増加率に対応できるよう、高速で信頼性が高く堅牢な最新の分散型データベースの必要性を十分に認識しています。
しかし、そのようなデータベースがどこまで実現可能なのか、多くの人は知りません。
本記事の内容は、このようなコンシューマー・アプリケーションを扱うために必要な特性を備えた分散型データベース、Aerospikeを構築する際に私たちが考案した技術に基づいています。
水平スケール(スケールアウト)、垂直スケール(スケールアップ)、高いパフォーマンスと可用性を備えた強力な一貫性、地理的に分散されたトランザクションなど、分散データベースがどのように機能し、優れているかを要約しています。
これらのエッセンスは単なる理論的な概念ではありません。
大量のデータ、リアルタイム処理、AI/MLを使った予測分析、そして最近ではAIによる生成処理によって、何千万人もの消費者に最高のユーザー体験を提供し、増大し続けるアプリケーションの需要に対応できる最新の分散データベースを構築するための柱となるものです。
これらの要点を探求し、その重要性を理解し、それらがどのように組み合わさって、今日の課題や将来の課題に適応可能なデータベースシステムを作り出すか、見てみましょう。
分散データベースとは
分散データベースとは、データを複数の物理的な場所、通常は複数のコンピューターやサーバーに分散して格納するデータベースシステムです。
分散データベースは、データをネットワーク上の異なるノード間で分散させることによってデータの可用性、信頼性、効率性を高めます。
水平スケール:伸縮性をマスターする
分散データベースの領域では、水平スケーリングは最新のデータマネジメントの要です。
スケールアウトとは、クラスタにノードを追加してデータベースを拡張し、増大するデータ需要を管理する能力を強化するプロセスを指します。
効率的なスケールアウトは、いくつかの重要なトピックに対処する必要があります。
シェアード・ナッシング・アーキテクチャ: 単一競合箇所がない
シェアード・ナッシング・アーキテクチャとは、分散コンピューティング環境において、各ノードが独自のメモリとディスクリソースを持ち、他のノードと共有しない設計のことを指します。
Aerospikeは、シェアード・ナッシング・アーキテクチャを採用しています。
クラスタを形成するすべてのノードはCPU、メモリ、ストレージ、ネットワーク容量が同一です。
さらに、各ノードは互いにピア(対等な関係)であり、その上で実行されるコードも同一です。
したがって、すべてのノードがデータベースを実行するすべてのタスクを実行することができ、クラスタに単一障害点は存在しません。
ホットスポットをなくす: ボトルネックをなくす
スケールアウトにおける重要な課題は、「ホットスポット」(データベース内で過度な負荷がかかる領域)を回避することです。
うまく設計された分散データベースでは、すべてのノードにデータとワークロードを均等に分散させることが目標です。
これにより、リソースの使用が最適化されるだけでなく、1つのノードがボトルネックになることがなくなり、ノードが増えてもスムーズな運用が維持されます。
均一なデータ分割 ワークロードをバランスよく分散
データベースシステムを効果的にスケールアウトするには、データをパーティショニングして分散させる必要があります。
Aerospikeのスキームは「分割統治」戦略を採用し、均一なデータ分割システムを採用しています。
RIPEMD-160のハッシュ・メカニズムを利用し、データは4096のパーティションに均等に分散され、すべてのクラスタ・ノードにまたがります。
これは、単にデータを分散させるということではありません。
各ノードが公平に負荷を負担し、効率性と信頼性を確保できるように、スマートにデータを割り当てるということを意味します。
また、オリジナルのパーティショニング・マッピング・アルゴリズムは、ノードの追加やクラスタからの脱落時のデータ移動を最小限に抑えるように設計されています。
最小限のデータ移動を提供するという要件は、クラスタ・サイズが大きい場合(100ノード以上)、大きなパーティション・スキュー(~20%)を生み出す可能性があることに注意してください。
私たちは、ノードの追加や脱落時にデータの移動を許容する均一なデータ・パーティショニング・アルゴリズムを設計し、ノードへのパーティション割り当てに関するスキューをすべて排除しました。
クラスタ内のノードを別々のラックにグループ化(ラック・アウェアネス)することで、各パーティションのマスターとレプリカが別々の障害グループに属するノードに格納されることが保証されます。
これにより、ラック全体がダウンするようなハードウェア障害が発生した場合でもデータが失われることはありません。
さらに、アプリケーションクライアントが最も近い場所にあるサーバー(ラック内のノードはコロケーションされている)からデータを読み出すことができるため、ネットワークトラフィックの削減にも役立ちます。
動的クラスターマネジメント: 障害発生時の継続運用
インターネットスケールのアプリケーションでは、短いリアルタイムウィンドウの中で何百万人ものユーザーがアプリケーションにアクセスする(またはアプリケーションから離れる)可能性があります。
そのため、アプリケーションのデータニーズは急速に変化する可能性があり、動的なクラスタ管理(システムの弾力性)が重要になります。
つまり、サービスの停止やトランザクションの流れの中断なしに、新しいノードを追加し、既存のノードを削除する必要があります。
さらに、ノードが追加されようが削除されようが、ハートビート機構がそれを即座に認識し、すべてのノード間でデータ、メタデータ、インデックスのバランスを自動的に調整し、ノード間ですべてを均等に再分配することでトランザクションのワークロードを調整します。
サービスを中断することなく、このシームレスなデータ再分配とワークロードのリバランシングを行うことが、高いパフォーマンスと可用性を維持するための鍵となります。
データベースは、混在するワークロードに動的に適応し、さまざまな条件下で最適なパフォーマンスを確保する必要があります。
動的なクラスターマネジメント: 障害発生時の継続運用
インターネットスケールのアプリケーションでは、短いリアルタイムウィンドウの中で何百万人ものユーザーがアプリケーションにアクセスする(またはアプリケーションから離れる)可能性があります。
そのため、アプリケーションのデータニーズは急速に変化する可能性があり、動的なクラスターマネジメント(システムの弾力性)が重要です。
つまり、サービスの停止やトランザクションの流れの中断なしに、新しいノードを追加し、既存のノードを削除する必要があります。
さらに、ノードが追加されようが削除されようが、ハートビート機構がそれを即座に認識し、すべてのノード間でデータ、メタデータ、インデックスのバランスを自動的に調整し、ノード間ですべてを均等に再分配することでトランザクションのワークロードを調整します。
サービスを中断することなく、このシームレスなデータ再分配とワークロードのリバランシングを行うことが、高いパフォーマンスと可用性を維持するための鍵となります。
データベースは、混在するワークロードに動的に適応し、さまざまな条件下で最適なパフォーマンスを確保する必要があります。
スマート・クライアント: ワンホップ・ツー・データでリニアに拡張
スケールアウトのもう一つの重要な側面は、スマート・クライアントの役割です。
クライアントがデータを見つけるために複数のホップを経由する必要がある従来のデータベースとは異なり、当社のスマート・クライアント・テクノロジーは、データへの直接かつ効率的なアクセスを保証し、待ち時間を最小限に抑えます。
スマートクライアント(通常はコードライブラリ経由でアプリケーションに組み込まれる)は、関連するノードに直接接続し、大規模な分散クラスタでは特に重要な1ホップのデータ検索パスを確保します。
また、ワンホップ・ツー・データ方式は、サーバーノードとアプリケーションノードの数が時間とともに増加しても、システムの線形スケーラビリティを保証します。
基本的なスケーリングを超える: 現実世界の複雑性への対応
これまで見てきたように、水平スケーリングには単にノードを追加するだけでなく、これらのノードがどのように相互作用し、データを共有し、一貫性を維持するかが重要です。
このプロセスには、洗練された同期とフォールトトレランスのメカニズムが不可欠です。
システムは、ノードの障害、ネットワークの問題、その他の現実的な課題に効率的に対処できるように設計されており、データの整合性とシステム・パフォーマンスが損なわれることはありません。
つまり、ホリゾンタル・スケーリングとは、インテリジェントで効率的、かつシームレスな技術インフラの成長により、ビジネスの高い成長をサポートすることなのです。
ビッグデータがあらゆるところに存在する現代では、リアルタイム・データベースを含む主要な技術システムのスケーラビリティは、生き残りと同義語になっています。
当社の水平スケーリング戦略は、シェアードナッシング・アーキテクチャ、ホットスポットの排除、均一なデータ・パーティショニング、ダイナミック・クラスタ管理、スマート・クライアント・テクノロジーに基づいています。
これは、このような水平スケーリングの課題に対処する方法を例示しています。
ここでの目標は、システム・アーキテクチャを再構築することなく、10倍(あるいは100倍)の成長を達成できるようにすることです。これはビジネスの成功に不可欠です。
このブログは、2024年2月28日のブログ「The essentials of a modern distributed database」の翻訳です。