Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hyperdrive試してみた🛸

AijiUejima
October 06, 2023

 Hyperdrive試してみた🛸

Cloudflare Meetup Nagoya 第3回にて発表した資料です。
https://cfm-cts.connpass.com/event/294096/

AijiUejima

October 06, 2023
Tweet

More Decks by AijiUejima

Other Decks in Technology

Transcript

  1. © 2023 Ateam Inc.
    Hyperdrive試してみた🛸
    Cloudflare Meetup Nagoya #3

    View full-size slide

  2. © 2023 Ateam Inc.
    ⾃⼰紹介
    Who am I ?
    Name: Aiji Uejima
    X(旧Twitter): aiji42_dev
    Github: aiji42
    株式会社エイチームライフデザイン技術開発室所属
    リードエンジニア
    最近興味があるのはエッジランタイム。
    毎⽇プライベートでGithubに草⽣やしながら頑張ってます!
    2

    View full-size slide

  3. © 2023 Ateam Inc.
    🚧 注意
    3
    本⽇発表する内容は 2023-10-06 時点の情報です。
    現在の Hyperdrive のステータスはオープンベータです。
    よって、仕様が変更される可能性があります。

    View full-size slide

  4. © 2023 Ateam Inc.
    Birthday Weekでの発表
    4
    https://blog.cloudflare.com/ja-jp/hyperdrive-making-regional-databases-feel-distributed-ja-jp/
    先⽉末(2023年9⽉)のBirthday WeekにてブログでHyperdriveなるものが発表されました。

    View full-size slide

  5. © 2023 Ateam Inc.
    Hyperdriveとは
    6
    https://blog.cloudflare.com/ja-jp/hyperdrive-making-regional-databases-feel-distributed-ja-jp/
    Hyperdriveは当社のグローバルネットワークを使用して、レガシーなクラ
    ウドプロバイダーであろうとお気に入りのサーバーレスデータベースプロ
    バイダーであろうと、既存のデータベースへのクエリーを高速化し、新しい
    データベース接続を繰り返し設定することで発生する遅延を劇的に短縮
    し、データベースに対して最も一般的な読取りクエリーをキャッシュしま
    す。
    端的に⾔うとWorkerとDBの接続を⾼速化するものらしい

    View full-size slide

  6. © 2023 Ateam Inc.
    WorkerからTCPでDBと接続する上での課題
    7
    ACK
    SYN-ACK
    SYN
    ClientHello ServerHello
    Certificate
    ServerHelloDone
    ClientKeyExchange
    ChangeCipherSpec
    Finished
    ChangeCipherSpec
    Finished



    先述のブログによれば、WorkerとDBのコネ
    クション確⽴において TCP + TLS + 認証のた
    めに最低7往復の通信が⾛る(らしい)
    ※TCPで1往復、TLSで2往復、残りの4往復は具体的に何な
    のかわからない(詳しい⼈教えて下さい)
    例えば北⽶(オレゴン)にDBがあり、名古屋から
    接続すると最寄り(東京or⼤阪)のWorkerが割り
    当てられる。
    東京‧オレゴン間で1往復に100~300msかかる
    とすると、コネクションの確⽴に1~2sは要する
    Workerが⽴ち上がるたびにこのオーバヘッドが
    必要になる
    SQL Query
    SQL Execute
    Result
    + 4? (Auth)

    View full-size slide

  7. © 2023 Ateam Inc.
    この問題を解決するためのHyperdrive
    Workerに近い位置で寿命が⻑めのリソース
    (Hyperdrive)を⽤意しておき、先にDBとのコ
    ネクションを確⽴しておく。
    WorkerはHyperdriveとコネクトするが、
    物理的に距離が近いのでDBとダイレクトにコ
    ネクトするよりも速い。
    加えてHyperdriveはクエリキャッシュの機能も
    備えている。
    https://blog.cloudflare.com/ja-jp/hyperdrive-making-regional-databases-feel-distributed-ja-jp/

    View full-size slide

  8. © 2023 Ateam Inc.
    Hyperdriveがオーバヘッドを低減するイメージ
    9





    pre connect
    Hyperdriveなし Hyperdriveあり

    View full-size slide

  9. © 2023 Ateam Inc.
    実際にCloudflareが⽤意したデモサイト
    10
    https://hyperdrive-demo.pages.dev/

    View full-size slide

  10. © 2023 Ateam Inc.
    試しに使って計測してみた
    11
    https://zenn.dev/aiji42/scraps/62411e4b0daaed
    時間の都合上駆け⾜でいきますので、
    コードに関して気になる⽅は私のZennのスクラップを参照してください。

    View full-size slide

  11. © 2023 Ateam Inc.
    Hyperdriveの⽤意
    12
    wrangler hyperdrive create --connection-string="postgres://…"
    `wrangler hyperdrive create`コマンドで任意のDBをHyperdriveに登録
    Webのコンソールからは登録‧確認等はできない
    Postgresのみ対応(MySQLは年内に対応されるとのこと)
    登録後は `wrangler hyperdrive list` で確認できる

    View full-size slide

  12. © 2023 Ateam Inc.
    wrangler.tomlにBindingsとして追加
    13
    `hyperdrive create`(もしくは`hyperdrive list`)実⾏時に表⽰されたidを
    wrangler.tomlに記載すれば即利⽤可能になる。

    View full-size slide

  13. © 2023 Ateam Inc.
    Workerから利⽤する
    14
    `env.HYPERDRIVE`を使ってSQLクライアントを⽣成
    $ wrangler dev ‒remote で⽴ち上げれば利⽤可能になる

    View full-size slide

  14. © 2023 Ateam Inc.
    計測を開始
    15
    データベースは Neon オハイオリージョン
    1リクエスト中で同⼀のSELECTを複数回実⾏し、クエリが解決される時間を計測
    計測ケース
    1. HyperdriveなしTCP接続
    2. Hyperdriveあり+クエリキャッシュなし
    3. Hyperdriveあり+クエリキャッシュあり

    View full-size slide

  15. © 2023 Ateam Inc.
    計測結果
    16

    View full-size slide

  16. © 2023 Ateam Inc.
    計測結果
    17
    Hyperdriveなしでは初期コネクションのオーバヘッドが著しく⼤きく
    Hyperdriveによってそれが緩和されていることがわかる

    View full-size slide

  17. © 2023 Ateam Inc.
    計測結果
    18
    クエリキャッシュがヒットしている状態であれば、かなりパフォーマンスが改善
    されている

    View full-size slide

  18. © 2023 Ateam Inc.
    計測結果
    19
    Hyperdriveありの⽅が、1クエリごとの処理時間は40~50ms増加している

    View full-size slide

  19. © 2023 Ateam Inc.
    Hyperdriveを経由することによるレイテンシ
    Hyperdriveを経由するラウンドトリップ分の
    レイテンシが計上される

    View full-size slide

  20. © 2023 Ateam Inc.
    実測から⾒えてきたHyperdrive利⽤の勘所
    21
    - 1,2回しかクエリを発⾏しないのであればHyperdriveを利⽤した⽅が速い
    - 初回コネクションオーバヘッドの低減効果が⼤きい
    - クエリを直列に複数回発⾏するケースでは逆転する可能性がある
    - Hyperdriveを経由する分のレイテンシが発⽣するため
    - コネクション確⽴のオーバヘッド vs 各クエリのレイテンシ累計
    - クエリキャッシュの効果は絶⼤
    - 何をキーにキャッシュしているのか、TTLや破棄される条件などは、情報が明
    かされていないので注意が必要
    - `$ wrangler hyperdrive update`でQCはオフにできる(デフォルトはオン)

    View full-size slide

  21. © 2023 Ateam Inc. 22
    < でもよく考えたら北⽶にDB置くケースは⾃分にはなかったわ...

    View full-size slide

  22. © 2023 Ateam Inc.
    国内で完結する構成で再計測してみる
    23
    データベースは Supabase バージニアリージョンと東京リージョンを⽤意
    (Neonはアジアはシンガポールにしかリージョンがないので、⽐較しやすいようにSupabaseに変更)
    1リクエスト中で同⼀のSELECTを複数回実⾏し、クエリが解決される時間を計測
    計測ケース
    1. HyperdriveなしTCP接続
    2. Hyperdriveあり+クエリキャッシュなし
    (クエリキャッシュありは省略)

    View full-size slide

  23. © 2023 Ateam Inc.
    再計測
    24
    バージニア 東京

    View full-size slide

  24. © 2023 Ateam Inc.
    再計測
    25
    バージニア 東京
    物理距離がパフォーマンスに与える影響が⽀配的であることがわかる

    View full-size slide

  25. © 2023 Ateam Inc.
    再計測
    26
    バージニア 東京
    バージニアほどの差は無いが、近距離でも初期コネクションのオーバヘッド低減
    効果は⼀定ある(距離が短いとはいえ7往復もしていればこのくらいの差は出る)

    View full-size slide

  26. © 2023 Ateam Inc.
    再計測
    27
    バージニア 東京
    Hyperdrive経由分のレイテンシは若⼲あるが3ms程度なら無視できるかも

    View full-size slide

  27. © 2023 Ateam Inc.
    改めて利⽤における勘所
    28
    - DBのロケーションに関わらず、とりあえずHyperdriveは利⽤すると良さそう
    - 初期コネクションオーバヘッドの低減のため
    - 各クエリに上乗せされるレイテンシは近距離であれば数ms
    - 遠距離であっても、1クエリで解決させるとか、Promiseで⾮同期に処理させる
    など、⼯夫次第でこのレイテンシは改善できる
    - クエリキャッシュは効果が期待できるが、キャッシュの仕様が明かされていないの
    で、事故を避けるため⼀旦オフで良いと思う
    ※あくまで⾃⾝のユースケースで評価した個⼈的⾒解です

    View full-size slide

  28. © 2023 Ateam Inc. 29
    < でもHyperdriveなくても国内完結なら⼗分速くない?
    < まあ確かに...
    (てか、この狭い国⼟に複数リージョンあるって⽇本すげーな)

    View full-size slide

  29. © 2023 Ateam Inc.
    Hyperdriveの利⽤を後押しする話(料⾦)
    30
    https://developers.cloudflare.com/hyperdrive/platform/pricing/
    ベータ期間中は有料アカウントなら誰でも使⽤可能
    コネクションプーリングに関しては永続無料、クエリキャッシュは有料化予定

    View full-size slide

  30. © 2023 Ateam Inc.
    Hyperdriveの利⽤を後押しする話(コネクションプール)
    31
    そもそもDBとWorkerが1対1なんてことは稀

    View full-size slide

  31. © 2023 Ateam Inc.
    Hyperdriveの利⽤を後押しする話(コネクションプール)
    32
    Workerはスケールし、その分だけコネクションが発⽣するため、
    コネクションプールがないとリソースが枯渇して新たにコネクションを確⽴できなくなる


    View full-size slide

  32. © 2023 Ateam Inc.
    Hyperdriveの利⽤を後押しする話(コネクションプール)
    33
    Supabase などの最近のDBaaSや、Aurora Serverlessなどはサーバレスから接続
    されることが前提にあるので、プーリングを持っているサービスも増えている
    https://supabase.com/blog/supabase-pgbouncer

    View full-size slide

  33. © 2023 Ateam Inc.
    Hyperdriveの利⽤を後押しする話(コネクションプール)
    34
    プーリングを持たないDBを利⽤したいときには、Hyperdriveを使⽤して枯渇を
    防⽌したほうが良い(無料だし)
    region A
    region B

    View full-size slide

  34. © 2023 Ateam Inc.
    改めて利⽤における勘所(再掲)
    35
    - DBのロケーションに関わらず、とりあえずHyperdriveは利⽤すると良さそう
    - 初期コネクションオーバヘッドの低減のため
    - 各クエリに上乗せされるレイテンシは近距離であれば数ms(誤差程度)
    - 遠距離であっても、1クエリで解決させるとか、Promiseで⾮同期に処理させる
    など、⼯夫次第でこのレイテンシは改善できる
    - コネクションプールとしての利⽤もあり(DB側に機能がないなら)
    - 無料だし
    - クエリキャッシュは効果が期待できるが、キャッシュの仕様が明かされていないの
    で、事故を避けるため⼀旦オフで良いと思う
    - こちらは将来的に有料化予定
    ※あくまで⾃⾝のユースケースで評価した個⼈的⾒解です

    View full-size slide

  35. © 2023 Ateam Inc. 36
    ご清聴ありがとうございました󰢛

    View full-size slide