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

QStash: คิวข้อความและตัวจัดตารางงานแบบ Serverless

บทนำ

เรายินดีและตื่นเต้นที่จะประกาศ QStash 🔥🔥🔥

อย่างเป็นทางการ QStash คือคิวข้อความ (message queue) และตัวจัดตารางงาน (task scheduler) ที่ออกแบบมาสำหรับสภาพแวดล้อมการทำงานแบบ Serverless (serverless runtimes) อย่างไม่เป็นทางการ QStash คือ "กาว" สำหรับ serverless functions ของคุณ

ก่อนหน้านี้มีความเข้าใจว่า Serverless เหมาะแค่งานง่ายๆ แต่วันนี้ไม่เหมือนเดิมแล้ว มนุษย์สร้างระบบอันทรงพลังด้วย Serverless stack ระบบที่ทรงพลังประกอบด้วยหลายส่วนประกอบ การสื่อสารระหว่างส่วนประกอบเหล่านั้นเป็นปัญหาวิศวกรรมขนาดใหญ่ มีโซลูชันที่ดีอยู่แล้ว แตเราคิดว่าโซลูชันเดิมไม่ค่อยเข้ากับพื้นที่ Serverless มันซับซ้อนเกินไป หรือไม่ได้ออกแบบมาเพื่อทำงานกับสภาพแวดล้อม stateless ดังนั้นเราจึงต้องการโซลูชันที่:

  • ทำงานได้ทุกที่ รวมถึง Serverless และ Edge
  • Messaging as a service ไม่ต้องมี backend ให้ผู้ใช้รันเอง
  • เบา, เข้าใจง่าย, ไม่ต้องเรียนรู้อะไรเพิ่ม
  • ราคาขยายได้จนถึงศูนย์ (Price scales to zero)

มาพูดถึงตัวอย่างจริง เรามีแอปอีคอมเมิร์ซ และต้องการส่งอีเมลแจ้งเตือนหลังการซื้อทุกครั้ง เรามีบริการ (API route) สำหรับการซื้อใหม่ (newPurchase) และบริการที่สองสำหรับส่งอีเมลและแจ้งเตือน (sendEmail) เราสามารถเรียก sendEmail จาก newPurchase ได้ แต่ถ้าการเรียกล้มเหลว จะรอ response และ retry ไหม? ถ้าคำขอเยอะมากจน sendEmail ตอบสนองไม่ทัน จะทำไง? คุณต้องจัดการทุกกรณีใน newPurchase service อีกอย่าง หน้าที่การเปลี่ยนสัญญาของ sendEmail service คุณต้องอัปเดต newPurchase service ด้วย

หากใช้ QStash ในตัวอย่างข้างต้น คุณเพียงส่ง request ไป QStash จาก newPurchase service QStash จะคิว request และเรียก sendEmail service หาก service ไม่ตอบ QStash จะ retry ด้วยกลยุทธ์ backoff เลย์เทนซีของ sendEmail service จะไม่ส่งผลต่อ newPurchase service เพราะมันไม่ต้องรอ response จาก sendEmail QStash แยก (decouples) newPurchase และ sendEmail services คุณอัปเดตทั้งสอง services แยกกันได้ ตราบใดที่รูปแบบข้อความยังเข้ากันได้

กับ QStash คุณเพิ่ม delays ให้ request ได้ ส่งอีเมล 3 วันหลังจัดส่ง เพื่อเตือนลูกค้าให้รีวิว คุณยังจัดตารางงานได้ ส่ง request ด้วย CRON expression เพื่อรันซ้ำๆ

QStash: คิวข้อความและตัวจัดตารางงานแบบ Serverless

ตอนนี้มาดูฟีเจอร์ของ QStash แบบสรุป:

ทำงานได้ทุกที่ (Works Anywhere)

แทน messaging แบบ pull-based แบบเดิมที่ต้องการกระบวนการทำงานนาน (long-running process) เพื่อ consume จากคิว QStash ส่งข้อความแบบ push ไปที่ API ของคุณ ทำให้คุณใช้ serverless functions ประมวลผลได้ เราจัดการ retries, custom delays และ scheduling ให้ คุณต้องการแค่ HTTP API ที่เข้าถึงสาธารณะได้

ราคาขยายได้จนถึงศูนย์ (Price Scales to Zero)

ราคา QStash คือ $1 ต่อ 100,000 requests จุดดีคือไม่มีขั้นต่ำหรือค่าคงที่ คุณจ่ายแค่สิ่งที่ใช้ หากคาดว่ามี request หลายล้าน เรามีแผน enterprise ที่ราคาต่อ request ต่ำกว่า

อัปเดต - กันยายน 2022

เราลดราคา QStash เหลือ $1 ต่อ 100K requests ดูหน้าราคา QStash สำหรับข้อมูลล่าสุด

Endpoints และ Topics

คุณใส่ endpoint พร้อมข้อความส่งไป QStash QStash จะส่งข้อความไป endpoint นั้น คุณยังกำหนด topic ได้ ซึ่งรวม endpoint หนึ่งหรือหลายอันเป็น namespace เดียว ด้วยการ abstraction ของ topic คุณแก้ไข endpoints ได้โดยไม่ต้องแก้ backend implementation ตัวอย่างด้านล่างส่ง request ไป topic user-apis สำเนาของข้อความจะถูกส่งไปทุก endpoint

ส่งไปยัง endpoint
curl -XPOST \
 "https://qstash.upstash.io/v1/publish/https://example.com" \
 -H "Authorization: Bearer XXX" \
 -H "Content-Type: application/json" \
 -d "{ \"hello\" : \"world\" }"
ส่งไปยัง topic
curl -XPOST \
 "https://qstash.upstash.io/v1/publish/user-apis" \
 -H "Authorization: Bearer XXX" \
 -H "Content-Type: application/json" \
 -d "{ \"hello\" : \"world\" }"

ตารางเวลา (Schedules)

QStash สามารถส่งงานซ้ำตามตารางเวลาได้ ตั้งค่า CRON expression เป็นค่าใน header Upstash-Cron ตัวอย่างด้านล่างสั่ง QStash เรียก API ทุกนาที

curl -XPOST \
 'https://qstash.upstash.io/v1/publish/https://example.com' -H 'Authorization: Bearer XXX' \
 -H "Content-type: application/json" \
 -H "Upstash-Cron: * * * * *" \
 -d '{ "hello": "world" }' \

เพิ่มเติม (More)

  • Retries: หาก API ของคุณไม่ตอบด้วย status code สำเร็จ QStash จะ retry request เพื่อให้ข้อความทุกข้อความถูกส่งถึง
  • Delays: หน่วงเวลาส่งข้อความได้สูงสุด 90 วัน
  • Deduplication: ป้องกันข้อความซ้ำด้วย Deduplication-Id หรือ deduplication แบบอัตโนมัติจากเนื้อหา
  • Request signing: API ของคุณต้องเป็น public คุณตรวจสอบความถูกต้องของแต่ละ request เข้ามาโดยการ verify signature
  • JS/TS SDK: REST API เรียบง่าย แต่ถ้าคุณสร้างบน JS/TS SDK ของเราง่ายกว่านี้

คำปิดท้าย

QStash มุ่งมั่นให้บริการ messaging ที่ดีที่สุดสำหโลก Serverless นี่คือ release แรกของเรา จึงต้องการ feedback และการมีส่วนร่วมจากคุณมาก อ่านเอกสาร QStash ติดต่อเราบน Discord และ Twitter เพื่อความคิดเห็นและข้อเสนอแนะ..