การออกแบบแพลตฟอร์ม: ฐานข้อมูลเดียวหรือหลายฐานข้อมูล?


31

เรากำลังสร้างแพลตฟอร์มเว็บที่รวมบริการหลายอย่างแต่ละรายการมีข้อมูลอ้างอิงของตนเอง บริการเหล่านี้ถูกสร้างขึ้นอย่างอิสระตามหลักการของService-Oriented Architectureแต่ทำธุรกรรมกับข้อมูลที่อาจเกี่ยวข้อง เรากำลังพิจารณาว่าบริการเหล่านี้ควรแบ่งปันฐานข้อมูลขนาดใหญ่หนึ่งฐานหรือแต่ละแห่งมีฐานข้อมูลของตนเอง (เราวางแผนที่จะใช้ SQL Server 2008 Enterprise ในคลัสเตอร์ Windows 2008)

ข้อดีบางประการสำหรับแต่ละวิธีที่เราพิจารณาแล้วรวมถึง:

ฐานข้อมูลเดียว

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

หลายฐานข้อมูล

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

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


คุณตัดสินใจเลือกอะไร
Frank Visaggio

@BobSinclar - เมื่อไม่นานมานี้ แต่เราก็ลงเอยด้วยฐานข้อมูลหลาย ๆ
Nick Chammas

สคีมาเปลี่ยนแปลงได้ยากขึ้นหรือไม่? สมมติว่าคุณต้องอัปเดตสคีมาของทุกฐานข้อมูล
Frank Visaggio

@BobSinclar - ฉันไม่ใช่สิ่งที่คุณถาม เมื่อใดที่คุณจะต้องอัปเดตสคีมาของทุกฐานข้อมูลพร้อมกันหากคุณสร้างแพลตฟอร์มตามหลักการของ SOA ควรมีระบบที่แตกต่างกันอย่างอิสระ
Nick Chammas

ฉันรู้มาพักหนึ่งแล้ว แต่คุณต้องการแบ่งปันฐานข้อมูลต่างๆที่คุณเลือกและเหตุผลหรือไม่
azngunit81

คำตอบ:


18

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

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

ฉันขอแนะนำให้อ่านไซต์ต่าง ๆ เช่นHighScalability.comซึ่งขุดเข้าไปในสถาปัตยกรรมที่เป็นลูกบุญธรรมของเว็บไซต์ประเภทไม่เคยล้มเหลว หนึ่งในรายการโปรดของฉันของสายเป็นเรื่องของNetflix โกลาหลลิงซึ่งได้รับการกล่าวถึงในการเข้ารหัสสยองขวัญ

พูดถึงประเด็นต่างๆในคำถามของคุณ:

ในกรณีที่เกิดภัยพิบัติการกู้คืนแพลตฟอร์มให้อยู่ในสถานะที่สอดคล้องกันนั้นง่ายขึ้น

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

สำหรับข้อมูลที่อ้างอิงโดยบริการหลาย ๆ บริการข้อมูลที่ถูกแคชโดยบริการหนึ่งมีแนวโน้มที่จะถูกใช้ในไม่ช้าหลังจากบริการอื่น

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

สมมติว่าแต่ละฐานข้อมูลอยู่บนฮาร์ดแวร์ที่แยกจากกันการขยายขนาดจะให้ประโยชน์ด้านประสิทธิภาพมากขึ้น

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

หากนี่ไม่ใช่ SOA และคุณมีกรณีที่บริการส่วนประกอบของแพลตฟอร์มนี้ถูกสร้างขึ้นโดยทีมงาน / ซัพพลายเออร์ที่แตกต่างกันด้วยเหตุผลด้านลอจิสติกติดฐานข้อมูลเดียวและไม่สนใจทุกอย่างที่กล่าวมาข้างต้น! :)


ข้อดีของการแก้ปัญหาแคชแบบกระจาย ด้วยการแคชที่ระดับ SAN หรือฐานข้อมูลอย่างไรก็ตามนี่ไม่ใช่ปัญหา คุณได้รับสิทธิประโยชน์แคชเนื่องจากโทโพโลยีการปรับใช้ของคุณ (เช่นบริการที่แตกต่างกันเกิดขึ้นเพื่อแบ่งปันฮาร์ดแวร์เดียวกัน) และไม่ใช่เนื่องจากการสื่อสารโดยตรงระหว่างบริการเช่นเดียวกับ memcached
Nick Chammas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.