おくみん公式ブログ

おくみん公式ブログ

マストドンぼっちインスタンス on GCP のランニングコスト #mastodon

f:id:okumin:20170419010646p:plain

mstdn.okumin.com 5月分の請求額をまとめてみました。マストドン弱小インスタンスのコスト感をお伝えします。

目次

インスタンスの特徴

mstdn.okumin.com はシングルユーザーモードで起動しています。唯一のユーザーである @okumin のフォロー数は43人、フォロワー数は120人です(2017/6/19時点)。

トゥート、ほとんどしていません。

数あるマストドンインスタンスの中でも、相当にインアクティブであると思われます。

インフラ構成

フル GCP です。先に『今流行りの #mastodon on Google Container Engine - おくみん公式ブログ』を読んでおくとよいかもです。

ランニングコスト

mstdn.okumin.com が利用している各サービスの請求額を紹介します。

5月分なので31日、744時間分の料金です。レートは請求書によると1ドル111.46円です。

一部請求は相乗りしている okumin.com に対するものと不可分なので、そのへんはよしなに計算しました。

Google Container Engine

Google Container Engine(GKE) はマネージド Kubernetes サービスです。mstdn.okumin.com では、本体の Rails やストリーミング API 用の Node.js、sidekiq、Redis を GKE 上で起動しています。

料金は5ノードまで無料、6ノード以上は定額で課金される、という体系です。クラスタ内のノードは通常の GCE インスタンスとして立ち上がり、それは GKE 料金とは別に課金されます。
Google Container Engine の料金と割り当て

okumin.com 用に1ノード、mstdn.okumin.com 用に1ノードの合計2ノードしか起動していないので、無料で利用できています。

Google Compute Engine

Google Compute Engine は AWS EC2 のような IaaS サービスです。前述の通り、GKE クラスタのノードとして GCE を使用しています。

マシンタイプやディスクのサイズ、ネットワーク使用量に応じて課金されます。
Google Compute Engine の料金

内容 料金 備考
インスタンス料金(g1-small) ¥1,834 継続利用価格
永続ディスク(14GB) ¥83
ネットワーク使用料金 ¥12

ほとんどアクセスがないので f1-micro で運用したいところですが、Ruby や Node.js プロセスが結構なリソースを消費して安定しなかったので諦めました。

Google Cloud Load Balancing

Google Cloud Load Balancing はロードバランサーサービスです。 mstdn.okumin.com では負荷分散のためというより、HTTP リクエストの振り分けができて GKE と連携可能なエンドポイントとして Cloud Load Balancing を利用しています。

通常の HTTP リクエストから WebSocket まで HTTP(S)負荷分散1つで処理することができます。
※ 2017年6月19日時点では日本語ドキュメントに「HTTP(S)負荷分散は WebSocket をサポートしません」と書かれていますが、実際はサポートされています。英語ドキュメントの WebSocket proxy support をご覧ください。

料金体系は若干特殊で、最初の5ルールまでは定額、6つ目以降はルールごとに課金されます。また LB が処理するデータ量に応じた課金もあります。「ルール」が何を指しているのかはよくわかっていません……

負荷分散の追加 ページには全リージョン均一料金であるかのように記載されていますが、Google Compute Engine の料金 を見るとリージョンごとに料金が異なるかのように書かれています。請求書を見る限り前者が正しく、Cloud Load Balancing にリージョンごとの料金差異はないようです。グローバルなリソースなので、リージョンという概念はない気がします。

mstdn.okumin.com に対する請求は次の通りです。

内容 料金 備考
5ルールまでの定額料金 ¥2,073 okumin.com や hubot などと相乗り
6ルール目以降の追加料金 ¥0
データ処理 ¥0 多分端数切り捨て

結構高いですが、okumin.com 用に使っていた LB に相乗りさせて、定額料金に収まっているので実質無料です。

Google Cloud SQL

Google Cloud SQL は RDBMS を提供するサービスです。マストドンの DB は PostgreSQL なので、ベータ版の Google Cloud SQL for PostgreSQL を使用しています。

マシンスペックやストレージ使用量に応じて課金されます。
PostgreSQL の料金

内容 料金 備考
インスタンス(f1-micro) ¥1,161 継続利用価格
ストレージ(SSD 10GB) ¥246
バックアップ(0.132GB) ¥2

Cloud SQL with SSD は性能が良いので、小規模インスタンスであれば最小の db-f1-micro で十分だと思われます。

Google Cloud Storage

Google Cloud Storage はオブジェクトストレージサービスです。S3 互換 API を持っているので、アイコンや投稿画像の保存先に使うことができます。
マストドンのバックエンドに Google Cloud Storage を使う方法 #mastodon - Qiita

サービスレベルと容量、ネットワークトラフィックに応じて課金されます。
Google Cloud Storage の料金体系

内容 料金
Regional ストレージ(0.203) ¥1

ネットワーク下り料金は請求書に記載されていませんでした。0円だったんだと思いますが、ひょっとすると GCE のネットワーク料金に含まれているのかもしれません。

ランニングコストまとめ

mstdn.okumin.com 5月分ランニングコストのまとめです。

サービス 月額 備考
Google Container Engine 無料
Google Compute Engine ¥1,929
Google Cloud Load Balancing ¥2,073 他のプロダクトで使っていたものに相乗りさせたため実質無料
Google Cloud SQL ¥1,409
Google Cloud Storage ¥1
合計 ¥5412 実質¥3339

絵師なんかをフォローしてると GCS の費用がそれなりに大きくなるらしいですが、トラフィックが少ないぼっちインスタンスの場合、通常は LB や GCE インスタンス、Cloud SQL インスタンスといった固定費用が占めるウェイトが大きくなりそうです。より安くしたいなら、LB(エンドポイント)や PostgreSQL を GCE に相乗りさせるとよいと思います。

ワークロード的には f1-micro で十分処理できる程度の負荷しかないはずなので、誰かに C++ でメモリフットプリントの小さな実装を公開してほしいところです。もしこの問題を設定か何かで解決する方法があるなら教えてください。

関連リンク

Amazon Aurora のアーキテクチャまとめ

先日公開された『Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases』を読みました。
興味深かった部分や疑問に思った(あんまりわかってない)部分をまとめておきます。

AWS は詳しくないので、ところどころ間違っているかもしれません。

続きを読む

Failurewall 0.1.1 をリリースしました #scala

f:id:okumin:20170320170958p:plain

scala.concurrent.Future を安全便利に扱うためのライブラリ、Failurewall の新バージョンをリリースしました。 テストコードやビルド設定のリファクタリングを除くと、変更は以下の二点です。

続きを読む