マルチクラウドで大規模解析サービスを構成する
ここまでで、GCPを活用した大規模解析サービスの構成についてはご理解いただけたと思います。GCPだけでも大規模解析サービスを提供することができますが、ここからはさらなる発展形としてGCP以外のクラウドサービスも利用するマルチクラウド構成についてお話したいと思います。
KARTEでは以下のようなモチベーションでGCPとAWSをマルチクラウドで利用しています。
アベイラビリティのさらなる向上
フルマネージドなクラウドサービスを使ったり、GCEインスタンスを複数並べたりするなどクラウドサービス内で冗長構成を取ることでアベイラビリティを高めることができますが、そのクラウドサービス自体で障害が発生することもあります。
GCPでもLoad Balancerがリクエストをサーバにフォワードできず、502のレスポンスを返すという障害が起きたことがありますが、このようなケースでは監視によって問題を検知したところで、障害がいち早く復旧するよう、祈る他ありません。
クラウドサービスの障害が起きて、大規模解析サービスに不具合が生じることは、サイト管理者から見ると、大規模解析サービスを提供している側の問題でしかないので、そのリスクをしっかりと考えることが大切です。
マルチクラウドな構成にしておくことで、あるクラウドサービスで障害が起きたとしても影響を抑えることができます。
まずはGCEインスタンスに上に構築したMongoDBを、AWS上のAmazon Elastic Compute Cloud(EC2)にレプリケーションを取るという例で考えてみます。
この構成を取るためには、GCEとEC2が相互にセキュアに通信できることが必要となります。
方法としては色々と考えられますが、GCP、AWSどちらもサポートしているIPSec VPNを使うこととします。
VPNであればプライベートネットワークを拡張する形となるので、比較的簡単に相互に通信できる環境を作成することができます。
相互通信できるようになれば、あとはMongoDBの機能を使ってReplicationを行えばMongoDBにおけるマルチクラウド環境の完成です。
MongoDBが稼働するGCEインスタンスが障害を起こしたとしても、EC2側を参照するようにすれば、GCEインスタンスの障害に影響に引きずられることなく大規模解析サービスを提供し続けることが可能になります。
また、trackコンポーネントにおいてもAWSのElastic Load Balancing(ELB)+EC2+Autosaclingを用いることでマルチクラウド構成が実現可能です。MongoDBでの例と同じようにIPSec VPNでGCEとAWSとの接続が前提となりますが、GCEのtrackコンポーネントで障害が起きた際には、DNSなどでユーザからのリクエストをAWSのtrackコンポーネントに振り分けることで、大規模サービスの継続的な提供が可能になります。
このように、どのクラウドプラットフォームベンダーも似たようなクラウドサービスを提供していることが多いので、コンポーネントのさまざまな箇所でマルチクラウド構成をとり、アベイラビリティをさらに高めることができます。
適材適所なサービス利用
さまざまなクラウドプラットフォームベンダーが、さまざまな特色のクラウドサービスを提供していますが、それぞれのサービスには得意、不得意な部分があります。マルチクラウドという視点を持ち、適材適所でそれぞれのクラウドサービスを使うことで、さらなるパフォーマンスの向上や開発/運用の効率化が期待できます。
KARTEにおいてはリアルタイムな解析用DBはBigtableを選択し、Bigtableと多く通信するアプリケーションをGCEで稼働させたことで、パフォーマンスが大きく改善し、コストについても大きく削減されました。もちろんEC2からもBigtableを利用することは可能ですが、その際はインターネットを介しての通信となってしまいます。これは通信コストの追加課金、Latencyの悪化などが発生してしまうリスクがあるのでGCEからの利用をおすすめします。
また、trackerコンポーネントはAWSのCloudFront+Amazon Simple Storage Service(S3)で実現し、こちらをメインで利用しています。多くのユーザでの実績があるとともに、AWS Lambdaなどを用いて運用の自動化などが簡単で柔軟に行えるためです。

まとめ
以上、大規模解析サービスのシステム構成の全体像についてお話しました。
GCEで構成されたtrack、admin、analyzeコンポーネントについては、Autoscalingの構成を取ることで、trackerコンポーネントでは、Cloud CDNを活用することでスケーラビリティとアベイラビリティを確保することが可能です。
dbコンポーネントでは適材適所にDBを選択することが重要で、Bigtableなどのフルマネージドなサービスを活用することでスケーラビリティとアベイラビリティを確保しつつ、さまざまな構造のデータに対して高いパフォーマンス出すことができます。
障害などの予期できない問題に対して迅速に対応するためには、Stackdriverのような監視サービスを利用することが重要です。
また、マルチクラウド構成を取ることで、さらなるアベイラビリティの向上と共に、適材適所なサービス利用によりパフォーマンスの向上や開発/運用の効率化も期待できます。
次回以降は今回説明した構成の中で重要なポイントについて、より詳細に説明していきます。
