วิธีจัดการกับข้อ จำกัด กุญแจต่างประเทศเมื่อทำการย้ายจากก้อนหินใหญ่ไปเป็นไมโครเซอร์วิซ?


18

ทีมของฉันกำลังย้ายจากแอปพลิเคชัน ASP.NET แบบเสาหินไปยัง. NET Core และ Kubernetes การเปลี่ยนแปลงรหัสดูเหมือนจะเป็นไปตามคาด แต่ทีมของฉันกำลังเผชิญกับความไม่ลงรอยกันอยู่รอบฐานข้อมูล

ขณะนี้เรามีฐานข้อมูล SQL Server ค่อนข้างใหญ่ที่รวบรวมข้อมูลทั้งหมดสำหรับธุรกิจทั้งหมดของเรา ฉันเสนอให้เราแยกฐานข้อมูลในลักษณะที่คล้ายคลึงกับการแยกรหัส - ข้อมูลแคตตาล็อกในฐานข้อมูลหนึ่ง (ตรรกะ) ข้อมูลสินค้าคงคลังในอีกคำสั่งซื้อในอื่นและอื่น ๆ - และแต่ละ microservice จะเป็นผู้ดูแลฐานข้อมูลของมัน .

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

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

สิ่งนี้นำมาสู่คำถามของฉัน ก่อนอื่นท่าทางของฉันเกี่ยวกับข้อ จำกัด ของคีย์ต่างประเทศและเข้าร่วมเป็นไปได้หรือไม่ ถ้าเป็นเช่นนั้นมีใครรู้บ้างเกี่ยวกับวัสดุการอ่านที่น่าเชื่อถือที่ฉันสามารถเสนอให้เพื่อนร่วมงานของฉันได้หรือไม่? ตำแหน่งของพวกเขาเกือบจะเป็นศาสนาและพวกเขาดูเหมือนว่าพวกเขาจะถูกครอบงำด้วยอะไรก็ตามที่สั้น ๆ ของ Martin Fowler เขาบอกพวกเขาว่าพวกเขาผิด


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

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

3
ฉันแน่ใจว่าคุณเป็นลูกค้าที่จะตื่นเต้นที่ได้รับคำสั่งยกเลิกเร็วกว่า 0.05ms เพราะมีคนอื่นสั่งผลิตภัณฑ์เดียวกันเมื่อมีสินค้าเหลืออยู่เพียงตัวเดียว
แอนดี้

@amon ให้คำตอบนี้แล้วฉันจะโหวตขึ้น นี่เป็นคำถามที่ดีและข้อดีและข้อเสียจะต้องแสดงอย่างเป็นธรรม
mcottle

@cottle ตกลงเรียบร้อยแล้ว!
amon

คำตอบ:


19

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

คำตอบนี้ (น่าเสียดายที่ค่อนข้างยาว) จะอ่านเล็กน้อยเช่น“ microservices นั้นไม่ดี monoliths ตลอดชีวิต!” แต่นั่นไม่ใช่ความตั้งใจของฉัน ประเด็นของฉันคือ microservices และฐานข้อมูลแบบกระจายสามารถแก้ปัญหาต่าง ๆ ได้ แต่ไม่ใช่โดยไม่มีปัญหาของตัวเอง เพื่อให้การโต้แย้งที่แข็งแกร่งสำหรับสถาปัตยกรรมของคุณคุณต้องแสดงให้เห็นว่าปัญหาเหล่านี้ไม่ได้ใช้สามารถบรรเทาและสถาปัตยกรรมนี้เป็นตัวเลือกที่ดีที่สุดสำหรับความต้องการทางธุรกิจของคุณ

ข้อมูลที่แจกจ่ายเป็นเรื่องยาก

ความยืดหยุ่นเช่นเดียวกับที่ช่วยให้การปรับขนาดที่ดีขึ้นเป็นด้านพลิกของการรับประกันที่อ่อนแอ โดยเฉพาะอย่างยิ่งระบบกระจายที่ให้เหตุผลได้ยากกว่ามาก

การอัปเดตการทำธุรกรรมของอะตอมความสอดคล้อง / ความสมบูรณ์ของการอ้างอิงและความทนทานเป็นสิ่งที่มีค่าอย่างยิ่งและไม่ควรได้รับการหลีกเลี่ยง มีจุดเล็ก ๆ น้อย ๆ ในการมีข้อมูลหากข้อมูลไม่สมบูรณ์ล้าสมัยหรือผิดพลาด เมื่อคุณมี ACID เป็นความต้องการทางธุรกิจ แต่กำลังใช้เทคโนโลยีฐานข้อมูลที่ไม่สามารถให้ได้นอกกรอบ (เช่นฐานข้อมูล NoSQL จำนวนมากหรือสถาปัตยกรรม DB-per-microservice) ดังนั้นแอปพลิเคชันของคุณจะต้องเติมช่องว่างและให้การรับรองเหล่านั้น

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

    ตัวอย่างเช่นพิจารณาอ่านJepsen วิเคราะห์ที่รู้จักกันดีระบบฐานข้อมูลแบบกระจายอาจจะเริ่มต้นด้วยการวิเคราะห์คาสซานดรา ฉันไม่เข้าใจว่าครึ่งหนึ่งของการวิเคราะห์นั้น แต่ TL; DR คือระบบการกระจายนั้นยากมากที่บางครั้งแม้แต่โครงการชั้นนำในอุตสาหกรรมก็ทำให้พวกเขาเข้าใจผิด

  • ระบบกระจายยังหมายถึงความพยายามในการพัฒนาที่ใหญ่ขึ้น ในระดับหนึ่งมีการแลกเปลี่ยนโดยตรงระหว่างค่าใช้จ่ายในการพัฒนาหรือลดเงินในฮาร์ดแวร์ที่มีเนื้อวัว

