このページの本文へ

前へ 1 2 3 4 次へ

アーキテクチャの知見を惜しみなくシェアしたre:Inventのエンジニア必見講演

複雑なシステムをシンプルに Amazon CTOボーガス氏が語る6つの学び

2024年12月30日 09時00分更新

文● 大谷イビサ 編集●ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

分散システムを前提としたAurora DSQLのトランザクションの仕組み

 インターバルのビデオの後、ボーガス氏がテーマに掲げたのはデータベースだ。「データを複数のリージョンにまたがって保持すること。そのためにチャレンジを抱えているお客さまはたくさんいる。どうやったらみなさん方がより仕事をしやすくなるのだろうか?」(ボーガス氏)。

 これを実現するためには、もっとも複雑な負荷を取り除き、シンプルなシステムを作っていく必要がある。そこで重要なのがデータベースだ。「複雑さの負荷はお客さまの肩にのしかかっている。だから、最初はそういったデータベースをマネージすることから始めた」と語るボーガス氏が紹介したのが、2010年にリリースされたAmazon RDSだ。「アップデートやパッチング、メンテナンス、高可用性の悩みを解決する。これはデータベースワークのイノベーションをわれわれが担っているからだ」(ボーガス氏)。

 続いてスタートさせたのが、Amazon Auroraの構築である。まずは演算とストレージを分離すうことで、シームレスな運用を実現し、オンデマンドでキャパシティを上げることができるようになった。そして次世代のAuroraとして今回発表されたのが、Amazon Aurora DSQLだ(関連記事:AWSの再構築が始まった “既存の”ビルディングブロックはどう変わったか?)。どのリージョンでも同じようにSQLを利用でき、最適な状態をキープし、コンプライアンスを確保する。また、グローバルな分散アプリケーションを前提に、高いレジリエンス能力を得られる。

 これを実現するために、Aurora DSQLでは今回のシンプル化の鉄則を実践したという。設計段階からこれらの要件を事前に織り込み、進化を前提とした基盤を構築。システムを独立性と疎結合、高いコヒージョンを得られるコンポーネントに分割して、API化。それぞれがニーズに合わせてスケールできるように構成した。

システムの分割、高いコヒージョン、APIを実装

 続いてトランザクションについての説明。Aurora DSQLのトランザクションは、クエリを制御するクエリプロセッサー、トランザクションを裁定するアジャスディケーター、履歴を記録したジャーナル、ストレージと仲立ちするクロスバーから構成される。

 「たとえば、ピザを食べたいから注文しようとする。4以上の評価を得た店に注文したい場合、裏ではなにが起こっているだろう」(ボーガス氏)。まずアプリケーションはフロントエンドに接続し、独立した小さなクエリプロセッサーを割り当て、クロックを読みとり、リクエストを送信。シャードされたストレージのうち、どこに対象のデータがあるかを確認し、トランザクションを介さず、データベースアウェアなストレージから直接データを取得する。

 アプリケーションでは、ユーザーによるレストランの選択、メニューの選択のたびにSQLが送信するため、数多くのインタラクションが発生する。クエリプロセッサーでは、そのたびにストレージから直接データを読み、アプリケーションに結果を戻す。最終的にオーダーが入るとここで初めて一連のトランザクションがコミットされる。「DSQLでは、クエリプロセッサーがすべてのクエリの一時的な保管場所として機能し、リードライトはローカルメモリで行なわれる」とボーガス氏は語る。分散型のAurora DSQLでは、リージョンをまたいだインタラクションはこのコミット時に行なわれるという

 一連の処理を制御するクエリプロセッサーは、Firecrackerと呼ばれるマイクロVM上で動作しており、トランザクションのステートを管理。ユーザーからのクエリに対しては、トランザクション開始時のスナップショットからの一貫した読み取りを実現し、書き込みリクエストに対しては、いったんプールされ、トランザクションの結果を元に実行される。

 クエリプロセッサーからの情報提供を受け、裁定を任されたアジャディケーター(Adjudicator)は、複数のトランザクション間の競合を検知し、書き込みの一貫性を保証する。書き込み箇所が競合した場合は、トランザクションの開始時間を元にいずれかのトランザクションが許可され、コミットが成立する。あとはジャーナルをベースにコミットされたトランザクションの実行が行なわれ、管理したら確認をアプリケーションに戻して、一連の処理が完了する。「それぞれのコンポーネントは独立して運用されている。これが複雑性を管理する原則を表したもっともいい事例だ」(ボーガス氏)。

Amazon Auroraでのトランザクションの仕組み

正確な時刻もビルディングブロックの1つ

 これらトランザクションの判断で重要な時刻はどうなのか? 「私たちにとって時間は重要だが、だいたいでいい。しかし、分散システムにおいて時刻は不可欠なものだ」とボーガス氏。しかし、通常はローカルクロックを用いるが、分散システムでは利用が難しい。1970年代からさまざまなアルゴリズムが研究されてきたが、30年かけてようやく完成したのはハードウェアのクロックだ。

 AWSでは独立したシステムとして、マイクロ秒の精度を持つハードウェアクロックがデータセンターの中に格納されており、Amazon Time Sync Serviceとしてユーザーも利用できる。衛星から受信した時刻がデータセンターの原子時計、さらにはEC2のNitroカードで同期。この時刻がトランザクション時にはクエリプロセッサーのペイロードに記述されることになる。

Amazonでの時刻同期の仕組み

 AWSでは正確な時刻の同期を行なうためのタイムスタンプシステムClockBoundも導入されており、マイクロ秒以下のナノ秒単位でのスタンプが用いられているという。「この環境を得られるのはAWS以外にはない。正確なクロックは複雑性を削減する」とボーガス氏。さまざまなビルディングブロックの中で、すでに時刻というブロックも提供されているわけだ。

 20年に渡る知見を元に、システムにつきまとう複雑性との付き合い方を惜しみなく披露したボーガス氏は、最後に社会課題を解決するためのCTOフェローシップの支援をしていくと自身について説明。また、re:Invent最終日のお楽しみである音楽イベント「re:Play」で会おうとアピール。「パーティー!」と叫んで登壇を終えた。

■関連サイト

前へ 1 2 3 4 次へ

カテゴリートップへ

  • 角川アスキー総合研究所
  • アスキーカード