HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

Nekiで毎秒1億1800万クエリ

118M Queries per Second on Neki (planetscale.com)

83 pointsby joshmgross41 コメント

要約

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と増やしました。

ShardsRoutersDelivered QPSQPS per shard
512999,624199,925
50489,923,900198,478
512480118,538,803231,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達成までのエンジニアリングの取り組みや興味深い課題については、今後の記事で詳しく説明します。