https://zenn.dev/aiji42/articles/ba7767e66fb439
PrismaDataProxyが遅いので、セルフホストするためのライブラリを自作して解決しました、というお話です。
本記事で作成・紹介したライブラリはOSSとして公開&npmにpublishしていますので自由にお使いください。
Prisma.ioが提供する、データベース接続管理とプーリングのためのプロキシサーバです。
Cloudflare WorkersやVecel Edge Functionなどは、データベースとのネイティブ(TCP)接続ができません。 そこでPrismaDataProxyデータベースとの接続の間に入り、WorkerからはHTTP接続でデータベースとの仮想接続を実現します。
以降、長いのでPrismaDataProxyのことをPDPと記載します。
PDPは https://cloud.prisma.io から、Webコンソール上でインスタンスを作成することで構築が可能です。 しかし、2022/06/19現在、選択できるリージョンは、バージニア北部とフランクフルトの2拠点のみです。
そして、サーバレスでのサービス提供となっておりコールドスタンバイによるレイテンシの影響も受けます。
PDPの利用ケースはCloudflare Workersなどのエッジサイドからのデータソース利用が大半ですが、データリクエストのレイテンシが大きいとエッジケースのメリットは薄れてしまいます。
手元の計測では、バージニア北部のインスタンスを選択し、同じリージョンにPlanetscaleを構築して接続した際に、コールドスタンバイ時では2.6s前後、コールドスタンバイなしでも600ms前後のレイテンシを観測しています。
このパフォーマンスではサービスに投入することは現実的ではありません。 しかし、Prismaの強力な型生成機能の恩恵を受けたかったため、なんとかPDPを日本リージョンにセルフホストし、更にコールドスタンバイの影響の小さいアーキテクチャで構築できないかと考えました。
まず、PDPのサーバソースが公開されていないかと思い探してみましたが、残念ながら公開はされていませんでした。 そこで、Prisma Client側のコードを読み、PDPとどのような通信を行っているかを見ることで、ブラックボックスなPDPの内部を解き明かせないかと考えました。