Nekiで毎秒1億1800万クエリ
118M Queries per Second on Neki (planetscale.com)
要約
PlanetScaleは、新プラットフォーム「Neki」のプレビューリリースを記念して、そのパフォーマンスを検証しました。このテストでは、512シャーディング構成で1.22 PiBのデータを扱いながら、毎秒1億1800万クエリという驚異的なスループットを達成しました。このベンチマークは、シャーディングによる線形スケーラビリティと、Nekiが大量の読み込みリクエストを処理できる能力を実証するものです。
全文翻訳
Nekiで毎秒1億1800万クエリを達成
昨日、Nekiをプラットフォームプレビューでリリースしました。リリースを記念して、Nekiで毎秒100万クエリを実行するテストを行いたいと考えました。5シャーディングですぐにこの目標を達成し、さらにどこまで伸ばせるか試してみることにしました。
次の実行では、512シャーディングで1.22 PiBのデータに対し、毎秒1億1800万クエリを処理しました。
線形スケーラビリティ
ベンチマークは非常にシンプルでした。単一シャーディングでのポイントセレクトで、プライマリキーによるクエリごとに1行を取得します。書き込み、結合、クロスシャーディングクエリはありません。各シャーディングが受け取るワークロードは分離されており、複数のシャーディングにまたがる単一クエリはありません。
目標は、各シャーディングで毎秒20万クエリ(QPS)を維持し、その後クラスターをスケールアップしてスループットを増加させることでした。5シャーディング、次に50、そして512と増やしました。
| Shards | Routers | Delivered QPS | QPS per shard |
|---|---|---|---|
| 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シャーディングへの移行では、シャーディングあたりのレートは0.8%以内で維持されました。512シャーディングではまだ余裕があったため、ロードジェネレーターにそれを使用させ、各シャーディングは20万QPSではなく23万1000QPSで安定しました。
毎秒1億1850万QPS
512シャーディング、1.22 PiBのデータ全体で、16分間にわたり118,538,803 QPSを維持しました。記録された最大値は118,747,267でした。
- 各シャーディングにPostgresプライマリを1つずつ搭載した
r8g.16xlargeインスタンスを使用 - 各
8xlargeインスタンスに480のNekiルーターを配置 - ルーターでのp99レイテンシは6.06ms、クライアントでのレイテンシは13.95ms
- 毎秒67エラー(約180万クエリに1件のエラー)
- フリート全体で15.8MのRead IOPS
- ネットワーク帯域は毎秒2テラバイト超
この実行について明確にしておくべき点があります。シャーディングはレプリカなしのプライマリのみで構成され、ワークロードはクエリの複雑さが様々である読み取り専用であり、測定ウィンドウ中にフェイルオーバーは発生しませんでした。
1億QPS達成までのエンジニアリングの取り組みや興味深い課題については、今後の記事で詳しく説明します。