HN 日本語サマリー

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

Neki

Neki (planetscale.com)

261 pointsby simon_weber143 コメント

要約

PlanetScaleは、大規模なPostgresクラスターの課題に対応する新しいソリューション「Neki」を発表しました。Nekiは、単一マシンの限界を超えるPostgresのスケーリングを目的としており、各シャードに実際のPostgresを使用し、ルーター、サイドカー、コントロールプレーンといったコンポーネントを組み合わせて水平スケーリングを実現します。これにより、ゼロダウンタイムでのスキーマ変更、アップグレード、リシャーディングなどのオンラインオペレーションが可能になります。

全文翻訳

Nekiの紹介

Nekiがプラットフォームプレビューで利用可能になりました。

Neki は、私たちが8年間にわたり世界最大級のシャーディングされたMySQLクラスタを運用する中で得た教訓に基づいて構築されています。数秒のダウンタイムでさえ非常に公になるような企業のために、毎秒数百万クエリを処理する数千もの本番ワークロードを支えてきました。私たちは、世界の最大のティア0ワークロードを支えることの意味を理解しています。

1年半前にPlanetScale Postgresをリリースしたとき、私たちはもっと多くのことをする必要があることを知っていました。その間に、私たちはPlanetScaleで数千もの顧客を獲得しましたが、その中には当社の最大のMySQL顧客に匹敵する規模の顧客もいました。何度も、チームがPostgresの単一マシンの限界に達するのを見てきました。ハードウェアの強化は一時しのぎにはなりましたが、顧客が単一マシンの能力の限界に達したとき、彼らに提供できる良い選択肢がないことに気づきました。そこでNekiの登場です。

Nekiとは何か?

NekiはPlanetScaleによるシャーディングされたPostgresです。これにより、各シャードに実際のPostgresを維持しながら、Postgresデータベースを複数のマシンにスケールさせることができます。

アプリケーションは標準的なPostgresワイヤプロトコルを介してNekiルーターに接続するため、既存のドライバ、ORM、接続文字列は引き続き機能します。各シャードは、1つのプライマリと少なくとも2つのレプリカを持つ完全なPostgresクラスタであり、3つのアベイラビリティゾーンに分散されます。カスタムストレージエンジンはないため、拡張機能、SQLサポート、パフォーマンスはPostgresと同様に動作します。

シャードキーを選択し、JSONデータトポロジーを通じてテーブルのグループ化と分散方法を制御します。スキーマ変更、バージョンアップグレード、フェイルオーバー、インポート、リシャーディングはすべて、組み込みの完全オンラインワークフローとして実行されます。また、Insights、スキーマ推奨、ブランチング、MCPなど、PlanetScaleで既に利用している機能も利用できます。

初日からシャーディングする必要はありません。Nekiをレプリカ付きの単一プライマリとして実行し、1台のマシンで対応できなくなったら、既存のクラスタに対してリシャーディングワークフローを実行できます。

なぜNekiなのか?

急速に成長するPostgresデータベースに伴う問題は、すでに皆さんもご存知でしょう。テーブルが大きすぎてトラフィックに影響を与えずにVacuumやインデックス作成ができない、バックアップに数時間かかる、接続数の上限、スキーマ変更のためのメンテナンスウィンドウ、トランザクションのラップアラウンドなど、数え上げればきりがありません。

より大きなインスタンスに移行することもできますが、最終的には十分な大きさのマシンがなくなり、コア数やIOPSを増やしても問題は線形にスケールしなくなります。

既存の解決策は、どれも何かを諦めることを要求します。アプリケーションレベルのシャーディングは、ルーティングをコードに押し込みます。Postgres互換の分散データベースは、シャードキーを隠蔽し、拡張機能を削除し、複雑さとレイテンシを追加して、処理やデバッグが困難になります。

そこで私たちは、いくつかの原則に基づいてNekiを構築しました。最も重要な原則は、「Postgresに忠実であること。それを回避したり、偽ったり、背を向けたりしないこと」です。

Nekiはどのように機能するのか?

私たちは、各シャードに実際のPostgresを持つ、PostgresのためにゼロからNekiを設計しました。4つの主要なコンポーネントがあります。

Nekiルーター

