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

Top Serverless Databases: โซลูชัน Low-Maintenance และ Cost-Effective

บทนำ

Serverless เหมาะสำหรับ Developers ที่อยากสร้าง Application End-to-End ด้วย Maintenance และ Financial Cost ต่ำสุด Serverless Functions รันโค้ดของคุณโดยไม่ Maintain Backend Infra แต่เป็น Stateless โดย Design ต้องการ External Data Store คำถามต่อไปคือ Database ไหนเหมาะกับ Serverless ที่สุด? ข่าวดีคือ Database Vendors มองเห็น Serverless Trend และ Launch Serverless Offerings หรือปรับ Product ในบทความนี้ จะ List สิ่งที่ทำให้ Database เหมาะกับ Serverless ก่อน แล้วค่อย List Databases ที่ผมคิดว่าเป็น Candidates สำหรับ Great Serverless Database

อะไรทำให้ Database เหมาะกับ Serverless?

  • Ease of Use (ใช้งานง่าย): Next-gen Developers ไม่อยากใช้สัปดาห์เรียนรู้ Tech อยากเรียนจาก YouTube แทนการอ่าน Docs หน้าหลายหน้า Database สำหรับ Serverless ควร Simple และ Intuitive
  • Serverless Pricing: ราคาควร Scale to Zero ทำไมต้องจ่ายสิ่งที่ไม่ได้ใช้ Pricing แบบ Per-bandwidth หรือ Per-request เป็น Serverless เพราะ Correlate กับ Usage จริง ผมชอบ Per-request เพราะ Estimate ง่ายกว่า Bandwidth
  • Developer Friendly Pricing: Pricing ควร Simple ไม่มี Traps บาง Pricing Pages ซับซ้อนจนต้องมี Articles/Posts อธิบาย บาง Vendor มี Complex Calculators ยากที่จะคาดการณ์ค่าใช้จ่ายก่อนเห็น Invoice
  • Serverless Connections: Serverless Functions Scale ไปร้อยๆ-พันๆ ในวินาที หาก Database ต้อง Persistent Connections จะ Hit Connection Limits ง่าย HTTP-based Connections ไม่มีปัญหานี้ เพราะ Lightweight และโดยทั่วไปไม่มี Limits เหล่านี้
  • Low Latency: Extra Latency = Cost ใน Serverless Functions แต Cost จริงคือ Unhappy Users ที่รอ Idle บน Website
  • Portability: หากย้าย Cloud Vendor ต้อง Rewrite Data Layer? หรือ Test App บน Laptop ได้โดยไม่ Connect Remote Database?
  • Consistency: โดยทั่วไป Trade-off ระหว่าง Consistency และ Performance Databases อยู่ตำแหน่งต่างๆ บน Spectrum นี้ Database ที่ดีควร Define Consistency Guarantees ชัดเจน เพื่อ User รู้ Issues และ Risks ที่เป็นไปได้
  • Scalability: Database ควร Keep Up เมื่อ App เริ่มรับ High Throughput อย่าง理想 Scaling ควร Automatic หรือ Managed by Cloud Provider ไม่ต้องกังวล
  • Edge Friendly: Cloudflare Workers และ Fastly Compute เป็น Cool Technologies รัน Serverless Functions ที่ Edge ใกล้ User ต้องการ REST-based Connections และ Globally Replicated Database เพื่อ Minimize Latency
  • Globality: เมื่อ App ได้รับความนิยมทั่วโลก ต้องการ Database ที่ Perform ดีทั่วโลก Multi-region Replication เป็น Key Feature แต่ระวัง Pricing ฟีเจอร์นี้อาจแพง

The Best Databases for Serverless? (Database ไหนดีที่สุดสำหรับ Serverless?)

ใน Section นี้ จะแบ่งปัน Impressions และ Notes จากการลอง Databases ต่อไปนี้ ไม่ใช่ Scientific Analysis แต่หวังให้ Idea ก่อนทำ Real Comparison

