はじめに
ニフティでWEBサービスの開発・運用を担当している渡邊です。
2024年9月に@nifty天気予報のフルリニューアルを行いました。
このプロジェクトでは従来のインフラ構成を刷新し、サーバレスアーキテクチャを採用しました。
従来のWEB三層構造からサーバレス構成への移行によるコストの比較と、効果について紹介していきます。
旧環境の構成と問題点
構成
WEBサーバ、アプリケーションサーバ、DBサーバからなるWEB三層構造のアーキテクチャを、EC2とRDSを使って構築していました。
問題点
この構成には以下のような問題点がありました。
- 固定費用が高く、トラフィックが少ない時期でも一定のコストが発生
- サーバーの保守・運用に多くの工数が必要
サーバレスの採用
従来の問題点を解決するため、トラフィックに応じた柔軟なスケーリングと、運用負荷の大幅な削減が見込める、サーバレスアーキテクチャの採用を決めました。
また、データ構造の変更にも柔軟に対応できる構成も目指しました。
採用したサービス
AWSをクラウドに採用しているので、AWSが提供するサーバレスサービスを活用しました。
WEB
- Amazon ECS(Fargate)
API
- AWS AppSync(GraphQL)
バッチ処理
- Amazon S3
- AWS Lambda
- AWS Step Functions
DB
- Amazon Aurora Serverless v2(PostgreSQL)
効果
約4ヶ月運用してみての効果を見ていきます。
インフラコスト
サービス | 旧環境 | 新環境 | 削減率 |
---|---|---|---|
WEB | 100USD | 10USD | 90% |
アプリケーション | 400USD | 110USD | 72.5% |
DB | 1,200USD | 230USD | 80.8% |
その他 | 400USD | 300USD | |
合計 | 2,100USD | 740USD | 64.8% |
旧環境はバッチ処理が複雑だったため、要求スペックが高い状況での運用を行っていました。
加えて、WEBサーバをECSにしたことで負荷に応じてスケールするようになったため、常時起動のときと比較すると削減率が非常に高くなりました。
アプリケーション(API)に関しては、AppSyncがフルマネージドサービスということもありますが、redisが標準で搭載されているため、キャッシュによるコスト最適化が大きな要因だと考えています。
加えて、バッチ処理もデータが更新されたタイミングのみしか起動しないため、削減効果が大きかったようです。
DBに関しては、AppSyncを使う以上、Aurora Serverless v2しか選択肢がなかったのですが、こちらもECSと同様に負荷に応じてスケールするため削減率が大きかったようです。
これは思わぬ副産物でした。
実装コスト
サーバレスを採用したことでインフラコストだけでなく、実装コストも削減できました。
フロントエンドとバッチの実装では、コンテナを基盤として実装し、GitHub から ECR を経由してデプロイ先へという構成を構築することで、デプロイプロセスを簡略化できました。
アプリケーションサーバにAppSyncを採用したことで、GraphQLを実行するサーバが不要になり、スキーマとリゾルバのみの実装でAPIを構築することができました。
リリース以降、データ更新の遅延などの問題も特には発生しておらず、システムは安定稼働し続けています。
注意点
今回のリニューアルではサーバレス化により大幅なコスト削減を実現できましたが、これが全てのサービスに適しているわけではありません。
一般的にサーバレスはトラフィックが予測可能で、変動が大きいサービスに特に効果的と言われています。
一方で、常時高負荷が発生するサービスや、レイテンシーを重視するようなサービスでは従来型のサーバ構成の方が適している場合もあります。
また、サーバレスサービスはベンダーロックインが発生しやすく、細かな調整が制限されるので、サービス要件を満たしているかは十分に検討する必要があります。
最後に
今回はWEB三層構造で作られていた従来の構成から完全なサーバレス構成にインフラを切り替えた効果について書いてきました。
サーバレス化によって大幅なインフラコスト削減を実現できました。
当初予測していた以上の削減効果が得られたのは大きかったです。
今回のように全てをサーバレスにするのではなく、部分的にサーバレスを活用するだけでもインフラコスト削減は可能ですのでぜひ検討してみてください。
今回のプロジェクトの詳細については、以前行ったNIFTY Teck Talkにて話していますのでこちらをご確認ください。