ทำไมเราถึงต้องใช้มัน?
ประโยชน์มหาศาลของการบริการไมโครซอฟท์และที่สำคัญกว่านั้นคือ SOA ซึ่งเป็นระดับสูงของการทำ internals ไม่ใช่แค่การนำไปใช้ แต่ยังรวมถึงเทคโนโลยีที่ใช้ ตัวอย่างเช่นหากระบบได้รับการพัฒนาในรูปแบบห้า microservices โดยห้าทีมทีมหนึ่งสามารถตัดสินใจที่จะย้ายไปกองเทคโนโลยีที่แตกต่างอย่างสิ้นเชิง (ตัวอย่างเช่นจาก Microsoft stack to LAMP) โดยไม่ต้องขอความเห็นจากทีมอื่น
ดูที่ Amazon AWS หรือ Twilio คุณรู้หรือไม่ว่าบริการของพวกเขามีการใช้งานใน Java หรือ Ruby? พวกเขาใช้ Oracle หรือ PostgreSQL หรือ Cassandra หรือ MongoDB หรือไม่ พวกเขาใช้เครื่องจักรกี่เครื่อง? คุณสนใจเรื่องนั้นไหม ตัวเลือกด้านเทคโนโลยีเหล่านั้นมีผลกระทบต่อวิธีการใช้บริการเหล่านั้นหรือไม่ ... และที่สำคัญถ้าพวกเขาย้ายไปยังฐานข้อมูลอื่นคุณจะต้องเปลี่ยนแอปพลิเคชันไคลเอนต์ของคุณหรือไม่
ตอนนี้จะเกิดอะไรขึ้นถ้าบริการสองรายการใช้ฐานข้อมูลเดียวกัน นี่เป็นส่วนเล็ก ๆ ของปัญหาที่อาจเกิดขึ้น:
บริการการพัฒนาทีม 1 ต้องการย้ายจาก SQL Server 2012 ไปเป็น SQL Server 2016 อย่างไรก็ตามทีม 2 อาศัยคุณลักษณะที่เลิกใช้ซึ่งถูกลบออกใน SQL Server 2016
บริการ 1 คือความสำเร็จที่ยิ่งใหญ่ การโฮสต์ฐานข้อมูลบนเครื่องสองเครื่อง (master และ failover) ไม่ใช่ตัวเลือกอีกต่อไป แต่การปรับขนาดคลัสเตอร์เป็นหลาย ๆ เครื่องจำเป็นต้องใช้กลยุทธ์เช่นการแยกส่วน ในขณะเดียวกันทีม 2 มีความสุขกับขนาดปัจจุบันและไม่เห็นเหตุผลที่จะย้ายไปทำอะไรอย่างอื่น
บริการ 1 ควรย้ายไปที่ UTF-8 เป็นการเข้ารหัสเริ่มต้น อย่างไรก็ตามบริการ 2 มีความสุขเมื่อใช้รหัส Page 1252 Windows Latin 1
บริการ 1 ตัดสินใจเพิ่มผู้ใช้ที่มีชื่อเฉพาะ อย่างไรก็ตามผู้ใช้นี้มีอยู่แล้วสร้างทีมสองสามเดือนที่ผ่านมา
บริการ 1 ต้องการคุณสมบัติที่แตกต่างมากมาย บริการ 2 เป็นองค์ประกอบที่สำคัญอย่างยิ่งและจำเป็นต้องมีคุณสมบัติฐานข้อมูลอย่างน้อยที่สุดเพื่อลดความเสี่ยงของการถูกโจมตี
บริการ 1 ต้องการพื้นที่ดิสก์ 15 TB; ความเร็วไม่สำคัญดังนั้นฮาร์ดดิสก์ทั่วไปจึงใช้ได้อย่างสมบูรณ์ บริการ 2 ต้องการมากที่สุด 50 GB แต่ต้องการเข้าถึงเร็วที่สุดเท่าที่จะเป็นไปได้หมายความว่าข้อมูลควรเก็บไว้ใน SSD
...
ทุกทางเลือกน้อยส่งผลกระทบต่อทุกคน การตัดสินใจทุกครั้งต้องได้รับความร่วมมือจากทุก ๆ ทีม จะต้องมีการประนีประนอม เปรียบเทียบกับอิสรภาพที่สมบูรณ์เพื่อทำสิ่งที่คุณต้องการในบริบทของ SOA
มันเกินไป [... ] ไม่สามารถจัดการได้
ถ้าอย่างนั้นคุณก็ทำผิด ฉันคิดว่าคุณกำลังปรับใช้ด้วยตนเอง
นี่ไม่ใช่สิ่งที่ควรทำ คุณต้องทำการปรับใช้เครื่องเสมือนอัตโนมัติ (หรือคอนเทนเนอร์ Docker) ซึ่งเรียกใช้ฐานข้อมูลโดยอัตโนมัติ เมื่อคุณดำเนินการอัตโนมัติการปรับใช้เซิร์ฟเวอร์สองเครื่องหรือเซิร์ฟเวอร์ยี่สิบเครื่องหรือเซิร์ฟเวอร์สองพันเครื่องไม่แตกต่างกันมาก
สิ่งมายากลเกี่ยวกับฐานข้อมูลที่แยกได้คือว่ามันสามารถจัดการได้อย่างมาก คุณได้ลองจัดการฐานข้อมูลขนาดใหญ่ที่ใช้โดยทีมหลายสิบทีมหรือไม่? มันเป็นฝันร้าย ทุกทีมมีคำขอเฉพาะและทันทีที่คุณสัมผัสบางสิ่งมันจะส่งผลกระทบต่อใครบางคน ด้วยฐานข้อมูลที่จับคู่กับแอปขอบเขตจะแคบมากซึ่งหมายความว่ามีอะไรที่คิดมากน้อยลง
หากฐานข้อมูลขนาดใหญ่ต้องมีผู้ดูแลระบบเฉพาะฐานข้อมูลที่ใช้โดยเฉพาะทีมใดทีมหนึ่งสามารถเป็นหลักได้รับการจัดการโดยทีมงานนี้ (DevOps เป็นยังเกี่ยวกับที่) พ้นเวลาที่ผู้ดูแลระบบ
มันแพงเกินไป
กำหนดต้นทุน
ต้นทุนใบอนุญาตขึ้นอยู่กับฐานข้อมูล ในยุคของคลาวด์คอมพิวติ้งผมค่อนข้างมั่นใจว่าผู้เล่นรายใหญ่ทุกคนออกแบบใบอนุญาตใหม่เพื่อรองรับบริบทที่แทนที่จะเป็นฐานข้อมูลขนาดใหญ่เพียงแห่งเดียว ถ้าไม่คุณอาจพิจารณาย้ายไปยังฐานข้อมูลอื่น ยังมีโอเพ่นซอร์สอีกมาก
หากคุณกำลังพูดถึงพลังการประมวลผลทั้งเครื่องเสมือนและตู้บรรจุนั้นเป็นมิตรกับ CPU และฉันจะไม่ยืนยันว่าฐานข้อมูลขนาดใหญ่เพียงแห่งเดียวจะใช้ CPU น้อยกว่าคนตัวเล็ก ๆ ที่ทำงานเดียวกัน
หากปัญหาของคุณคือหน่วยความจำแสดงว่าเครื่องเสมือนไม่ใช่ตัวเลือกที่ดีสำหรับคุณ ภาชนะบรรจุคือ คุณจะสามารถขยายได้มากเท่าที่คุณต้องการโดยรู้ว่าพวกเขาจะไม่กิน RAM มากกว่าที่จำเป็น ในขณะที่ปริมาณการใช้หน่วยความจำทั้งหมดจะสูงขึ้นสำหรับฐานข้อมูลขนาดเล็กจำนวนมากเมื่อเทียบกับฐานข้อมูลขนาดใหญ่เดี่ยวฉันคิดว่าความแตกต่างจะไม่สำคัญเกินไป YMMV