Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hyperdrive試してみた🛸
Search
AijiUejima
October 06, 2023
Technology
3
900
Hyperdrive試してみた🛸
Cloudflare Meetup Nagoya 第3回にて発表した資料です。
https://cfm-cts.connpass.com/event/294096/
AijiUejima
October 06, 2023
Tweet
Share
More Decks by AijiUejima
See All by AijiUejima
VRTツールのダークホース Lost Pixelを紹介したい
aiji42
5
2.1k
オリジンサーバに手を付けないパーフォマンス改善
aiji42
5
1.1k
Cloudflare Fonts試してみた🔤
aiji42
2
520
Workers Browser Rendering API について
aiji42
0
360
VercelとNext.jsの機能を最大限に活用したA/Bテスト手法
aiji42
6
1.1k
Cloudflare WorkersとKVで キャッシュを非同期に更新する | Cloudflare Meetup Nagoya
aiji42
1
520
ビギナー向け エッジランタイムのすすめ | エッジランタイムを意識した開発をはじめよう
aiji42
10
4k
Cloudflare Workersで動くOG画像生成器
aiji42
1
1.3k
サイボウズフロントエンドマンスリー#26_エイチーム
aiji42
0
370
Other Decks in Technology
See All in Technology
アクセス制御にまつわる改善 / Improving access control
itkq
0
590
require(ESM)とECMAScript仕様
uhyo
4
970
M5と自作基板をくっつけてみた〜M5 Japan Tour 2024 Spring 福冈 (Fukuoka|福岡)〜
keropiyo
0
130
Handling focus in 2024
tahia910
0
230
JAWS-UG Bedrock Claude Night
yamahiro
3
720
Next.js に疲れた私は Vue3 に癒やされた
akagire
0
140
ゼロから始めるVue.jsコミュニティ貢献 / first-vuejs-community-contribution-link-and-motivation
lmi
1
150
Python と Snowflake はズッ友だょ!~ Snowflake の Python 関連機能をふりかえる ~
__allllllllez__
2
140
コードや知識を組み込む / Incorporate Code and knowledge
ks91
PRO
0
150
コードファーストの考え方。 Amplify Gen2から学ぶAWS次世代のWeb開発体験
yoshiitaka
2
360
How to do well in consulting–Balkan Ruby 2024
irinanazarova
0
140
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
0
650
Featured
See All Featured
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Code Reviewing Like a Champion
maltzj
515
39k
Building a Modern Day E-commerce SEO Strategy
aleyda
21
6.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
79
43k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Become a Pro
speakerdeck
PRO
13
4.6k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Six Lessons from altMBA
skipperchong
22
3k
Documentation Writing (for coders)
carmenintech
60
4k
RailsConf 2023
tenderlove
8
550
Making the Leap to Tech Lead
cromwellryan
125
8.5k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Transcript
© 2023 Ateam Inc. Hyperdrive試してみた🛸 Cloudflare Meetup Nagoya #3
© 2023 Ateam Inc. ⾃⼰紹介 Who am I ? Name:
Aiji Uejima X(旧Twitter): aiji42_dev Github: aiji42 株式会社エイチームライフデザイン技術開発室所属 リードエンジニア 最近興味があるのはエッジランタイム。 毎⽇プライベートでGithubに草⽣やしながら頑張ってます! 2
© 2023 Ateam Inc. 🚧 注意 3 本⽇発表する内容は 2023-10-06 時点の情報です。
現在の Hyperdrive のステータスはオープンベータです。 よって、仕様が変更される可能性があります。
© 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なるものが発表されました。
© 2023 Ateam Inc. Hyperdriveとは 6 https://blog.cloudflare.com/ja-jp/hyperdrive-making-regional-databases-feel-distributed-ja-jp/ Hyperdriveは当社のグローバルネットワークを使用して、レガシーなクラ ウドプロバイダーであろうとお気に入りのサーバーレスデータベースプロ バイダーであろうと、既存のデータベースへのクエリーを高速化し、新しい
データベース接続を繰り返し設定することで発生する遅延を劇的に短縮 し、データベースに対して最も一般的な読取りクエリーをキャッシュしま す。 端的に⾔うとWorkerとDBの接続を⾼速化するものらしい
© 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)
© 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/
© 2023 Ateam Inc. Hyperdriveがオーバヘッドを低減するイメージ 9 ‧ ‧ ‧ ‧
‧ pre connect Hyperdriveなし Hyperdriveあり
© 2023 Ateam Inc. 実際にCloudflareが⽤意したデモサイト 10 https://hyperdrive-demo.pages.dev/
© 2023 Ateam Inc. 試しに使って計測してみた 11 https://zenn.dev/aiji42/scraps/62411e4b0daaed 時間の都合上駆け⾜でいきますので、 コードに関して気になる⽅は私のZennのスクラップを参照してください。
© 2023 Ateam Inc. Hyperdriveの⽤意 12 wrangler hyperdrive create <name>
--connection-string="postgres://…" `wrangler hyperdrive create`コマンドで任意のDBをHyperdriveに登録 Webのコンソールからは登録‧確認等はできない Postgresのみ対応(MySQLは年内に対応されるとのこと) 登録後は `wrangler hyperdrive list` で確認できる
© 2023 Ateam Inc. wrangler.tomlにBindingsとして追加 13 `hyperdrive create`(もしくは`hyperdrive list`)実⾏時に表⽰されたidを wrangler.tomlに記載すれば即利⽤可能になる。
© 2023 Ateam Inc. Workerから利⽤する 14 `env.HYPERDRIVE`を使ってSQLクライアントを⽣成 $ wrangler dev
‒remote で⽴ち上げれば利⽤可能になる
© 2023 Ateam Inc. 計測を開始 15 データベースは Neon オハイオリージョン 1リクエスト中で同⼀のSELECTを複数回実⾏し、クエリが解決される時間を計測
計測ケース 1. HyperdriveなしTCP接続 2. Hyperdriveあり+クエリキャッシュなし 3. Hyperdriveあり+クエリキャッシュあり
© 2023 Ateam Inc. 計測結果 16
© 2023 Ateam Inc. 計測結果 17 Hyperdriveなしでは初期コネクションのオーバヘッドが著しく⼤きく Hyperdriveによってそれが緩和されていることがわかる
© 2023 Ateam Inc. 計測結果 18 クエリキャッシュがヒットしている状態であれば、かなりパフォーマンスが改善 されている
© 2023 Ateam Inc. 計測結果 19 Hyperdriveありの⽅が、1クエリごとの処理時間は40~50ms増加している
© 2023 Ateam Inc. Hyperdriveを経由することによるレイテンシ Hyperdriveを経由するラウンドトリップ分の レイテンシが計上される
© 2023 Ateam Inc. 実測から⾒えてきたHyperdrive利⽤の勘所 21 - 1,2回しかクエリを発⾏しないのであればHyperdriveを利⽤した⽅が速い - 初回コネクションオーバヘッドの低減効果が⼤きい
- クエリを直列に複数回発⾏するケースでは逆転する可能性がある - Hyperdriveを経由する分のレイテンシが発⽣するため - コネクション確⽴のオーバヘッド vs 各クエリのレイテンシ累計 - クエリキャッシュの効果は絶⼤ - 何をキーにキャッシュしているのか、TTLや破棄される条件などは、情報が明 かされていないので注意が必要 - `$ wrangler hyperdrive update`でQCはオフにできる(デフォルトはオン)
© 2023 Ateam Inc. 22 < でもよく考えたら北⽶にDB置くケースは⾃分にはなかったわ...
© 2023 Ateam Inc. 国内で完結する構成で再計測してみる 23 データベースは Supabase バージニアリージョンと東京リージョンを⽤意 (Neonはアジアはシンガポールにしかリージョンがないので、⽐較しやすいようにSupabaseに変更)
1リクエスト中で同⼀のSELECTを複数回実⾏し、クエリが解決される時間を計測 計測ケース 1. HyperdriveなしTCP接続 2. Hyperdriveあり+クエリキャッシュなし (クエリキャッシュありは省略)
© 2023 Ateam Inc. 再計測 24 バージニア 東京
© 2023 Ateam Inc. 再計測 25 バージニア 東京 物理距離がパフォーマンスに与える影響が⽀配的であることがわかる
© 2023 Ateam Inc. 再計測 26 バージニア 東京 バージニアほどの差は無いが、近距離でも初期コネクションのオーバヘッド低減 効果は⼀定ある(距離が短いとはいえ7往復もしていればこのくらいの差は出る)
© 2023 Ateam Inc. 再計測 27 バージニア 東京 Hyperdrive経由分のレイテンシは若⼲あるが3ms程度なら無視できるかも
© 2023 Ateam Inc. 改めて利⽤における勘所 28 - DBのロケーションに関わらず、とりあえずHyperdriveは利⽤すると良さそう - 初期コネクションオーバヘッドの低減のため
- 各クエリに上乗せされるレイテンシは近距離であれば数ms - 遠距離であっても、1クエリで解決させるとか、Promiseで⾮同期に処理させる など、⼯夫次第でこのレイテンシは改善できる - クエリキャッシュは効果が期待できるが、キャッシュの仕様が明かされていないの で、事故を避けるため⼀旦オフで良いと思う ※あくまで⾃⾝のユースケースで評価した個⼈的⾒解です
© 2023 Ateam Inc. 29 < でもHyperdriveなくても国内完結なら⼗分速くない? < まあ確かに... (てか、この狭い国⼟に複数リージョンあるって⽇本すげーな)
© 2023 Ateam Inc. Hyperdriveの利⽤を後押しする話(料⾦) 30 https://developers.cloudflare.com/hyperdrive/platform/pricing/ ベータ期間中は有料アカウントなら誰でも使⽤可能 コネクションプーリングに関しては永続無料、クエリキャッシュは有料化予定
© 2023 Ateam Inc. Hyperdriveの利⽤を後押しする話(コネクションプール) 31 そもそもDBとWorkerが1対1なんてことは稀
© 2023 Ateam Inc. Hyperdriveの利⽤を後押しする話(コネクションプール) 32 Workerはスケールし、その分だけコネクションが発⽣するため、 コネクションプールがないとリソースが枯渇して新たにコネクションを確⽴できなくなる ❌ ❌
© 2023 Ateam Inc. Hyperdriveの利⽤を後押しする話(コネクションプール) 33 Supabase などの最近のDBaaSや、Aurora Serverlessなどはサーバレスから接続 されることが前提にあるので、プーリングを持っているサービスも増えている
https://supabase.com/blog/supabase-pgbouncer
© 2023 Ateam Inc. Hyperdriveの利⽤を後押しする話(コネクションプール) 34 プーリングを持たないDBを利⽤したいときには、Hyperdriveを使⽤して枯渇を 防⽌したほうが良い(無料だし) region A
region B
© 2023 Ateam Inc. 改めて利⽤における勘所(再掲) 35 - DBのロケーションに関わらず、とりあえずHyperdriveは利⽤すると良さそう - 初期コネクションオーバヘッドの低減のため
- 各クエリに上乗せされるレイテンシは近距離であれば数ms(誤差程度) - 遠距離であっても、1クエリで解決させるとか、Promiseで⾮同期に処理させる など、⼯夫次第でこのレイテンシは改善できる - コネクションプールとしての利⽤もあり(DB側に機能がないなら) - 無料だし - クエリキャッシュは効果が期待できるが、キャッシュの仕様が明かされていないの で、事故を避けるため⼀旦オフで良いと思う - こちらは将来的に有料化予定 ※あくまで⾃⾝のユースケースで評価した個⼈的⾒解です
© 2023 Ateam Inc. 36 ご清聴ありがとうございました