TableStoreの高いデータ信頼性と高いサービス可用性を実現する方法

本記事では、Panguの共有ストレージシステムを利用して、**[Table Store](https://www.alibabacloud.com/product/table-store?spm=a2c65.11461447.0.0.1c54124cjJG2DC)**がどのようにして**高いデータ信頼性**と**高いサービス可用性**を実現できるのかを解説します。

著者：宜勝

分散型NoSQLデータベースといえば、HBase、Cassandra、AWS DynamoDBなど多くの名前が頭に浮かびます。これらのNoSQLデータベースは当初、超大規模なデータ量と同時実行をサポートする分散システムとして設計されました。また、MongoDBやRedisもクラスタリング機能を提供しているので思い浮かぶかもしれません。しかし、これら2つのデータベースは、シャーディング、レプリカセット、マスタースレーブレプリケーションを設定するために手動で介入する必要があります。

#Table Storeの利点
Table Storeは、アリババが開発したNoSQLサービスです。そのアーキテクチャ設計には、GoogleのBigtableの論文を参考にしました。Table Storeは、HBase、Cassandra、DynamoDBといくつかの類似点があります。次の図はTable Storeの利点をいくつか示しています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/65650469-2488-bcc0-cf8b-5cec9fdcc41b.png)


この記事では、Table Storeで使用されている技術を中心に、高信頼性・高可用性を実現するための技術を紹介します。Table Storeは、データの信頼性が11ナイン、サービスの可用性が4ナインに準拠して設計されています。クラウドサービスとして、Table Storeは10の9つの信頼性と3の9つの可用性をSLAとして提供することができます。

#耐障害性、高信頼性、高可用性
耐障害性、高信頼性、高可用性は相互に関連する概念です。耐障害性とは、ソフトウェアやハードウェアの障害を迅速に検出し、障害から迅速に回復する能力のことです。これは一般的に冗長性によって実装されており、あるシステムの障害によって他のシステムが影響を受けないようにすることができます。高い信頼性はデータの安全性を示し、高い可用性はシステムの稼働時間を示します。一般的に、高信頼性と高可用性は、複数の9を含むパーセンテージで表されます。

冗長性は、フォールトトレランスの実装に役立ちます。データ層では、通常、データの複数のコピーが存在します。1つのコピーが破損しても、データの整合性に影響はありません。サービス層では、複数のサービスノードがあり、1つのノードがダウンタイムに遭遇した場合、サービスを別のノードに移行することができます。データの完全性がまず保証されていないとサービスの可用性が実装できないため、サービスの高可用性はデータの高い信頼性に依存します。

耐障害性の高いシステムは、必ずしも利用可能性が高いとは限りません。高可用性は、システムがどれくらいの期間稼働すると予想されるかを示す指標です。システムがホットアップグレードやダイナミックスケーリングをサポートしていない場合、メンテナンスにダウンタイムが必要であることを示していますが、システムは高可用性ではありません。



より高い可用性を実現するために、2つ以上のシステムを使用してアクティブスタンバイシステムを形成し、災害耐性を実装することができます。一般的な例としては、1 つの都市に 2 つのデータセンターがあります。都市に2つのデータセンターを設置し、自動切り替えや高速な手動切り替えを組み合わせることで、より高いシステム可用性を実現することができます。また、ビジネス向けには、アプリケーションのエラスティックアーキテクチャ設計を行うことで、サービスの例外が発生した場合に自動的にダウングレードできるようにし、ビジネスの可用性を向上させることができます。

#TableStoreが高信頼性と高可用性をどのように実現するか
従来の MySQL のプライマリとセカンダリの同期計画では、プライマリデータベースに障害が発生した場合、HA モジュールはサービスをセカンダリデータベースに移行し、高可用性を実現します。この方法には1つの問題があります: 強力なデータの一貫性を保証するためには、リターン操作の前にプライマリとセカンダリの両方のデータベースにデータが正常に書き込まれていなければなりません (すなわち、最大保護モード)。セカンダリデータベースが利用できない場合、プライマリデータベースへの書き込みも失敗します。したがって、可用性と一貫性を同時に保証することはできません。

