私はウェブサイトを運営しており、リアルタイムの訪問者は 500 人まで、毎日の訪問者は 5 万人まで、総ユーザー数は 130 万人までです。サーバーをAWSでホストしています。そこでは、さまざまな種類のインスタンスをいくつか使用しています。私がウェブサイトを開始したとき、さまざまなインスタンスの費用はほぼ同じでした。Web サイトがユーザーを獲得し始めたとき、RDS インスタンス (MySQL DB) の CPU が絶え間なく天井にぶつかり続け、何度かアップグレードする必要がありましたが、今ではパフォーマンスと月額コスト (約 95% の(2,8k$/月))。現在、16vCPU と 64GiB の RAM を備えたデータベース サーバーを使用しています。また、マルチ AZ 配置を使用して障害から保護しています。データベースがそれほど高価なのは普通のことなのか、それとも私が何かひどく間違ったことをしたのだろうか?
データベース情報
現時点では、私のデータベースには 40 個のテーブルがあり、そのほとんどが 10 万行、一部は 200 万行、1 つは 3,000 万行です。不要になった 21 日より古い行をアーカイブするシステムがあります。
ウェブサイト情報
ウェブサイトは主に PHP を使用していますが、一部の NodeJS と Python も使用しています。
Web サイトのほとんどの機能は次のように機能します。
- 取引開始
- 行を挿入
- 最後に挿入された ID を取得する (lastrowid)
- いくつかの計算を行います
- 挿入された行を更新しました
- ユーザーを更新する
- トランザクションをコミットする
また、データベースから 10 ~ 30 秒間隔でポーリングする約 100 個のボットを実行しています。また、データベースを挿入/更新することもあります。
追加
データベースの負荷を下げるために、いくつかのことを行いました。データベース キャッシュを有効にする、一部のクエリに redis キャッシュを使用する、非常に遅いクエリを削除しようとする、ストレージ タイプを「Provisioned IOPS SSD」にアップグレードしようとするなど。しかし、何も役に立たないようです。
これは、設定パラメーターに対して行った変更です。
いくつかの小さなインスタンスの MySQL クラスターを作成することについて考えましたが、これが役立つかどうかはわかりません。また、これがトランザクションでうまく機能するかどうかもわかりません。
さらに情報が必要な場合は、お問い合わせください。この問題に関するヘルプは大歓迎です。