สถาปัตยกรรมที่เน้น Firebase เป็นศูนย์กลาง

นี่เป็นคำถามทางสถาปัตยกรรม

ขณะนี้ฉันกำลังอยู่ในกระบวนการออกแบบเว็บแอปพลิเคชัน และฉันคุ้นเคยกับพื้นฐานแล้ว: ฟรอนต์เอนด์, API, ฐานข้อมูล, การตั้งค่าไมโครเซอร์วิส

เพื่อประหยัดเงินและทำให้สถาปัตยกรรมของฉันดูทันสมัยกว่าที่ฉันเคยคุ้นเคยเล็กน้อย ฉันจึงตัดสินใจพิจารณาระบบไร้เซิร์ฟเวอร์

สองส่วนหลักที่ฉันสนใจคือฟังก์ชันของ Google Cloud และ Firebase ความเข้าใจของฉันคือฟังก์ชัน Google Cloud สามารถเริ่มทำงานได้เมื่อมีการจัดการรายการฐานข้อมูลใน firebase

วิธีที่ฉันเคยสื่อสารระหว่างบริการต่างๆ คือผ่านคิวข้อความ เช่น RabbitMQ แต่สำหรับฉันแล้วดูเหมือนว่าการใช้ฟังก์ชัน firebase และคลาวด์จะทำให้คุณสามารถสร้างการสื่อสารผ่านฐานข้อมูลได้โดยไม่ต้องใช้คิวข้อความ สิ่งที่ฉันหมายถึงโดยการสื่อสารในกรณีนี้ก็คือบริการหนึ่งจะสามารถตอบสนองต่อการทำงานของบริการอื่นโดยเห็นว่ารายการในฐานข้อมูลมีการเปลี่ยนแปลง

คำถามของฉันคือ อะไรคือข้อดีและข้อเสียของการปล่อยให้การสื่อสารทั้งหมดของคุณระหว่างไมโครเซอร์วิสทำงานผ่าน firebase แทนที่จะเป็นคิวข้อความ และนี่คือสถาปัตยกรรมที่ใช้โดยทั่วไปหรือไม่


person Alex Haller    schedule 31.12.2020    source แหล่งที่มา


คำตอบ (1)


AFAIK ทริกเกอร์ฟังก์ชันคลาวด์เป็นคุณลักษณะเบต้าใน Firebase และเป็นไปตามเอกสาร มีข้อจำกัดบางประการสำหรับเหตุการณ์ทริกเกอร์ firestore:

  • ฟังก์ชันอาจใช้เวลาถึง 10 วินาทีในการตอบสนองต่อการเปลี่ยนแปลงใน Cloud Firestore
  • ไม่รับประกันการสั่งซื้อ การเปลี่ยนแปลงอย่างรวดเร็วสามารถทริกเกอร์การเรียกใช้ฟังก์ชันในลำดับที่ไม่คาดคิดได้
  • มีการจัดกิจกรรมอย่างน้อยหนึ่งครั้ง แต่เหตุการณ์เดียวอาจส่งผลให้เกิดการเรียกใช้ฟังก์ชันหลายรายการ หลีกเลี่ยงการขึ้นอยู่กับกลไกเพียงครั้งเดียว และเขียนฟังก์ชัน idempotent
  • ทริกเกอร์ Cloud Firestore สำหรับ Cloud Functions ใช้งานได้กับ Cloud Firestore ในโหมดดั้งเดิมเท่านั้น ไม่พร้อมใช้งานสำหรับ Cloud Firestore ในโหมด Datastore

ข้อจำกัดที่เกี่ยวข้องมากที่สุดในที่นี้คือข้อแรก การอัปเดต 10 วินาทีถือเป็นเวลาที่ยาวนานหากคุณต้องการให้ผู้ใช้มองเห็นการอัปเดตนั้น

ข้อเสียอีกประการหนึ่งที่ฉันเห็นคือมันอาจจะควบคุมไม่ได้ (ในแง่ของการออกแบบระบบ) เมื่อความซับซ้อนเพิ่มขึ้น คุณอาจถูกล่อลวงให้เพิ่มกิจกรรมสำหรับทุกสิ่ง และอาจเป็นเรื่องยากที่จะแบ่งพาร์ติชันตามหมวดหมู่ ตัวอย่างเช่น (ในคิวข้อความ คุณสามารถใช้หัวข้อสำหรับสิ่งนั้นได้)

นอกจากนี้ ตามdoc ฟังก์ชันคลาวด์มีการจำกัดอัตราไว้ที่ 16 การเรียกใช้ต่อ 100 ครั้ง วินาที ซึ่งอาจเข้าถึงได้อย่างรวดเร็วหากคุณมีปริมาณการเข้าชมแอปของคุณ

ฉันจะใช้เหตุการณ์ทริกเกอร์สำหรับสถานการณ์ที่แยกออกมา และใช้คิวข้อความสำหรับการสื่อสารแกนหลักระหว่างไมโครเซอร์วิส

person Cosmin Ioniță    schedule 01.01.2021