こんにちは、クラウドチームに出張中の Junya です。 今日は、クラウド費用のコスト削減を試みたけど失敗した話について、ご紹介します。
ことのはじまり
クラウドチームでは定期的に GCP の Billing ダッシュボードを見て、コストのボトルネックを確認しているのですが、イベントデータを処理する pubsub コストが高いことに気づきました。
出来る限りイベントを取りこぼさないよう、イベントデータは一度 pubsub に入れてからワーカー経由でデータベースに保存しているのですが、イベントは量も数も多いため、pubsub のコストがかさんでいました。
Pub/Sub の料金 によると、Pub/Sub の費用は以下の3つの要素で決まります。
- メッセージのパブリッシュと配信のスループット費用
- Google Cloud のゾーンまたはリージョンの境界を越えるスループットに関連するデータ転送費用
- スナップショット、トピックで保持されるメッセージ、サブスクリプションで保持される確認応答済みメッセージのストレージ費用
今回の場合、1番目のスループット費用がボトルネックでした。はじめの 10 GiB は無料で、TiB あたり $40 かかります。我々の場合、イベントデータのスループットは数十TiB/月あるので、Pub/Sub だけで月に数千ドルかかる計算です。
Pub/Sub コスト削減対策
スループットはデータサイズに依存するので、Pub/Sub に生データを直接流す代わりに、Cloud Storage にデータを保存してから、その場所だけを Pub/Sub に流せばコストを削減できるのではと考えました。
Pub/Sub のコストと Cloud Storage のコストを比較すると、以下のとおりです。
- Pub/Sub
- $40 / TiB / 月
- 数千ドル / 数十 TiB / 月
- Cloud Storage
- $0.023 / GB / 月 (保存期間に比例)
- 数十ドル!? / 月
Cloud Storage へのデータの保存時間は非常に短いので、Pub/Sub に流していたイベントデータを一時的に Cloud Storage に保存することで、コストは数十分の一になることが期待できます。
実際、同じような方法でコスト削減を達成した事例がほかでも紹介されていました。
対策結果
思惑通り、Pub/Sub コストは 95% 削減されました。
Storage コストの増分も、わからない程度です。
しかし、Cloud Storage のオペレーションコストがヤバイほど爆上がりしていました
全てを合わせると、このようになります。
濃いオレンジの部分が Pub/Sub 費用で、それ以外が Cloud Storage の費用です。 思惑通りに Pub/Sub 費用は削減できたものの、それ以上に Cloud Storage の費用がかさみ、全体として 1,200% のコスト増となりました。
大失敗です。システム構成はすぐにリバートしました。
なぜ Cloud Storage の費用が爆上がりしたのか?
実は、Cloud Storage ではストレージ費用の他にオペレーション費用が発生します。
クラスAオペレーションにあたる「データ書き込み」の場合、
- $0.005 / 1,000 回
ですが、この数字を甘く見ていました。
イベントデータの数は1日に数億件あるため、
- $0.005 / 1,000 回
- $5 / 100万回
- $500 / 1億回
1日に数億件のデータを読み書きすると、1日に数千ドルのコストがかかります。 オペレーション費用は、まったく無視できる単価ではありませんでした。
まとめ
ちょっとした工夫でクラウドのコストを大幅に削減できると期待したのですが、今回は思い通りにいきませんでした。 課金額を監視していたので短時間でリバートできましたが、見積計算は慎重にすべきだったと反省しています。 Cloud Storage のオペレーション費用にはお気をつけください。
LOVOT のようなロボット開発というと、ハードウェアを扱っているイメージが強いですが、実際には、EC・データ分析・生産管理・業務システムなど、ロボット開発そのものではない開発も多岐にわたります。 GCP, Kubernetes, Go, TypeScript, Teraform などを用いたクラウド開発の分野でも人を募集しているので、ご興味のある方はぜひお声がけ頂けると幸いです。