2 ポイント 投稿者 GN⁺ 2023-12-17 | 1件のコメント | WhatsAppで共有
  • SupabaseとFly.ioによるマネージドPostgresの協業は、Flyのインフラ上でSupabaseのデータベース機能を使えるようにする試みだったが、現在は廃止されている
  • このサービスは、Fly.ioの37以上のロケーションで稼働するエッジコンピューティング環境にPostgresを配置し、Flyアプリケーションとデータベースをより近くに置く構成を目指していた
  • 機能範囲には、40以上の拡張機能、pgvector、Supavisor、日次バックアップ、ポイントインタイムリカバリ、ブランチング、可観測性、マイグレーション、ダッシュボード、REST・GraphQLの自動生成APIまで含まれる
  • 初期展開は段階的に進められ、課金・サポート移管・社内トレーニングなどの企業間統合作業と、初期テスターからのバグ修正が残っていた
  • Flyの既存Postgresがユーザー自身で運用責任を負うアンマネージド型である一方、Fly PostgresはSupabaseがスケーリング・バックアップ・レプリケーション・アップグレードを担うマネージドサービスだった

リリース状況とサービス範囲

  • Fly Postgresは現在廃止されており、詳細は廃止告知で確認できる
  • SupabaseとFly.ioは、Flyインフラ上で動作するマネージドPostgresサービスとしてFly Postgresをリリースした
  • データベースはFly.ioのエッジコンピューティングプラットフォーム上で実行され、Fly.ioの37以上のロケーションから選んで開始できる
  • Flyにデプロイされたデータ集約型アプリケーションは、データベースを同じインフラ内に置くことで、より低いレイテンシを期待できる

SupabaseマネージドPostgresの機能

  • Fly Postgresは、Supabaseのマネージドデータベースに期待される主要機能をFly環境に提供する
    • Supabase Postgres40以上の拡張機能
    • pgvectorベースのVector/AIワークロード対応
    • SupabaseのPostgresコネクションプーラーであるSupavisor
    • 日次バックアップとポイントインタイムリカバリ
    • ブランチング、可観測性、マイグレーション
    • データベース管理用ダッシュボード
    • 自動生成Data API

段階的ロールアウトと初期テスト

  • リリースは段階的ロールアウトとして進められた
  • 企業間統合には、課金、サポート移管、Supabase社員のトレーニングなどの作業が含まれる
  • 一部の初期テスターと検証中で、修正すべきバグが残っていた
  • テスト参加希望者はwaitlistに登録できた
  • 翌月にはより多くのテスターを受け入れる予定で、データ安全性に確信を持った後で追加のリリース日程を共有する予定だった

マネージドPostgresとアンマネージドPostgresの違い

  • Flyの既存のPostgres提供方式はアンマネージドである
    • ユーザーがスケーリング、ポイントインタイムバックアップ、レプリケーション、メジャーバージョンアップグレードなどを自分で処理する必要がある
  • Supabaseが運用するFlyのマネージドPostgresでは、ユーザーはアプリケーション構築により集中できる
  • マネージドサービスはFly extension APIで作られている
    • 同じAPIはFly Redisにも使われている
  • テスターはfly extensionsコマンドでPostgresデータベースを作成できた
    • fly extensions supabase create
  • サービスが安定すれば、postgres名前空間に置き換えられる予定だった
    • fly postgres create

Fly Machinesベースの実装

  • Fly PostgresはFly machines上に構築されている
  • Machinesは軽量なFirecracker VMであり、Machines APIはアプリケーションのライフサイクルを細かく制御する
  • Machinesは非アクティブ状態で停止でき、新しいリクエストが来ると数秒以内に再開できる
  • SupabaseはFly APIとのやり取りを単純化するため、fly-adminというTypeScriptラッパーを作成した
  • SupabaseはPostgresにいくつかの追加サービスをバンドルするため、Fly Machines APIに渡せる単一のDockerイメージを用意した
  • 既存のビルドプロセスではPackerでAWS用AMIを作成しており、このパイプラインの一部を再利用してAll In One Imageをビルドした
  • All In One Imageは、単一のDockerコンテナ内にSupabaseプロジェクトの実行に必要なすべてのサービスを含む

