Webサービスの開発会社様から、新しく提供する会員制のリアルタイムWebサービスをAWS上で動かしたいとご相談をいただきました。

このサービスには、ルーム・チャット・ランキングなど、利用者の画面がリアルタイムに更新される機能があります。こうした機能は、多くの利用者が同時にサーバーとつながり続ける「常時接続(WebSocket)」で実現しており、一般的なWebサイトとは違うインフラ設計が必要です。

開発会社様がアプリケーション開発に集中できるよう、レムシステムはAWS環境の方式検討・設計・構築・負荷試験・運用設計を担当しました。

導入の背景と課題

  • 常時接続の負荷が読みにくい:多くの利用者が同時に接続し続けるため、どの程度のサーバーが必要かを事前に見極める必要がありました
  • Webの処理と常時接続を両立させたい:同じサーバーで両方を動かすと、接続が増えたときにWebの表示が遅くなったり、更新作業のたびに接続が切れたりするおそれがありました
  • 既存環境からの移行:開発済みのアプリケーションを、動作を変えずにAWSへ載せ替える必要がありました
  • 運用の手間を増やしたくない:監視・バックアップ・定期処理を、日々の手作業に頼らず回せる仕組みが求められていました

ご提案内容

WebSocketの実現方法として3つの方式(サーバーレス型、Webサーバー同居型、WebSocket専用サーバー型)を比較し、WebSocketを専用のサーバーに分離する方式をご提案しました。開発会社様が使い慣れた技術のまま開発でき、Webの処理と常時接続がお互いに影響しないことが決め手です。

項目構成
入口ロードバランサーで受け、通常のWeb画面とWebSocketを別々のサーバーへ振り分け
サーバーWebサーバー・WebSocketサーバーとも、2つのデータセンター(アベイラビリティゾーン)に分散配置
データベースAmazon Aurora(MySQL互換)。外部から直接つながらない領域に配置
セッション・配信同期ElastiCache(Valkey)。複数のWebSocketサーバー間でメッセージを共有
画像・動画S3とCloudFront(CDN)から配信し、サーバーの負荷を軽減
管理・運用サーバーへの管理接続はAWSの管理機能経由を標準とし、監視・ログ・バックアップ・定期処理をAWSのサービスで自動化

安心して運用を始めるための3つの取り組み

1. 方式を比較してから設計する

いきなり構築するのではなく、WebSocketの3方式について、開発のしやすさ、Webの処理への影響、更新作業時の切断、運用の手間、拡張性を比較表にまとめてご判断いただきました。まずは必要最小限の評価環境から始め、本番を見据えた構成に広げる進め方としています。

2. 本番前に5,000人規模の負荷試験を行う

運用開始の前に、5,000人規模の同時接続を想定した負荷試験を実施しました。その結果、WebSocketサーバーのメモリとCPUに余裕が足りないことが分かったため、サーバーの性能を引き上げ、台数を2台から4台に増やして運用を開始しています。数字で確かめてから本番を迎えられたことが、今回いちばんの成果です。

3. 運用の手間を減らす仕組みを最初から入れる

  • 監視:サーバーやデータベースの異常を検知すると、お客様と当社の両方にメールで通知
  • バックアップ:毎日自動で取得し、障害時はそのまま起動できる形式で保管
  • 定期処理:特定のサーバーに依存しない仕組みで実行し、サーバーを入れ替えても設定変更が不要

導入効果

項目導入後の状態
同時接続への備え負荷試験の結果をもとに増強した構成で運用を開始
可用性サーバーを2つのデータセンターに分散し、サーバーが1台止まってもサービスを継続できる構成
拡張性利用者が増えた場合は、WebSocketサーバーの台数を増やすだけで対応可能
運用監視・通知・バックアップ・定期処理をAWSのサービスで自動化
開発との分担インフラを当社が担当し、開発会社様はアプリケーション開発に集中

まとめ

チャットやランキングなど、リアルタイムに動くWebサービスは、作ってみるまで負荷が読みにくいものです。レムシステムでは、方式の比較検討から負荷試験、運用設計までを一貫して担当し、数字で確かめた構成で本番を迎えるお手伝いをしています。開発会社様のインフラパートナーとしても、お気軽にご相談ください。

ご相談・お見積り(無料)

AWSへの移行・新規構築、WebSocketを使ったサービスの基盤設計、負荷試験、運用設計まで、お気軽にご相談ください。サービスの概要や想定利用者数がわかる資料があれば、より具体的なご提案が可能です。

全国対応/お見積り無料。遠隔ヒアリング・現地対応の両方に対応しています。