-
Notifications
You must be signed in to change notification settings - Fork 0
CostConsiderationsOnHeroku
1アカウントインスタンス https://mastodon.zunda.ninja/ のHerokuでの運用経験から、どのような費用がかかるかまとめてみました。 合計$16.05/月程度となりました。全文検索する場合には、さらに$9/月程度かかりそうです。
2017年6月1日の執筆現在、このインスタンスは
- 1アカウントが登録していて、
- 115アカウントをフォローし、
- 198アカウントからフォローされ、
- 1057ステータスの投稿があり、
- 457インスタンスと接続されていて、
います。
Mastodonはweb (Puma)、worker (Sidekiq)それぞれ1 dynoを割り当てるようにコードが書かれています。Herokuでは、CPU負荷よりもメモリが主な制限になっているようです。Pumaのプロセスあたりのスレッド数を5から3にすることで、PumaとSidekiqをメモリ512MBのdyno 1台に詰め込むことができました。
Web dynoは、デフォルトの2プロセス×5スレッドでは、total memoryの使用量は最大320 MB程度でした。下記のコマンドでプロセスあたりのスレッド数を3にすると、290 MB程度になりました。
heroku config:set MAX_THREADS=3
Worker dynoのメモリ使用量は230 MB程度でした。
というわけで、
heroku ps:scale web=1 worker=0
して、下記のようなProcfileで1 dynoに詰めて運用しています。
web: puma -C config/puma.rb & sidekiq & wait
release: rake db:migrate
なお、release:
の行を書いておくとデプロイのたびに実行してくれます。
有料のDynoにはSSL証明書がついてきます。ドメイン自体の費用はこの記事には含めていません。
Stream API用のDynoはタイムラインを眺めている時のみ必要なので、Free dynoでオートスケールもどきしてみます。
HobbyプランのHeroku Postgresはデータの行数に制限があります。下記のプロットは運用を始めてから1週間ちょっとの間の行数の変化です。これより、しばらくの間はHobby-basicプランでの運用を続けることができそうです。
- 無料のHobby-devプランの制限10,000行を超えたのは1週間弱のことでした
- 現在の行数の増加は1日あたり3,400行程度です。Hobby-basicプランの制限10,000,000行に達するには8年程度かかりそうです
Hobby DevプランのHeroku Redisには同時接続数が20以内という制限があります(Heroku PostgresのHobbyプランでも同様です)。Puma、Sidekiq、npmをデフォルトのプロセス・スレッド数で稼働させると若干足りないので、Sidekiqのスレッド数をデフォルトより減らしてあります。
これも含めてconfig varは下記のようにしてあります。
項目 | 設定ファイル | config var | 内容 |
---|---|---|---|
Puma worker(プロセス)数 | config/puma.rb |
WEB_CONCURRENCY |
1 |
Puma スレッド数 | config/puma.rb |
MAX_THREADS |
2 |
Pumaからのデータベース接続数 | config/database.yml |
DB_POOL |
6 |
Sidekiq スレッド数 |
Procfile でsidekiq -c ${SIDEKIQ_THREADS:-5}
|
SIDEKIQ_THREADS |
2 |
npm worker数 | streaming/index.js |
STREAMING_CLUSTER_NUM |
3 |
2017年5、9月分は下記のような使用量となりました。 無料枠がなくなったらどうなるのかな?
項目 | 5月分使用量 | 5月分料金 | 9月分使用量 | 9月分料金 |
---|---|---|---|---|
Data transfer | --- | --- | --- | --- |
AWS USE1-APN1-AWS-Out-Bytes | 0 | 0 | 0.081 GB | $0.00 |
AWS USE1-APS1-AWS-Out-Bytes | 0 | 0 | 0.000009 GB | $0.00 |
AWS USE1-CAN1-AWS-Out-Bytes | 0.000181 GB | $0.01 | 0.001 GB | $0.00 |
AWS USE1-EUC1-AWS-Out-Bytes | 0.000241 GB | $0.00 | 0.000001 GB | $0.00 |
AWS USE1-USE2-AWS-Out-Bytes | 0 | 0 | 0.000285 GB | $0.00 |
AWS USE1-USW2-AWS-Out-Bytes | 0.021 GB | $0.00 | 0.015 GB | $0.00 |
Bandwidth in per month | 0.0000003 GB | $0.00 | 0.000003 GB | $0.00 |
Bandwidth out under the montly global free tier | 1.087 GB | $0.00 | 2.341 GB | $0.00 |
S3 Requests | --- | --- | ||
$0.00/req PUT, COPY, POST, or LIST | 2,000 | $0.00 | 2,000 | $0.00 |
$0.005/req PUT, COPY, POST, or LIST | 8,832 | $0.04 | 23,354 | $0.12 |
$0.00/req GET | 11,486 | $0.00 | 20,000 | $0.00 |
$0.004/10,000 req GET | 0 | $0.00 | 53,752 | $0.02 |
$0.000/GB | 1.185 GB-Mo | $0.00 | 5GB-Mo | $0.00 |
$0.023/GB first 50TB/month | 0 | $0.00 | 3.5682 GB-Mo | $0.08 |
合計 | --- | $0.05 | --- | $0.22 |
このアプリケーションにはメールAdd-onをつけましたが、rails mastodon:confirm_email
コマンドを使えばメールの受信は不要でした。
このアプリケーションからPapertrailに送られているアプリケーションログは、これまででは最大16.4 MB/日でした。無料プランの制限は10 MB/日なので、50 MB/日のプラン($7/月)に移行するか、無料プランの制限のゆるいLogentriesに移行するか、記録するログを減らす必要があります。
2017-05-02にsample#
にマッチするログを記録しないようにしてみました。log-runtime-metrics
で得られる各種メトリクスが記録されなくなります。これで無料プランの制限内におさまるといいな。
2017-05-07。やはりPapertrailの容量制限を超えてしまうことがあるようです。Logentriesに移行しよう。
最近のMastodonではElasticsearchで全文検索が可能です。Searchbox Elasticsearchを利用すると$9/月程度で運用できそうです。
Contents in this wiki is copyright 2017 by zunda and licensed under a Creative Commons Attribution 4.0 International License.