KARTEでは大きく分けて以下の二種類のサーバが存在します。
- ユーザからのHTTPリクエストを処理するWebサーバ
- メッセージキューにたまったユーザデータをリアルタイムに解析するサーバ
これらはマルチクラウドで稼働できるようにIaaSであるGCEで構築されていて、それぞれが異なるオートスケーリング構成をとっています。
本稿ではまずオートスケーリングを構成する上で考慮すべきポイントを述べ、その後にそれらのポイントをGCPで実現するための方法について説明します。最後に先ほど説明した二種類のサーバのオートスケーリング構成について紹介します。
オートスケーリングの5つのポイント
一般的に、オートスケーリングは以下のポイントが求められます。
- コンピュータリソースが必要になった時に、適切な量をできるだけ早く確実に起動する。
- コンピュータリソースが不要になった時に、適切な量をシステムに悪影響を与えず停止する。
この実現のためには以下の5つのポイントが重要になります。
ポイント1 サーバのステートレス化
オートスケーリング環境では、インスタンスが不要になった際にはインスタンスは停止されます。したがって、サーバにステートを持たせてしまうとインスタンス停止時にそのステートが失われてしまうことになり、サーバのステートレス化は必要不可欠です。
既にステートレスなサーバであれば何もする必要はありませんが、ステートフルなサーバである場合は以下のような対応が必要になります。
- セッション情報などは外部のDBに持たせる
- ログ情報は定期的に外部のストレージ等に保存
ポイント2 コンピュータリソース不足の回避
オートスケーリングは需要に応じて動的にコンピュータリソースを起動/停止する仕組みでしかないので、そもそもの利用可能なコンピュータリソースが枯渇してしまっていてはオートスケーリングすることはできません。
クラウドサービスを利用するのであればある程度まではリソースは確保されていますが、無限にリソースが利用できるわけではありません。
オートスケーリング構成を取る場合は最大でどれぐらいコンピュータリソースが必要かを見積もり、その台数が起動できるように確保しておくことも大切です。
ポイント3 適切なスケーリングポリシーの設定
オートスケーリングの恩恵を最大限受けるためには、どのタイミングで何台起動/停止するかというスケーリングポリシーの設定が重要になります。
その理由としては、例えば、コンピュータリソースが余っている時に以下のような余計なコストがかかってしまうことと、
- 追加でインスタンスを起動してしまう
- 不要なインスタンスを停止できない
さらに、コンピュータリソースが足りない時に
- インスタンスが起動できない
- インスタンスを停止してしまう
という事態が起こり、大規模解析サービスのパフォーマンスが悪化してしまうからです。
ポイント4 起動時間の短縮
インスタンスの追加起動が必要になる時はどのような時でしょうか? 多くのケースにおいて、コンピュータリソースが不足して性能が低下しているいる状態であると考えられます。
例えば、解析サーバにおいてコンピュータリソースの起動とアプリケーションの起動までに30分かかってしまうと、解析のパフォーマンスが30分間悪化することが想像できます。
このような状況を防ぐためには起動時間の短縮について考えることが重要です。
ポイント5 安全な停止
インスタンスが不要になった場合、ただちにインスタンスを停止するのはリスクがあります。
アプリケーションが何かしらの処理途中でインスタンスが停止してしまうと、その処理が異常な状態になってしまう可能性があるからです。
そのような状態にならないために、安全な停止を行う必要があります。