スタンドアロン障害の可能性が同じである分散システムでは、クラスタでのスタンドアロン障害の可能性はクラスタサイズが大きくなるほど高くなります。高可用性と高信頼性は分散システムの基本的な設計目標です。分散システムでは、高いデータ信頼性は、レプリカやPaxosなどの分散一貫性アルゴリズムを使用して実装されることが多く、高可用性の実装には、通常、高速フェイルオーバー機構、ホットアップグレード、動的スケーリングの実装が含まれます。

Table Storeがどのようにして高信頼性と高可用性を実装しているかを知るために、まず以下のアーキテクチャ図を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f1ea919d-dcca-8508-58d3-146ebadcd9d2.png)


図中のテーブルワーカーはバックエンドのサービスノードを表しています。テーブルワーカーの下には、Panguと呼ばれるシステムがあります。Panguはアリババが開発した高度な分散システムです。分散ストレージは共有システムです。テーブルワーカーのすべてのノードは、Panguシステム内のすべてのファイルにアクセスすることができます。また、このアーキテクチャはストレージとコンピューティングを分離しています。

#データの高い信頼性
Panguは分散型ストレージの問題に焦点を当てています。Panguの基本的な役割は、データの高い信頼性と強固な整合性を確保することです。Panguを使用する際にはデータのコピーを3つに設定し、1つのコピーが失われても読み書きやデータの整合性に影響を与えないようにしています。データの書き込み時には、少なくとも2つのコピーが正常に書き込まれたことを確認してからデータを返し、もし1つのコピーの書き込みに失敗した場合はバックエンドで修正を行います。データを読み出す際には、通常は1つのコピーだけを読み出す必要があります。

#サービスの高可用性
###Table Storeデータモデル
まず、次の図のようなテーブルストアのデータモデルを見てみましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f28d2319-fd0c-abff-9ccd-d4761af654f9.png)


TableStoreでは、テーブルは一連の行で構成され、各行には主キーと属性列が含まれます。主キーは複数の主キー列を持つことができ、例えば、次の図の主キーは3つの主キーを持ち、そのすべてが文字列です。

PrimaryKey (pk1:文字列、pk2:文字列、pk3:文字列)

最初の主キーの列は、パーティションキーです。この例では、パーティションキーはpk1です。テーブル内のすべてのデータは、プライマリキー（この例では3つのプライマリキーカラム）でソートされ、パーティションキーの範囲に基づいてパーティションが分割されます。テーブル内のデータ量やアクセス量が増えると、パーティションが分割されて動的にスケールされます。大容量のデータを含むテーブルでは、数百、あるいは数千のパーティションを持つこともあります。

なぜこのように設計されているのでしょうか？すべてのデータが主キーでソートされているため、テーブル全体が大きなSortedMapのようになり、主キーの任意のセクションをターゲットにしたレンジクエリを実行することができます。また、第一主キーのカラムがパーティションのキーとなるため、同じ第一主キーのカラムを持つすべてのデータエントリが1つのパーティションに分割され、カラムの自動インクリメント、パーティション内のトランザクション、LocalIndexなど、パーティション内の機能開発が容易になります。

なぜパーティションキーはハッシュキーではなくソートされたキーとして設計されているのでしょうか？それは共有ストレージを利用したからです。共有ストレージを採用した場合、パーティションが連続的に分割されていて、Panguでデータが分散されている場合には、データを搬送する必要がありません。もし共有ストレージが採用されていなかったら、データの分散に対応しなければなりませんでした。例えば、ハッシュ一貫性アルゴリズムを利用することができる。この場合、パーティションのキーは通常ハッシュキーであるため、テーブル全体の主キーの任意のセクションを対象とした範囲問い合わせには対応できません。

###高可用性の実装
本題に入りましょう。TableStoreはどのようにして高可用性サービスを実装しているのでしょうか？異なるワーカーにロードされた 100 個のパーティションを含むテーブルを考えてみましょう。あるワーカーの障害が発生すると、そのワーカー上のパーティションは自動的に別の利用可能なワーカーに移行されます。一方で、あるワーカーの障害は一部のパーティションにしか影響しませんが、全てのパーティションに影響するわけではありません。一方、Panguは共有ストレージシステムを使用しているため、どのワーカーでもどのパーティションをロードすることができ、計算リソースとストレージリソースは分離されています。そのため、フェイルオーバーが非常に速く、アーキテクチャもシンプルになっています。