ตัวอย่าง: การอ้างอิงห้อย

ในทางปฏิบัติคุณไม่ควรมองศาสตร์วิทยาการคอมพิวเตอร์ แต่ในความต้องการทางธุรกิจของคุณเพื่อดูว่ากรดสามารถผ่อนคลายได้หรือไม่ เช่นความสัมพันธ์ระหว่างประเทศกับต่างประเทศอาจไม่สำคัญเท่าที่ควร พิจารณาความสัมพันธ์ของผลิตภัณฑ์ - หมวดหมู่ n: m ใน RDBMS เราอาจใช้ข้อ จำกัด foreign-key เพื่อให้เฉพาะผลิตภัณฑ์ที่มีอยู่และหมวดหมู่ที่มีอยู่สามารถเป็นส่วนหนึ่งของความสัมพันธ์นั้นได้ จะเกิดอะไรขึ้นถ้าเราแนะนำบริการผลิตภัณฑ์และหมวดหมู่แยกต่างหากและผลิตภัณฑ์หรือหมวดหมู่ถูกลบไปแล้ว

ในกรณีนี้อาจไม่ใช่ปัญหาใหญ่และเราสามารถเขียนแอปพลิเคชันของเราเพื่อกรองผลิตภัณฑ์หรือหมวดหมู่ที่ไม่มีอยู่อีกต่อไป แต่มีข้อเสียคือ!

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

  • ซึ่งสามารถยุ่งกับเลขหน้า เช่นคุณขอผลิตภัณฑ์ 25 รายการถัดไปจากหมวดหมู่และกรองผลิตภัณฑ์ที่ไม่พร้อมใช้งานออกจากคำตอบนั้น ตอนนี้แอปพลิเคชันของคุณแสดง 23 ผลิตภัณฑ์ ในทางทฤษฎีแล้วจะสามารถใช้หน้าเว็บที่มีผลิตภัณฑ์เป็นศูนย์ได้!

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

  • สิ่งนี้ควรชัดเจน แต่เพื่อความชัดเจน: ห้ามนำ ID ซ้ำมาใช้ รหัสประจำตัวสไตล์อัตโนมัติอาจเป็นหรือไม่ก็ได้ GUID หรือแฮชให้ความยืดหยุ่นแก่คุณมากขึ้นเช่นโดยสามารถกำหนด ID ก่อนที่รายการจะถูกแทรกลงในฐานข้อมูล

ตัวอย่าง: คำสั่งซื้อพร้อมกัน

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

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

แต่อาจไม่ใช่ตัวเลือกเช่นสำหรับการตั้งค่าพร้อมกันสูง พิจารณาคน 3,000 คนที่รีบซื้อตั๋วคอนเสิร์ตภายใน 10 วินาทีแรกและสมมติว่าการเปลี่ยนแปลงความพร้อมใช้งานนั้นจะต้องใช้เวลา 10ms ในการเผยแพร่ ความน่าจะเป็นในการขายตั๋วใบสุดท้ายให้กับคนหลายคนเป็นเท่าไหร่? ขึ้นอยู่กับวิธีการจัดการการชนเหล่านั้น แต่ใช้การแจกแจงแบบปัวซงด้วยλ = 3000 / (10s / 10ms) = 3เราจะได้รับP(k > 1) = 1 - P(k = 0) - P(k = 1) = 80%โอกาสในการชนกันต่อช่วงเวลา 10 มิลลิวินาที ไม่ว่าจะขายและยกเลิกคำสั่งซื้อส่วนใหญ่ของคุณในภายหลังเป็นไปได้โดยไม่กระทำการทุจริตอาจนำไปสู่การสนทนาที่น่าสนใจกับฝ่ายกฎหมายของคุณ

ลัทธินิยมนิยมหมายถึงการเลือกสรรเชอร์รี่ที่ดีที่สุด

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

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

คุณสามารถปรับขนาดได้โดยไม่ต้องใช้ไมโครไซต์

