Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

Upstash: ฐานข้อมูล Serverless ที่เหมาะสมที่สุดสำหรับ Cloudflare Workers และ Edge Applications

บทนำ

Upstash เริ่มต้นด้วย Mission เป็น Database Option ที่ดีที่สุดสำหรับ AWS Lambda Functions ขณะเดียวกันเราค้นพบอีกตัวเลือกยอดเยี่ยมสำหรับ Serverless Functions: Cloudflare Workers ผลิตภัณฑ์น่าตื่นเต้นนี้สัญญา Low Latency ทั่วโลก ต้นทุนต่ำกว่า และ No Cold Starts แต่มี Limitations หลายอย่างเมื่อเทียบกับ AWS Lambda Limitations เพิ่มเติมทำให้ Database Options เหลือน้อย เราเห็นโอกาสนี้และ Position Upstash เป็นโซลูชันยอดเยี่ยมสำหรับคำถาม: CF Workers เป็น Stateless ควรเก็บ Data ที่ไหน?

Challenges (ความท้าทาย)

Accessibility (การเข้าถึง)

Cloudflare Workers เป็น Closed Environment มากกว่า AWS คุณไม่สามารถ Setup Database ของตัวเองใน Region เดียวกันและเข้าถึงผ่าน VPC ได้ คุณต้องเข้าถึง Database จาก Workers Function Cloudflare Workers ใช้ V8 Isolates เป็น Runtime ไม่อนุญาต TCP Connections ดังนั้น Database ต้องเข้าถึงได้ผ่าน HTTP

Global Replication (การจำลองข้อมูลทั่วโลก)

Workers มีข้อได้เปรียบคือ Deploy ทุกที่ ฟังก์ชันเข้าถึงได้ Low Latency ทั่วโลก แต่ Database ควรอยู่ใกล้ที่ Function Execute ไม่งั้นจะเสีย Hundreds of Milliseconds เพื่อเข้าถึง Database ทำได้โดย Replicate Data ไปหลาย Regions และ Continents

Low Latency (Low Latency)

นักพัฒนาชอบ Edge Computing เพราะ Low Latency ทุกที่ Database ไม่ควรเป็น Bottleneck In-Memory Databases เช่น Redis ให้ Sub-millisecond Latency

Journey of Upstash (เส้นทางของ Upstash)

REST API

เรา Launch Upstash ด้วย Native Redis API Support รองรับ Redis Clients ทั้งหมด เหมาะสำหรับ Legacy Redis Apps แต่เร็วๆ นี้เห็น Users มี Connection Problems บน Serverless Functions และเข้าถึงไม่ได้จาก Cloudflare Workers เรา Implement GraphQL API ก่อน แต่ไม่พอใจเพราะ Performance Overhead จาก Proxy Layer และ GraphQL ไม่ใช่วิธีง่ายสำหรับ Redis Commands เราตัดสินใจสร้าง REST Server ภายใน Database Engine เพื่อ Minimize Performance Overhead เราคิดว่า REST เหมาะกับ Redis กว่า เปิดตัว REST API และได้รับความนิยมจาก Developers ที่ต้องการเข้าถึง Redis จาก Cloudflare Workers และ WebAssembly

Edge Caching

덕분에 REST API Upstash เข้าถึงได้จาก Workers แต Latency ยังไม่ Ideal บาง Developers ลองใช้ Cloudflare Caching Cache Redis Responses แต่เป็น Complex Solution Redis ควรเร็วอยู่แล้ว ไม่ควร Cache Redis ที่อื่น นั่นคือเหตุผลที่เราสร้าง Edge Caching โดย Cache Redis REST Response ที่ Edge Locations ทั้งหมด ใช้ CDN Providers Cache Responses นี่คือ Improvement ใหญ่โตสำหรับ Edge Latencies ได้ Performance Gain ถึง 80%

Global Database

Edge Caching แก้ปัญหา Global Latency ได้ดี แต่มี Drawbacks สำหรับ Use Cases บางอย่าง:

  1. ไม่รองรับ Cache Invalidation (Purge) หาก Cache Expire 30 วินาที จะมี Window 30 วินาทีที่ Client อาจอ่าน Stale Data ทนได้สำหรับ Web Use Cases หลายอย่าง แต่ไม่ใช่ทั้งหมด
  2. Edge Caching รองรับเฉพาะ REST API Redis Clients ไม่ได้รับประโยชน์จาก Edge Caching

เราจึงออกแบบ Database Type ใหม่ที่ Replicate Data ไปหลาย Regions ท้าทายมากในการออกแบบให้ Highly Available และ Consistent พอ Upstash ตอนนี้มี Global Database Offering Replicate Data ไป 5 AWS Regions (East/West North America, Europe, Asia, South America) Global Database ไม่ใช่ Cache จึงไม่มี Cache-Invalidation Problems Writes Replicate ทันทีไปทุก Replicas เพื่อ Performance และ Availability Global Database ออกแบบเป็น Eventually Consistent

Edge Caching vs Global Database (หรือทั้งคู่)

  • ถ้าต้องการแค่ Cache สำหรับ Edge Solution Edge Caching ไม่錯
  • ถ้าต้องการ Writes Invalidate Caches ทันที ควรเลือก Global Database
  • นอกจาก Caching Global Database ใช้เป็น Highly Available Global Datastore ได้
  • Edge Caching เฉพาะ REST Calls หากใช้ Redis Clients Global Database เป็น Option เดียวที่ Low Latency ที่ Edge

ทั้งคู่ออกแบบเพื่อ Minimize Read Latencies หาก Use Case เป็น 90% Write Single Region Setup จะเหมาะสมกว่า Writes มี Latency เท่ากันทั้ง Multi/Single Region แต่วิธี Global แพง 5 เท่า

เมื่อ Enable Edge Caching Upstash Fetch Request แรกจาก Origin แล้ว Cache ที่ Edge หาก Origin ไม่อยู่ใกล้ Latency จะสูง หากต้องการ Best Latency ทุกกรณี ใช้ทั้งคู่โดย Enable Edge Caching บน Global Database

ดู Benchmark Application เปรียบเทียบ Latencies ของ Edge Caching และ Global Database

What's Next? (อะไรต่อ?)

สิ่งที่เราจะปรับปรุง Upstash ที่ Edge:

  • Low Latency สำหรับ Writes: ปัจจุบัน Global Database Optimize Read Latencies ด้วย Single Leader Architecture ครอบคลุม Use Cases ส่วนใหญ่ แต่ขึ้นกับ Feedback และ Use Cases ใหม่ อาจพัฒนา Architecture ให้ Low Latency Writes และ Reads พร้อมกัน
  • Kafka Support: วางแผน Launch Kafka นอกจาก Redis ในสัปดาห์หน้า Kafka จะเปิด Use Cases ใหม่ที่ Edge เช่น Clickstream Analysis หรือ Push Logs ไป Kafka จาก Serverless/Edge Functions

เราดำเนินต่อไปพัฒนา Upstash ตาม Feedback ของคุณ แชร์ความคิดเห็นได้ที่ Twitter หรือ Discord