前の段落では、フェイルオーバーに焦点を当てています。このアーキテクチャでは、柔軟な負荷分散を実装することもできます。パーティションの書き込みと読み込みのトラフィックが過剰になった場合、パーティションを素早く2つ以上のパーティションに分割して、異なるワーカーにロードすることができます。パーティションが分割されると、親パーティションのデータを子パーティションに移行する必要はありません。その代わりに、親パーティション内のファイルへのリンクが最初に子パーティションで生成され、親パーティション内のデータはバックグランドで圧縮を行ってリンクを削除して移行されます。パーティションが分割された後、その子パーティションはさらに分割することができます。すべてのパーティションはクラスタ内の異なるワーカーに均等にロードされ、クラスタのCPUとネットワークリソースをフルに活用します。

###メンテナンス、アップグレード、ハードウェアの更新
Table Storeはクラウドサービスとして、サービス側で日々のメンテナンス、ソフトウェアのアップグレード、ハードウェアのアップグレードを提供しており、ユーザーには完全に透過的な形で提供されています。これらの保守運用は、高可用性を実現するために設計されている必要があります。分散型システムの保守は複雑です。クラウドサービスを利用しないとメンテナンスは面倒でリスクが高く、サーバーは、アップデートを受けたり、さまざまな障害に対応したりすると、利用できなくなることが多くなります。また、ハードウェアの更新も必要です。クラウドサービスを利用することで、より良いパフォーマンスをユーザーに提供することができ、ハードウェアを継続的にアップデートすることで、より良いネットワークを構築することができます。クラウドデータベースとしてのTable Storeは、パフォーマンスを向上させ、より高い可用性を提供し、より良いユーザー体験を提供できると考えています。



#まとめ
Table Storeは、Panguの共有ストレージシステムを利用して高いデータ信頼性を実現し、高速なフェイルオーバーと柔軟な負荷分散により高可用性を実現しています。高信頼性と高可用性を実現するためには、共有ストレージが分散型NoSQLデータベースにとって非常に大きなメリットがあり、クラウドサービスがユーザーに大きな利便性を提供していることがわかります。ここではこれらの利点をまとめておきます。

Panguの共有ストレージの利点：
1、ストレージとコンピューティングが分離されているため、アーキテクチャの柔軟性が高まり、機能のデカップリングが可能となり、ストレージ層とアプリケーション層がそれぞれの問題の処理に集中できるようになります。Panguでは基本的なデータ信頼性の保証に加えて、ハイブリッドストレージ、コールドデータとホットデータの分離、 消去コーディング、アベイラビリティゾーン間のマルチレプリカ分散など、様々な機能を提供しています。
2、また、Panguは多くの有用な機能を提供しながら性能を向上させることができます。新しいハードウェアや技術を用いて、共有ストレージはすでにカーネルインターフェースを用いてローカルディスクの書き込みや読み込みを行うアプリケーション層よりも高い性能を提供し始めています。


クラウドサービス「Table Store」のメリット：

1、Table Storeは、信頼性の高い利用可能なSLAをユーザーに提供し、分散システムにおけるSPOFやホットスポットを自動的かつ迅速に解決します。メンテナンス、アップグレード、ハードウェアの更新はユーザーに対して完全に透過的に行われるため、ユーザーのメンテナンス問題を最小限に抑えることができます。
2、従量課金。高速なデータパーティショニングとパーティション分割により、Table Storeはユーザーのサービスボリュームの変化に柔軟に対応し、1秒間に1,000万個のクエリを提供します。ユーザーは、ピーク時の営業時間中に使用するためのリソースを予約する必要がないため、無駄なコストを回避することができます。
3、サービスサイドは定期的に機能のイテレーションやアップグレードを行い、新機能のリリース、パフォーマンスの最適化、可用性の向上を行い、クラウドユーザーにより良い体験を提供しています。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/how-table-store-implements-high-reliability-and-high-availability_594658?spm=a2c65.11461544.0.0.23e75355s1vaCU)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*