Microservices มีประโยชน์สองประการที่สำคัญ:

  • ผลประโยชน์ขององค์กรที่พวกเขาสามารถพัฒนาและปรับใช้อย่างอิสระโดยทีมงานแยกต่างหาก (ซึ่งจะต้องใช้บริการเพื่อให้อินเทอร์เฟซที่มีเสถียรภาพ)
  • ประโยชน์ในการดำเนินงานว่าแต่ละ MICROSERVICE สามารถปรับขนาดได้อย่างอิสระ

หากไม่จำเป็นต้องปรับสเกลอิสระ microservices น่าสนใจน้อยกว่ามาก

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

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

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

คุณมีกรณีธุรกิจที่แข็งแกร่งหรือไม่?

คุณตระหนักถึงความต้องการทางธุรกิจขององค์กรของคุณและสามารถสร้างอาร์กิวเมนต์สำหรับสถาปัตยกรรมฐานข้อมูลต่อการให้บริการโดยอ้างอิงจากการวิเคราะห์:

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

ในทางกลับกันหากคุณไม่สามารถแสดงสิ่งนี้ได้โดยเฉพาะอย่างยิ่งหากการออกแบบฐานข้อมูลปัจจุบันสามารถรองรับสเกลที่เพียงพอในอนาคตได้

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


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

1
@alan ขั้นตอนการจัดเก็บสามารถใช้งานได้ดี แต่มีปัญหาด้านประสิทธิภาพสองประการ: (1) การสืบค้นที่ซับซ้อนมากขึ้นยากสำหรับฐานข้อมูลในการปรับให้เหมาะสม (2) การใช้ sprocs หมายถึงการทำงานบนเซิร์ฟเวอร์ฐานข้อมูลได้มากขึ้น OP ต้องการแยกฐานข้อมูลเพื่อเพิ่มขนาด แต่การหลีกเลี่ยง sprocs ที่ซับซ้อนอาจให้พื้นที่ว่างนั้น แน่นอนว่า sprocs และการสืบค้นที่ซับซ้อนนั้นยังสามารถนำไปใช้ในการปฏิบัติงานได้เช่นเมื่อพวกเขาลดจำนวนข้อมูลที่ต้องถูกถ่ายโอนออกจากฐานข้อมูลเพื่อการตอบแบบสอบถาม การแยกฐานข้อมูลจะทำให้ปัญหานั้นแย่ลงเมื่อจำเป็นต้องใช้การเข้าร่วมข้ามเซิร์ฟเวอร์
amon

0

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


-1

ท่าทางของคุณน่าเชื่อถือและถูกต้อง

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

  1. ค้นหาตัวอย่างที่ชัดเจนที่ฐานข้อมูลมีค่าถึงขีด จำกัด คุณมี 'ตารางเก็บถาวร' เป็นตัวอย่างหรือไม่? ทำไมถึงตกลง จำนวนคำสั่งซื้อสูงสุดต่อวินาทีที่คุณสามารถทำได้คือเท่าไหร่? ฯลฯ แสดงว่า DB ไม่ตรงตามข้อกำหนดและโซลูชันของคุณแก้ไขได้

  2. จ้างผู้รับเหมาที่มีราคาแพงเพื่อมาบอกทางออกที่ดีที่สุด เพราะพวกเขาเป็นค่าใช้จ่ายและมีบล็อกทุกคนจะเชื่อพวกเขา


1
ฉันไม่ใช่ -1 แต่นี่เป็นคำตอบที่ดีฉันจะเสียจุดที่ 2 และขยายตัวเมื่อมันเหมาะสมที่จะต้องใช้ฐานข้อมูลหลายตัว ฉันไม่คิดว่าตารางเก็บถาวรจำเป็นต้องเป็น antipattern ในฐานข้อมูลที่ไม่สนับสนุนการแบ่งพาร์ติชัน ฐานข้อมูลที่ฉันใช้อยู่ในปัจจุบันมีประมาณ 130GB ของข้อมูลที่มี 26 ตาราง> 10M แถวและประสิทธิภาพไม่ไกลพอที่จะแยกปัญหาฐานข้อมูล; ดังนั้นฉันจึงสงสัยอย่างมากและฉันอยากได้ยินว่าทำไมนี่จึงเป็นความคิดที่ดีและเมื่อต้องทำ - คำตอบนี้เป็นคำที่ใกล้เคียงที่สุดที่ฉันเคยเห็น
mcottle

ดี. ฉันพูดถึงตารางเก็บถาวรเพราะพวกเขาทำลายข้อ จำกัด FK มันเล็กมากในชุดเกราะ การแยกโดย microservice นั้นไม่ใช่ขนาดของสิ่งที่เป็นฐานในการทำให้ microservices ของคุณแยกออกจากกัน หากคุณไม่สามารถปิดและละทิ้งมันไม่ได้เป็นบริการไมโคร จุดที่ 2. OP กล่าวถึง MF พวกเขาสามารถจ้างเขา / งานความคิดเพื่อมาบอกให้พวกเขาแยก db
Ewan

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

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