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
1.2k
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
エッジはフロントエンドなのか? バックエンドなのか? について考えてみる
aiji42
7
4.9k
Cloudflare Workersで構築する非同期ジョブシステム
aiji42
6
1.9k
VRTツールのダークホース Lost Pixelを紹介したい
aiji42
5
2.7k
オリジンサーバに手を付けないパーフォマンス改善
aiji42
5
1.4k
Cloudflare Fonts試してみた🔤
aiji42
2
710
Workers Browser Rendering API について
aiji42
0
470
VercelとNext.jsの機能を最大限に活用したA/Bテスト手法
aiji42
6
1.4k
Cloudflare WorkersとKVで キャッシュを非同期に更新する | Cloudflare Meetup Nagoya
aiji42
1
810
ビギナー向け エッジランタイムのすすめ | エッジランタイムを意識した開発をはじめよう
aiji42
14
5.4k
Other Decks in Technology
See All in Technology
Amazon SageMaker Unified Studio(Preview)、Lakehouse と Amazon S3 Tables
ishikawa_satoru
0
150
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
190
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
220
OpenShift Virtualizationのネットワーク構成を真剣に考えてみた/OpenShift Virtualization's Network Configuration
tnk4on
0
130
alecthomas/kong はいいぞ / kamakura.go#7
fujiwara3
1
300
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
250
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
370
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
260
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
530
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
180
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
100
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
17
2.2k
GraphQLとの向き合い方2022年版
quramy
44
13k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Side Projects
sachag
452
42k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Facilitating Awesome Meetings
lara
50
6.1k
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 ご清聴ありがとうございました