マルチクラウドへの移行

  • このリリースにより、Supabaseは正式にマルチクラウドになった
  • Supabaseはマルチクラウド移行を単純化するため、AWSのマネージドサービスを意図的に避けている
  • クラウドプロバイダーごとに基本プリミティブが大きく異なるため、移行は単純ではない
  • Fly Machinesは、使われていないVMを停止し、数秒以内に透過的に再開する方式を提供する
    • 非アクティブなデータベースを一時停止するプロセスが単純になる
    • AWSにはこれを直接実現するプリミティブがない
  • 逆にFlyにはAWSが提供する一部のプリミティブがなく、回避策が必要になる
    • Fly Machinesにはネットワーク接続ストレージがない
    • SupabaseはFly volumes上のデータを一時データとして扱う
    • Flyで実行されるすべてのプロジェクトについて、WAL-Gで物理バックアップを実行する
    • データベースの変更はS3へ継続的にストリーミングされる
    • ホストやボリュームの破損が発生した場合、最新のS3データを使って新しいFlyホストにプロジェクトを復元する

運用の可観測性とイメージ配布

  • AWSではホストの問題を検知するためにAWS Health eventsを受信する
  • FlyではMachineログをfly-log-shipper経由でLogflareへ送る
  • SupabaseはAWSコンテナレジストリだけでなく、Fly DockerレジストリにもAll In Oneイメージを公開する
  • Fly Dockerレジストリへの公開により、Flyでプロジェクトを起動する際の信頼性と性能が向上する

Fly拡張と認証統合

  • Flyはプラットフォーム拡張のためのExtensions APIを提供している
  • Supabaseはユーザーとプロジェクトをプロビジョニングするため、APIにいくつかのルートを追加した
  • Flyユーザーは既存のFly認証情報でSupabaseダッシュボードにアクセスできる
  • Supabase APIはユーザー認証のためにFlyとのOAuthフローを開始する
  • Supabase AuthチームはAPI統合を容易にするため、Fly OAuth providerを作成した

残された課題

  • SupabaseはFlyチームとともに、いくつかの運用課題に引き続き対応中だった
  • ネットワーク制限のサポート

    • ネットワーク制限機能は、コンテナが接続クライアントの正しいIPを受け取る必要がある
    • 現在の構成では、コンテナはクライアントIPではなくFly proxy IPを見る
    • 接続はProxy protocolを公開するFly proxyを通過する
    • Postgresはこの情報を直接利用できず、SupabaseはSupavisorにproxy-protocolを認識させる方法を検討中である
  • Fly内部バックアップ

    • FlyはまだマネージドBlobストレージを提供していないため、FlyプロジェクトのバックアップはAWS S3に対して行われる
    • この方式はクラウド間の帯域幅コストを発生させる
    • FlyはBlob Storageに取り組んでいる

始め方と価格

  • プレビュー申請はpreview formから行えた
  • 組織が許可リストに追加されると、ドキュメントのQuickstartから始められた
  • Fly組織は無料プロジェクトを1つ受け取れる
  • 課金に関する詳細はまだ作業中だったが、価格は現在のSupabase価格と比べて大きく変わらない予定だった