アプリケーションはまずNekiルーターに接続します。ルーターはPostgresワイヤプロトコルを話すため、既存のドライバやORMは単一の接続文字列で引き続き機能します。ルーターは、完全なPostgresクエリパーサー、分散クエリプランナー、クエリバッファリングなどを備えています。クエリを解析し、どのシャードで実行するかを決定するプランを構築し、作業を送信して結果を1つのストリームに結合します。ルーターは垂直的および水平的にスケールできるため、単一のルーターがボトルネックになることはありません。

シャーディングとシャードグループ

Nekiの各シャードは、1つのプライマリと少なくとも2つのレプリカを持つ実際のPostgresであり、アベイラビリティゾーンに分散されています。変更されたストレージエンジンはありません。拡張機能、SQLサポート、パフォーマンスは、Postgresであるため、Postgresと同様に動作します。

シャードはシャードグループに編成されるため、異なるテーブルやワークロードを異なるシャードセットに配置できます。各シャードは、インスタンスサイズ、レプリカ数、ストレージ、Postgresパラメータ、拡張機能を定義する構成プロファイルを使用するため、各グループのトラフィックに合わせてサイズを調整できます。

コネクションプーリング

各Postgresインスタンスの横にサイドカーが実行されます。これが、Nekiのコネクションハンドリングを、単にPgBouncerをデータベースの前に置くだけよりも大幅に改善する部分です。Nekiはコネクションの両端(ルーター側とPostgres側)を制御するため、プロセス外から推定するのではなく、各インスタンスが実際に処理できる量に合わせてプールサイズを調整できます。

コントロールプレーン

コントロールプレーンは、各ノードのヘルス状態を追跡し、計画されたスイッチオーバーや予期しないフェイルオーバーを実行し、データのリシャーディング、スキーマ変更の適用、バージョンアップグレードを行うワークフローを調整します。

データトポロジー

これらをまとめるのが、論理テーブルを物理シャードにマッピングするJSON構成であるデータトポロジーです。シャードインデックス(Nekiがルーティングするカラムと値のハッシュ方法を指定)とシャードグループ(テーブルセットが分散するシャード数とそれらのシャードを制御)を定義します。ルーターはトポロジーをキャッシュし、すべてのプランで参照します。

シャーディング以外の機能

通常、メンテナンスウィンドウをスケジュールする必要があるすべての処理が、Nekiでは組み込みワークフローとして実行されます。ワークフローは新しいターゲットノードをプロビジョニングし、レプリケーションで追いつかせ、__neki メタ関数でトラフィックを切り替え、古いノードを廃止します。これらすべては、アプリケーションが使用するのと同じpsql接続を通じて行われます。

このオンラインオペレーションモデルは、スキーマ変更、バージョンアップグレード、計画的および計画外のフェイルオーバー、インポート、リシャーディングをカバーします。

Nekiには、PlanetScaleで利用できるようになったすべての機能も含まれています。Insights、スキーマ推奨、ブランチング、MCPなどです。

Nekiをシャーディングせずに、レプリカ付きの単一プライマリとして実行することもできます。シャーディングが必要になる前に、コネクションプーリングの改善、オンラインDDL、ダウンタイムなしのアップグレード、ヘルスモニタリングを利用できます。シャーディングが必要になったとき、リシャーディングは既存のクラスタに対して実行するワークフローです。

プラットフォームプレビューとは?

私たちは、できるだけ早くNekiを皆様にお届けしたいと考えました。プラットフォームプレビュー期間中は、Nekiで本番ワークロードを実行しないでください。製品はまだ変更されており、その変更の一部は破壊的なものになります。

プラットフォームプレビュー中にフィードバック、質問、または問題が発生した場合は、お知らせください。サポートチケットに記入するか、Discordに参加してください。

今すぐNekiを試す

PlanetScaleにサインインし、プラットフォームプレビューにオプトインして、Nekiクラスタを作成してください。Nekiのアーキテクチャ、シャーディング方法などについては、Nekiドキュメントをお読みください。

大規模なPostgresクラスタをお持ちで、Nekiが適しているかどうか疑問に思っている場合は、お問い合わせください。チームのためにプライベートデモを行い、スキーマとクエリパターンを詳しく調べ、シャーディングに関する具体的な提案をさせていただきます。