[AWS Dev Day ベルリン 2019]マルチーリージョン・Active-Activeなアプリケーションを構築しよう!

2019年10月27日にベルリンで行われた AWS Dev Day Berlin 2019 に参加してきました。

同イベントから、マルリリージョンなアプリケーション開発に関する次のセッションについて紹介します。

セッション

タイトル : Going Global with Serverless

可用性の向上やグローバルに展開するサービスのパフォーマンス向上などのために、複数リージョンにアプリケーションを展開したいことがあります。 以下では、Global Accelerator と DynamoDB Global Table を利用し

  • マルチージョン
  • Active-Active
  • ハイパフォーマンス

なアプリケーションを構築する方法を紹介します。

可用性

冗長構成を取ることで可用性は向上します。

1台構成で可用性が 99% のシステムがあるとします。

2台の冗長構成にすると、サービスを利用できないのは、2台で同時に障害が起きているときです。 そのような確率は (1-0.99) ^ 2 のため、可用性は 1 - (1-0.99) ^ 2 から 99.99% となります。

同様にして、3台構成の可用性は 1 - (1-0.99) ^ 3 から 99.9999% となります。

AWS インフラに置き換えると、システムをマルチAZ・マルチリージョンにデプロイして冗長構成にすることで、可用性は向上します。

マルチリージョン化

マルチリージョン対応を行うと、リージョンレベルの障害に対しても耐障害性が向上します。

グローバルに展開するサービスでは、ユーザーが最寄りのリージョンにアクセスできるようになり、レイテンシーが低下します。

運用コスト

いいことばかりではありません。

可用性向上のトレードオフとして、システムは複雑さを増し、サーバー台数は増え、費用も運用負荷も増えます。

データストア

マルチリージョンアーキテクチャにはどのデータストアを用いればよいでしょうか?

DynamoDB Global Tables を利用すると、各リージョンにマスター DB インスタンスを配置でき、アプリケーションは同じリージョン内のデータストアに読み書きすればよくなります。

一方で、リージョン間のデータレプリケーションには数秒のラグが発生する 結果整合性 モデルを採用しているので、注意が必要です。

ルーティング

マルチリージョンなアプリケーションを各リージョンにルーティングするには

  • Global Accelerator
  • Route 53

といったサービスを利用します。

Global Accelerator を利用すると、エッジ - AWS エンドポイント間は AWS のグローバルネットワークを介し、適切なリージョンにルーティングされ、インターネットのレイテンシーとジッターを低減します

Route 53 を利用すると

  • レイテンシー
  • 位置情報

といったルーティングポリシーを元に、適切なリージョンにルーティングされます。

トラフィックのパフォーマンスが重要な場合は Global Accelerator が向いているかもしれません。

一方で、GDPR 対応のためにクライアント・サーバーの場所を意識したサービスを提供したいなど、パフォーマンス以外の様々なルールでルーティングしたい場合、ポリシーの選択肢が多い Route 53 のほうが向いているかもしれません。

最後に

発表者の AWS ソリューション・アーキテクトはカジュアルにマルチリージョン & アクティヴ・アクティヴなインフラのお手軽さ・素晴らしさを語っていましたが、一般人にはまだまだ敷居の高いアーキテクチャーです。

とはいえ、近年の AWS では

  • AWS Global Accelerator
  • Amazon DynamoDB Global Tables
  • Amazon Aurora Global Database

といったマルチリージョンアーキテクチャーに適用可能なサービスが立て続けにリリースされているため、従来よりは敷居が下がっていることは確かかと思います。

リスクを取れる範囲で、ピンポイントでもいいからこれらの技術を投入できるよう、技術評価は続けたいと思います。

参考