MongoDB (Atlas)

  • Ease of Use: MongoDB เป็น NoSQL/Document Store ยอดนิยม API Simple และ Intuitive ขอบคุณ JSON-based Data Model
  • Portability: เกือบทุก Cloud Providers มี MongoDB API Products รวมถึง Run MongoDB เอง On-premise ไม่มี Portability Issues
  • Serverless Database Type: MongoDB Atlas ประกาศ Serverless Database Type ใหม่ Impression ของผมคือเหมือน Hosted MongoDB Instance Under Serverless Pricing Model ดู ที่นี่ หลาย Features ไม่รองรับสำหรับ Serverless Database รวมถึง Node.js SDK (Update: MongoDB Atlas Launch HTTP-based Data API แล้ว)
  • Serverless Connections: MongoDB Atlas ไม่มี HTTP/REST API อาจ Hit Connection Limit ได้ง่าย นั่นคือเหตุผลที่พวกเขาเผยแพร่ Articles วิธีหลีกเลี่ยง https://docs.atlas.mongodb.com/best-practices-connecting-from-aws-lambda/

Cassandra (Datastax Astra)

  • Datastax Astra มี REST และ GraphQL API นอกจาก Native Cassandra Drivers
  • Ease of Use: สำหรับผม Cassandra เรียนยากกว่า MongoDB และ Redis แต่ Datastax Team ทำ Console ให้ Intuitive มาก แต่ยังหลงทางใน Docs ด้วย REST API Versions ต่างๆ
  • Developer Friendly Pricing: Pricing ของ Datastax Astra ไม่ Simple ทุก Unit คำนวณแยก (Reads, Writes, Bandwidth) ราคาต่างกันตาม Cloud Provider และ Region แม้ Datastax มี Definitions เองสำหรับ Read/Write Units (RRU และ WRU)

DynamoDB (AWS)

  • Ease of Use: หากคุณ User AWS เริ่มต้นและทำงานกับ DynamoDB ได้ง่าย แต่ผมคิดว่า MongoDB มี Query API ที่ง่ายและ Intuitive กว่า
  • Serverless Connections: DynamoDB Connections เป็น HTTP-based ไม่มี Connection Limit Problems
  • Portability: ปัญหาใหญ่สุดอยู่ที่นี่ ไม่สามารถใช้ DynamoDB ได้ที่ไหนนอกจาก AWS (Vendor Lock-in)

FaunaDB

  • Consistency: น่าจะดีที่สุดใน List นี้ Guaranties Consistency พร้อม Global Replication แต่ระวัง Extra Performance Costs พิจารณาว่าจำเป็นต้อง Strong Consistency จริงไหม
  • Performance: Latency สูงกว่าอื่นๆ ด้วย Strong Consistency
  • Ease of Use: ซื่อสัตย์ FQL ยากที่สุดใน List นี้ แต่ FaunaDB รองรับ GraphQL API อาจง่ายกว่า
  • Serverless Connections: ขอบคุณ HTTP-based Connection FaunaDB ไม่มี Connection Limit Problems

Upstash

  • Ease of Use: Redis น่าจะเป็น API ที่เรียนรู้ง่ายที่สุดใน List Upstash ทำให้ง่ายใน Cloud ด้วย Interface ที่ Intuitive และ Simple
  • Developer Friendly Pricing: Upstash Pricing แบบ Per-request มี Price-caps รับประกันว่าจะไม่จ่ายเกิน Predetermined Amount
  • Performance: ขอบคุณ Memory-based Storage Upstash ให้ Latency Numbers ดีที่สุด ดู ที่นี่ เพื่อความเข้าใจ
  • หากต้องการ Complex Query Capabilities (Joins ฯลฯ) Redis Data Structures อาจไม่ Practical อาจต้องการ Database ที่มี SQL Support ดีกว่า

Firestore

  • Ease of Use: Firestore เป็นหนึ่งในที่ดีที่สุดใน List นี้ UI และ API Intuitive มาก
  • Portability: เหมือน DynamoDB Firestore มี Vendor-lock Problem ดีตราบเท่าที่อยู่บน Google Cloud
  • Performance: ได้ยิน Complaints เกี่ยว Performance มาก่อน ผม Experience เอง Latency แย่กว่าอื่นๆ คู่กับ FaunaDB มี Question Mark อยู่

สรุป

ผมเชื่อว่า Serverless คือ Future of Development และมี Ongoing Transition ไป Serverless Serverless ช่วย Developers และ Small Companies สร้าง Scalable Products ด้วย Budget จำกัดมาก Databases ควรเป็นส่วนหนึ่งของ Transition นี้ด้วย Offerings ที่ Coherent กับ Serverless Principles