japankun / bbs.jpnkn.com

BBS.JPNKN.COMのリポジトリ
https://bbs.jpnkn.com/
6 stars 0 forks source link

今後の対策と拡大について考えるスレ #17

Open japankun opened 5 years ago

japankun commented 5 years ago

掲示板のプロジェクト名J.D.S.の正式名称は「John Doe System」すなわち名無しのシステムである。 J.D.S.はAmazon Lightsailの以下のインスタンス一つで動いている。

現在J.D.S.は一日40万アクセスを超えてもLoadAverageがほぼ0.5以下であり かなり安定した状態で動作している。

Nginx+Apacheでシステムを組んでいるのでC10K問題はおそらく問題ないはずだが 通常約3%のCPUを使用しているため、AWS側でスケールアップを視野に入れる 使用率5%に近づいていくに違いない。

外部化できるものとしては、WebSocket+MQTTの連携が真っ先に思い浮かぶ。 これらはCPU使用率の約2%を使用しているがbbs.cgiが受け取ったレスをNode-REDで作ったAPIを叩きMQTTに直し再送という係を担っている。

なお、そのままのMQTTはJavaScriptが受け取ることができないのでmqttws31.jsを使用し WebSocketを経由してMQTTの内容がクライアントに最終的に届くという仕組みである。

これらをmosquitto専用サーバーが1つあれば負荷はかなり減る。

japankun commented 4 years ago

プランの変更によりサーバーが増強された。

このプランはt2.small相当であり、CPUの20%までが常時利用できる。 20%以上の処理能力を必要とする場合はバースト機能が働き、バーストクレジットが消費される。 t2.nano相当からt2.small相当へ移ったことで、受取・蓄積可能なクレジット数も大幅に増えた。

インスタンスタイプ 1 時間あたりに受け取る CPU クレジット 蓄積可能な最大獲得クレジット* vCPU vCPU 別のベースラインパフォーマンス
t2.nano 3 72 1 5%
t2.small 12 288 1 20%

バースト可能パフォーマンスインスタンスの CPU クレジットおよびベースラインパフォーマンス https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html

japankun commented 4 years ago

各サービスに保存したデータの取得時間を比較した。

サービス 取得時間(秒)
Local FS ≒ SSD 0.000040
Amazon S3 0.108505
Google Cloud Storage 0.284547
Memcached (w/docker) 0.000145

Memcachedを使うとなるとデータ永続化のためにまた仕組みを作らないといけない。 でもフロントからデータを切り離すことができて、フロントを増やして負荷を分散することはできる。

japankun commented 4 years ago

現在の構成

メインサーバー

APIサーバー

japankun commented 4 years ago

近況のCPU使用率 2020-05-13 21_05_27

japankun commented 4 years ago

現在の構成

メインサーバー

APIサーバー

japankun commented 4 years ago

現在の利用サーバーはこんな感じで1台バックアップ 2020-05-20 01_09_38

前使っていたサーバーはスナップショットをローカルへ転送をした。 作業内容は後ほどどこかに書くと思う

japankun commented 4 years ago

スナップショットの転送方法を書いた。

Lightsailスナップショットを取り出す方法 https://github.com/japankun/bbs.jpnkn.com/wiki/Lightsail%E3%82%B9%E3%83%8A%E3%83%83%E3%83%97%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%82%92%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95

japankun commented 4 years ago

インスタンスの自動スナップショットを取るようにした。