昨日、プラットフォーム プレビューで Neki をリリースしました。リリースを記念して、Neki で 1 秒あたり 100 万リクエストの実行をテストしたいと考えました。私たちは5本のシュートでその目標をかなり早く達成し、どこまでそれを押し進めることができるかを確認することにしました。
この次の実行では、最終的に 512 チャンク、1 秒あたり 1 億 1,800 万リクエスト、1.22 PiB のデータが発生しました。
インジケーターは非常にシンプルでした。フラグメント ポイントを選択すると、クエリごとに 1 行が主キーによって取得されます。 書き込みクエリ、結合、オーバーラップはありません。 複数のチャンクにまたがる単一のリクエストがないため、各チャンクにかかるワークロードは別々になります。
私たちの目標は、シャードあたり 200k QPS を維持し、クラスターを拡張することでした。 5個、次に50個、そして512個。
| シャード | ルーター | QPSが配信されました | 作品ごとのQPS |
|---|---|---|---|
| 5 | 12 | 999,624 | 199,925 |
| 50 | 48 | 9,923,900 | 198,478 |
| 512 | 480 | 118,538,803 | 231,521 |
賄賂は10倍、納品も10倍。 それからさらに10回。 5株から50株までは1株当たりの金利が0.8%以内に抑えられます。 512 ではシャードがまだ高かったため、ロード ジェネレーターにそれを使用させ、各シャードは 200k ではなく 231k QPS に落ち着きました。
私たちはそれを修正しました 118,538,803 512 ビットおよび 1.22 PiB のデータにわたって 16 分間の QPS。 それは私たちの最大の記録でした 118,747,267。
- 512 個のピース (それぞれに Postgres プリミティブが含まれています)
r8g.16xlarge - Neki ルーター 480 台、各 1 台
8xlarge例 - p99 の遅延はルーターで 6.06 ミリ秒、クライアントで 13.95 ミリ秒です。
- 1 秒あたり 67 エラー、約 180 万リクエストに 1 件のエラー
- フリート全体で 1,580 万読み取り IOPS
- ネットワーク上で毎秒 2 Tb 以上
これについて明確にしておきます: チャンクは初期化されただけであり、複製されていません。読み取り専用ワークロードの複雑さはすべてのリクエストにわたって異なります。また、測定期間中に障害は発生しませんでした。
1 億 QPS を達成するまでに直面したエンジニアリングの取り組みと興味深い課題については、今後の投稿で詳しく説明します。