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

社内アプリで Cloudflare D1を プロダクト運用してみた体験談(Tokyo)

社内アプリで Cloudflare D1を プロダクト運用してみた体験談(Tokyo)

Haochen Kotoi-Xie

April 24, 2024
Tweet

More Decks by Haochen Kotoi-Xie

Other Decks in Technology

Transcript

  1. Haochen Kotoi-Xie on 2024-04-12 (bd15w5) ࣾ಺ΞϓϦͰ Cloudflare D1Λ ϓϩμΫτӡ༻ͯ͠Έͨମݧஊ @Cloudflare

    Meetup Nagoya @ฐࣾ Haochen Kotoi-Xie on 2024-04-24 (bd17w3) @Cloudflare Meetup Tokyo ϋΦνΣϯ
  2. ฐࣾ homepage: kxc.inc • Target: ʮଧࠁγεςϜʯ • Status: ϓϩμΫγϣϯӡ༻ •

    Tech Stack: Workers + D1 • Complexity: ௿͍ • Total Satisfaction: ·͊·͊ • Code Matuality: ࡶ • Code Performance: ͱͯ΋Α͍ D1 ࢖ͬͯΈͨ
  3. ฐࣾ homepage: kxc.inc • Target: ʮଧࠁγεςϜʯ • Status: ϓϩμΫγϣϯӡ༻ •

    Tech Stack: Workers + D1 • Complexity: ௿͍ • Total Satisfaction: ·͊·͊ • Code Matuality: ࡶ • Code Performance: ͱͯ΋Α͍ ར༻Πϝʔδ D1 ࢖ͬͯΈͨ KXC Utility Shell made with OCaml
  4. ฐࣾ homepage: kxc.inc • Target: ʮଧࠁγεςϜʯ • Status: ϓϩμΫγϣϯӡ༻ •

    Tech Stack: Workers + D1 • Complexity: ௿͍ • Total Satisfaction: ·͊·͊ • Code Matuality: ࡶ • Code Performance: ͱͯ΋Α͍ ར༻Πϝʔδ D1 ࢖ͬͯΈͨ Web൛΋͋ΔΑ͒ " KXC Utility Shell made with OCaml
  5. D1 ࢖ͬͯΈͨ • Target: ʮଧࠁγεςϜʯ • Status: ϓϩμΫγϣϯӡ༻ • Tech

    Stack: Workers + D1 (+ ZT) • Code Matuality: Ұ੾࠷దԽͯ͠ͳ͍ • Complexity: ௿͍ • System Performance: ͱͯ΋Α͍ # • User Satisfaction: ͱͯ΋ߴ͍ $ ฐࣾ homepage: kxc.inc
  6. ར༻Πϝʔδʢଧࠁʣ Request Journey 1. Cmd: ʮpunch ...ʯ 2. HTTP POST

    㱺
 api1.kxc.inc/worklogger/v0/punching 3. ZT 㱺 Cloudflare Workers (api1.kxc.inc)
 ɹ㱺 Cloudflare D1 db = env.D1_WORKLOGGER st = db.prepare(`...sql..(?, ?, ?1)..`)
 .bind(param1, param2) await db.exec(st) D1 ࢖ͬͯΈͨ 1෼ؒͰ෼͔Δ D1 db = env.D1_WORKLOGGER st = db.prepare(`...sql..(?, ?, ?1)..`)
 .bind(param1, param2) await db.exec(st)
  7. ར༻Πϝʔδʢଧࠁʣ Request Journey 1. Cmd: ʮpunch ...ʯ 2. HTTP POST

    㱺
 api1.kxc.inc/worklogger/v0/punching 3. ZT 㱺 Cloudflare Workers (api1.kxc.inc)
 ɹ㱺 Cloudflare D1 db = env.D1_WORKLOGGER st = db.prepare(`...sql..(?, ?, ?1)..`)
 .bind(param1, param2) await db.exec(st) D1 ࢖ͬͯΈͨ 1෼ؒͰ෼͔Δ D1 db = env.D1_WORKLOGGER st = db.prepare(`...sql..(?, ?, ?1)..`)
 .bind(param1, param2) await db.exec(st)
  8. ײ૝ • ͱʹ͔͘࢖͍΍͍͢ (Workers ͔Βͩͱ) • ૣ͍! ͍҆! • 㱺

    listing ͷࡶίʔυͰ΋ CPU Time ~30ms • ~2,200ߦ૯ͳΊ + JSσʔλ͝ʹΐ͝ʹΐ, etc • D1 latency 2ܻmsɺແࢹͰ͖ΔϨϕϧ ར༻Πϝʔδʢlistingʣ D1 ࢖ͬͯΈͨ
  9. Usage Stat ײ૝ • ͱʹ͔͘࢖͍΍͍͢ (Workers ͔Βͩͱ) • ૣ͍! ͍҆!

    • 㱺 listing ͷࡶίʔυͰ΋ CPU Time ~30ms • ~2,200ߦ૯ͳΊ + JSσʔλ͝ʹΐ͝ʹΐ, etc • D1 latency 2ܻmsɺແࢹͰ͖ΔϨϕϧ • 1೔ >5k Request Ͱ΋ແྉʹͳΔݟࠐΈ (Paid Workers) • ࠷େ 1 DB 10GB ·ͰΒ͍͠ • Transaction ͳ͍ͷ͕ਏ͍.. (SQLite ͳͷͰɺ stored function ΋ͳ͍..) • Batch ͞Εͨ΋ͷ͸ 1 txn Ͱ͕͢.. D1 ࢖ͬͯΈͨ (ݱঢ়794.62k; @04/24 18:36) ୯७ܭࢉͩͱ ͋ͱ75,950೥͍͚Δ!
  10. • 1DB 10GB ·Ͱ! (ࠓ·Ͱ 100MB → 1GB) • λΠϜτϥϕϧ!

    • σʔλ Export / Import ※ͳΜͱࠓ·ͰͰ͖ͳ͔ͬͨ :D • άϩʔόϧɾϨϓϦΧ to come • Account͝ͱ: 50,000 DB! (max storage = 250GB) ※ιϑτϦϛοτΒ͍͠ • ແྉͰ࢝ΊΒΕΔ! • ແྉ࿮: 10DB, 500MB/DB, 5GB/Account, 5M read /day, 100K write /day ࠷ۙ GA (General Available) ʹͳͬͨΒ͍͠ Cloudflare D1