1件のコメント

 
GN⁺ 2023-12-17
Hacker Newsの意見
  • SupabaseのCEOです。Flyの現在のPostgresは非マネージドなので、Flyと一緒にマネージドサービスを運用できるよう作業中です。
    これはFly RedisでUpstashチームとやっているモデルと同じです: https://fly.io/docs/reference/redis/
    まだテスター向けに高可用性機能を展開している最中で、確定した日程はありませんが、Flyチームとできるだけ早く進めます

    • なぜFlyはDigitalOceanや大手クラウドのように独自のマネージドサービスを提供して上位市場に進出しないのか気になります。
      他社の非ホスティングサービスをホスティング版として管理するために、外部企業が入って協業する例はあまり聞いたことがありません
    • 分散SQLiteについてどう見ているのか気になります。将来的にPostgresの代わりのデフォルト選択肢になり得ると思いますか?
  • 以前Supabaseを見てみたのですが、基本のREST APIをどう作るのかが分かりづらかったです。
    テーブルを作るとやり取り用のAPIを自動生成してくれるのはよさそうですが、ではビジネスロジックはどこに置けばいいのか分かりませんでした。
    Edge Functionsも見ましたが、例がジョブ処理寄りで、その用途で使えということなのかが明確ではなく、何か単純なことを見落としている気がします

    • PostgRESTインターフェースを使うなら、最終的にロジックをストアドプロシージャに入れることになる点を意識しておくべきです。
      REST APIはJOINのようなデータ集約にはかなり便利ですが、トランザクションのようなものが必要になった瞬間に行き詰まり始めました。
      ロールベースアクセス制御のための行レベルセキュリティ(RLS) も煩雑で、開発者体験はいまひとつでした。
      DB要件が単純ならREST APIは非常に便利ですが、複雑なものを想定しているなら、PL/pgSQLを学ぶか通常のDB接続を使うほうがよいです
    • 選択肢はいくつかあります。通常のPostgres DBのようにPostgresへ直接接続するか、言及されている自動生成REST APIのPostgRESTに接続するか、DenoベースのEdge Functionsを使うかです。
      たいていは1番で十分で、2番と3番は必要なときに使う追加ツールに近いです
    • 中核となる要素は https://postgrest.org/en/stable/ です。k8s上の大企業プロジェクトで本番利用しています。
      多くのユースケースではロジックをSQLストアドプロシージャに入れられますし、PostgreSQLではJSやPythonのストアドプロシージャも可能です。
      ただし、ロジックコードは通常のCI/CDコンテナや関数としてデプロイするほうが開発者体験は良く、コストとのトレードオフ次第で両方よく使われます。
      SupabaseはDenoサーバーレス関数を推していますが、Webプロジェクトなら大半はCloudflareにNode関数をデプロイするほうを好む気がします。
      結局のところ、対象顧客はロジックの99%をJSフロントエンドに置き、バックエンドではCRUDと認証だけを処理したい層に見えます
    • 私たちはビジネスロジックのかなりの部分をPostgresのトリガーと制約に置いています。ただし、外部連携のような別の処理もあります。
      その部分はPostgres WALベースのイベントシステムを作って、コールバックシステムのように処理しました。
      もともとSupabase Realtimeをforkして始めた、Elixir向けの小さなライブラリも作りました: https://github.com/cpursley/walex
      最近は、Elixirを知らなくても済むように、WalExがイベントをWebhookやEventRelayに配信するよう設定できる機能を追加しました
    • DBは設定次第でクライアントとサーバーのどちらからでもアクセスできます。
      Next.jsを使っているので、DB呼び出しのかなりの部分はNextのサーバーレス関数内にあります。
      ただ、できるだけDBに近づけるために、一部のロジックをSupabase関数へ移すことも検討するつもりですが、まだDenoへ移したいとは思っていません。
      サーバーからSupabaseへアクセスするときは、Supabaseクライアントが使うPostgREST機能を使うか、一般的な pg ライブラリでPostgresへ直接アクセスすればよいです
  • これへ移行できるのを楽しみにしています。Fly.ioとFly Postgres上でBookletを構築しながら、アプリを分散型に設計してきました: https://www.contraption.co/essays/booklet-architecture/
    最大の問題はFly Postgresの設定でした。特にFlyがPostgresの前段にHAProxyを置き、30分の接続制限をかけて接続を切り続ける点です: https://community.fly.io/t/postgresql-connection-issues-have...
    管理可能であるべき問題ですが、接続終了の挙動がドキュメントと一致しない妙な点があり、ずっと不安定でした。
    新しいPostgresでも前段に同じHAProxyを置くのか気になります

  • 今日Flyのドキュメントでこれを見て、HNで見落としたのかと思いましたが、新しく出たものだったようです。
    次に思ったのは、サイドバーにPostgres by FlyPostgres by Supabaseが並んでいるのが奇妙だという点です。
    目立つ比較もないので、FlyにアプリをデプロイしてPostgresが必要な場合に何を使うべきか分かりづらいです。
    個人的には、FlyでDBMSが必要ならLiteFSの分散SQLiteを使うと思いますし、Postgresが必要ならFlyとSupabaseの違いは実質的に非マネージドかマネージドかだと見ています

    • マネージドデータベースが必要ならSupabaseを使えばよいです。Fly.io Postgresは非マネージドで、そこが核心的な違いです
  • とても良い。Supabaseのネットワーク制限設定はあまり好きではなかった: https://supabase.com/docs/guides/platform/network-restrictio...
    以前見たときは、FlyアプリのIPをSupabaseに公開してSupabaseをそのIPでロックするのに妙な問題があったように記憶している
    Supabaseが実際にFlyネットワーク内に入ってくるのは素晴らしい

    • ここでの問題は、fly.ioが送信元IPアドレスの一貫性を保証していないため、送信元IPベースの許可リストを使えないこと
      Fly.ioのネットワーキング文書にも書かれている
  • Supabaseはプロトタイプを超えるとスケーラビリティの問題があると聞いたが、プロダクション経験のある人が話してくれるとありがたい

    • AWS上で動くPostgresなので、その組み合わせに期待する程度にはスケールしそう
      具体的にはどんな問題のこと?
  • Fly.io側のJoshuaです。この統合について質問があれば答えます

    • これは本当に楽しみ。一般的な安定性への懸念、特にデプロイ周りの問題や分かりにくい失敗メッセージを除けば、マネージドPostgresの不在がFlyを本格的に使ってこなかった主な理由だった
      サイドプロジェクトいくつかでは使っているが、まだ大きなプロジェクトでは使っていない
      次に欲しいのはBlobストレージだが、状態を持つものは基本的にマネージドで使いたいので、その作業も進んでいると聞けてうれしい
      新しいPostgres提供の価格について詳細があるのか気になる
  • 現在Flyで大きなDBを動かしていて、マネージドPostgreSQLを探しているので、この知らせはとても歓迎
    私たちは完全なElixirチームなので、これ以上ないタイミング

    • これが、単にsupabase.comに登録してからElixirアプリにDB認証情報を入れるより優れている点は何なのか気になる
  • “Fly machines don't have network-attached storage, so we treat any data in Fly volumes as ephemeral.”
    AWSを使ったことがなく、ネットワーク接続ストレージもあまり分からないので、Flyボリュームと他のプロバイダのネットワーク接続ストレージが正確にどう違うのか気になる
    Flyボリュームを作ると、同じリージョンの別のサーバーへ移せた気がするが、だとすると技術的にはネットワーク接続ストレージではないのか?

    • いいえ。Fly Volumesは接続されたNVMeストレージで、作成された物理ホストにひも付いている
      内部的には、ボリュームをある物理ホストから別の物理ホストへ移すことはでき、その仕組みはかなり興味深いが、まだ公開にはあまり出していない
      今年はそれをもっと表に出していく予定
      Fly Volumesは定期的にオフネットワークのブロックストレージへバックアップしており、これに関する発表も近いうちにさらにある予定
      基本的に理解すべきなのは、Fly VolumesはSANストレージではなく、S3のように本質的に信頼性の高いストレージでもないということ
      Fly Machinesの中では単なるext4ファイルシステムとして見え、信頼性・耐久性・レプリケーションが必要ならアプリケーション層で提供しなければならない
      Fly Postgresは読み取りレプリカのクラスターとして動作し、必要であればどのレプリカでも書き込みリーダーの役割を引き継げるので、そのやり方が適している
      単一ノードのPostgresクラスターを作ろうとするとコンソールに大きな赤い警告を出すのもこのため
      今後数四半期のうちに、信頼性と性能のスペクトラム上で新しい選択肢を出してくると思うが、iSCSIのような方式でブロックデバイスだけを公開するSANドライブを自前で運用する形にはならないだろう
  • この2社の価格モデルは本当に嫌い
    一方の端にはSupabaseがあり、Vercelのような開発者プラットフォーム式の階層型商品で、実際の使用量より多く払わせる構造になっている
    もう一方の端にはFlyがあり、Lambdaのように秒単位・メモリ単位・CPU単位で過度に細かい価格設定なので、おそらく払う額が少なすぎて性能低下を受ける可能性がある
    Cloudflare Workersのようなものがあるのに、なぜそのどちらかを選ぶのかよく分からない。なぜまだスケールを心配したいのか?

    • Cloudflare WorkersにはPostgresの選択肢がない。せいぜい別の場所でホストされたPostgresに接続するHyperdriveがあるくらいで、それも本質的にはコネクションプーラーなので追加の制約が生じる
      Cloudflareが本物のPostgresを提供する可能性も低そう。Cloudflareの哲学は、デプロイするものはすべて世界中に配備されるという方向だが、リレーショナルデータベースは単一サーバーを真実の源として強制するから
      もちろん間違いだと証明されるなら歓迎
    • 必要な任意のDockerコンテナをCloudflare Workersで動かしてみれば、理由が分かる
      Flyの月額料金はかなり直感的で、Lambdaとはまったく似ていない。むしろその2つの中ではCloudflare Workersの価格モデルのほうがLambdaに近い
    • 結局はPostgreSQLエコシステム、開発者体験、さまざまな付加機能のため