はじめに
ここでは、Couchbase Mobileを構成するSync Gatewayをデプロイする際のロードバランサーとの関係について解説します。
なお、Couchbase Mobileについては、Couchbase Mobileアプリケーション開発へのロードマップに記事をまとめている他、(これらの記事を元に構成した)以下の電子書籍を無償で頒布しています。
また、Couchbase Mobileは、Couchbase LiteとCouchbase Serverとのデータ同期機能を提供します。Couchbase Serverの存在意義、機能詳細、利用方法等については、拙著NoSQLドキュメント指向データベースCouchbase Serverファーストステップガイド(インプレスR&D刊)や、NoSQL/JSONデータベースCouchbase Server理解・活用へのロードマップにまとめてある記事をご参考ください。
ロードバランサーとの連携
Couchbase Serverは、他のNoSQLデータベースと同様、分散環境としてそれ自体冗長性を備えています。一方、Sync Gatewayについては、外部的に冗長性を担保する必要性があります。冗長性のみではなく、水平方向のスケーリングという面でも同様です。Couchbase Serverでは、クライアントは、クラスターとの接続時にクラスターマップというクラスターの構成情報を受け取り、以降の接続では、対象となるノードに直接アクセスするため、ロードバランシングが介入する必要はありません。Sync Gatewayでは、複数ノードでクラスター構成を取る場合には、クライアントからのアクセスを仲介するロードバランサーを用いることになります。
あるいは、冗長性や水平方向スケーリングを置いたとしても、インターネット上のCouchbase Liteアプリケーションとの接続のためにリバースプロキシを用いるのは、通常クライアントがアプリケーションサーバーであるCouchbase Serverの場合とは違った意味があります。
これらを以下のように整理できます。
- クライアントからのリクエスト(からの負荷)を、複数のSync Gatewayインスタンスに分散する。
- Sync Gatewayサーバーの存在を外部から隠す。これによって、サービスがインターネットに公開されているときにSync Gatewayインスタンスを保護する。
- アプリケーションファイアウォール機能によって、Sync Gatewayを一般的なWebベースの攻撃から保護する。
- Sync GatewayからSSLターミネーションをオフロードする。これによる、多数のモバイルデバイスをサポートする場合のオーバーヘッドを分散する。
- 各着信要求のURLを書き換える。例えば、ポート80を、標準のSync GatewayのパブリックREST APIポート4984にマップする。
ここでは、Sync Gatewayでロードバランサーを使用する際の考慮点や参照可能な情報について紹介します。
WebSocket接続における考慮点
WebSocket接続を開いたままにするために、Couchbase Lite(レプリケーター)は300秒(5分)ごとにWebSocket PINGメッセージ(ハートビート)を送信します。このハートビートは、Couchbase LiteとSync Gateway間の接続を維持するために必要です。
ハートビートを成立させるためには、介在するロードバランサーのキープアライブタイムアウト間隔がハートビート間隔より長い必要があります。そのため、必要に応じてロードバランサーのWebSocketプロキシ設定します。または、Couchbase Liteのハートビート間隔を変更することもできます。
AWS Elastic Load Balancer(ELB)との連携
Sync GatewayとCouchbase Liteは、変更フィードに対して長時間実行される接続を持つ可能性があるため、ELBのアイドルタイムアウト設定を最大値の3600秒(1時間)に設定します。
この設定を変更する方法の詳細については、以下を参照することができます。
NGINXとの連携
以下のCouchbase公式ドキュメントでは、NGINXを、Sync Gatewayのために利用する方法が解説されています。
トランスポート層セキュリティ(HTTPS、SSL)
本番環境でクライアントとSync Gateway間の接続を保護するには、トランスポート層セキュリティ(TLS、HTTPSまたはSSLとも呼ばれます)を使用する必要があります。
これにより、盗聴者に対して、データ(パスワードやログイントークンを含む)が暗号化されるだけでなく、 Man-In-The-Middle攻撃に対する防御になります。
NGINXとSync Gatewayの間の接続にX.509証明書を用いたTLSを有効化する方法についても、上述のドキュメントで解説されています。
関連情報