ฉันกำลังพิจารณาที่จะย้าย REST API แบบเสาหินไปยังสถาปัตยกรรม microservice และฉันสับสนเล็กน้อยเกี่ยวกับที่เก็บข้อมูล ตามที่ฉันเห็นประโยชน์บางประการของ microservices คือ:
- ปรับขนาดได้ในแนวนอน - ฉันสามารถเรียกใช้สำเนาบริการซ้ำซ้อนหลายชุดเพื่อจัดการกับโหลดและ / หรือเซิร์ฟเวอร์หยุดทำงาน
- การเชื่อมโยงอย่างหลวม - ฉันสามารถเปลี่ยนการใช้งานภายในของไมโครไซต์โดยไม่ต้องเปลี่ยนไมโครซอฟท์และฉันสามารถปรับใช้และเปลี่ยนแปลงได้อย่างอิสระ ...
ปัญหาของฉันอยู่ที่การจัดเก็บข้อมูล เท่าที่ฉันเห็นมันมีหลายตัวเลือก:
- บริการฐานข้อมูลเดียวที่ใช้ร่วมกันโดย microservices ทั้งหมด - นี่ดูเหมือนจะขจัดข้อได้เปรียบของการมีเพศสัมพันธ์แบบหลวม ๆ อย่างสมบูรณ์
- อินสแตนซ์ฐานข้อมูลที่ติดตั้งในเครื่องบนไมโครไซต์แต่ละบริการ - ฉันไม่เห็นวิธีการปรับขนาดแนวนอนดังนั้นฉันไม่คิดว่ามันจะเป็นตัวเลือก
- microservice แต่ละตัวมีบริการฐานข้อมูลของตัวเอง - ซึ่งเป็นวิธีที่มีแนวโน้มมากที่สุดเนื่องจากจะรักษาประโยชน์ของข้อต่อหลวมและการขยายตามแนวนอน (โดยใช้สำเนาฐานข้อมูลที่ซ้ำซ้อนและ / หรือทำให้เกิดปัญหาหลายอย่าง)
สำหรับฉันตัวเลือกที่สามน่าจะเป็นตัวเลือกเดียว แต่ดูเหมือนว่าฉันจะมีน้ำหนักมากอย่างไม่น่าเชื่อและเป็นวิธีแก้ปัญหาที่มีการปรับแก้มากเกินไป ถ้าฉันเข้าใจถูกต้องแล้วสำหรับแอปพลิเคชันธรรมดาที่มี 4-5 microservices ฉันต้องใช้เซิร์ฟเวอร์ 16-20 - สองอินสแตนซ์ microservice จริงสองต่อ microservice (ในกรณีที่เซิร์ฟเวอร์ล้มเหลวและสำหรับการปรับใช้โดยไม่ต้องหยุดทำงาน) และ อินสแตนซ์ของบริการฐานข้อมูลสองรายการต่อ microservice (ในกรณีที่เซิร์ฟเวอร์ล้มเหลว ฯลฯ ... )
นี่ค่อนข้างตรงไปตรงมาดูเหมือนไร้สาระเล็กน้อย เซิร์ฟเวอร์ 16-20 เครื่องใช้งาน API อย่างง่ายโดยจำไว้ว่าโครงการจริงอาจจะมีบริการมากกว่า 4-5 เครื่อง? มีแนวคิดพื้นฐานที่ฉันขาดหายไปที่จะอธิบายเรื่องนี้หรือไม่?
บางสิ่งที่อาจช่วยได้ในขณะตอบรับ:
- ฉันเป็นผู้พัฒนาเพียงผู้เดียวในโครงการนี้และจะเป็นในอนาคตอันใกล้
- ฉันใช้ Node.js และ MongoDB แต่ฉันสนใจคำตอบที่ไม่เชื่อเรื่องภาษา - คำตอบอาจเป็นได้ว่าฉันแค่ใช้เทคโนโลยีที่ผิด!