สถาปัตยกรรมฐานข้อมูล Master-master vs master-slave?


117

ฉันเคยได้ยินเกี่ยวกับสถาปัตยกรรมฐานข้อมูลสองประเภท

  • ต้นแบบต้นแบบ

  • master ทาส

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

Master-slave ทำให้ฉันนึกถึง SVN (ซึ่งฉันไม่ชอบ) ที่คุณมีหน่วยกลางหนึ่งหน่วยที่จัดการสิ่งต่างๆ

คำถาม:

  1. ข้อดีข้อเสียของแต่ละข้อคืออะไร?

  2. หากคุณต้องการมีฐานข้อมูลท้องถิ่นในโทรศัพท์มือถือของคุณเช่น iPhone อันไหนเหมาะสมกว่ากัน?

  3. การเลือกหนึ่งในปัจจัยเหล่านี้เป็นปัจจัยสำคัญที่ต้องพิจารณาอย่างละเอียดหรือไม่?


1
CAP Theorem -> ความอดทนของพาร์ติชันความพร้อมใช้งานที่สอดคล้องกันระบุว่าคุณไม่สามารถมีทั้งสามอย่างร่วมกันได้ ขึ้นอยู่กับการใช้งานคุณสามารถเลือกอย่างใดอย่างหนึ่ง
Pritam Banerjee

คำตอบ:


87

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

มีความตึงเครียดพื้นฐาน:

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

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

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

วิกิพีเดียดูเหมือนจะสรุปข้อดีและข้อเสียได้ดี

ข้อดี

  • หากมาสเตอร์คนใดคนหนึ่งล้มเหลวมาสเตอร์คนอื่นจะอัปเดตฐานข้อมูลต่อไป

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

ข้อเสีย

  • ระบบการจำลองแบบหลายหลักส่วนใหญ่มีความสอดคล้องกันอย่างหลวม ๆ เท่านั้นเช่นขี้เกียจและอะซิงโครนัสละเมิดคุณสมบัติของกรด

  • ระบบการจำลองแบบกระตือรือร้นมีความซับซ้อนและทำให้เกิดความล่าช้าในการสื่อสาร

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


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

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

2
การซื้อขายทางการเงินหรือตลาดหุ้นใช้อะไร? พวกเขาจะตีปัญหานี้ตลอดเวลา?
CMCDragonkai

3
ในกรณีที่คุณต้องการ "ความจริง" ที่อัปเดต (เช่นเดียวกับในระบบการเงิน) คุณต้องมี Master / Slave หรือแค่ Master ที่คุณสามารถแก้ไขความจริงในภายหลัง (คิดว่าผสานความขัดแย้งในระบบควบคุมการแก้ไขเช่น Git) จากนั้นคุณสามารถใช้ Master / Master
djna

djna ให้การสังเกตที่สำคัญมาก ตอนนี้ฐานข้อมูลจะต้องมีตรรกะ "ตัวกั้น" บางประเภท อะไรสำคัญที่สุด? ข้อมูล "ล่าสุด"? นั่นเป็นเหตุผลหากคุณกำลังเขียนฟิลด์ใหม่ แต่มันไม่สมเหตุสมผลหากคุณกำลังทำ "ตัวนับ" และคุณต้องการให้กระบวนการทั้งหมดเพิ่มขึ้น (หรือลดลง) ก่อนที่จะส่งคืนผลลัพธ์ โดยเฉพาะอย่างยิ่งอย่าขายสินค้าที่หมดสต็อก หากคุณมีพาร์ติชันเครือข่ายจะเกิดอะไรขึ้นเมื่อกลับมารวมกัน ทั้งหมดนี้คือสิ่งที่ทฤษฎี CAP นอกจากนี้ยังเป็นที่ที่คุณสามารถมีอัลกอริทึมเช่น Paxos เพื่อพัฒนาฉันทามติระหว่างเครื่องต่างๆ
Peter Corless

95

ในขณะที่ค้นคว้าสถาปัตยกรรมฐานข้อมูลต่างๆด้วย ฉันได้รวบรวมข้อมูลดีๆที่อาจเกี่ยวข้องกับคนอื่นที่กำลังค้นคว้าในอนาคต ฉันได้ข้ามผ่าน

  1. การจำลองแบบ Master-Slave
  2. การจำลองแบบ Master-Master
  3. MySQL คลัสเตอร์

ฉันตัดสินใจที่จะใช้ MySQL Cluster สำหรับกรณีการใช้งานของฉัน อย่างไรก็ตามโปรดดูข้อดีข้อเสียต่างๆที่ฉันได้รวบรวมไว้ด้านล่าง

1. การจำลองแบบ Master-Slave

ข้อดี

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

จุดด้อย

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

2. การจำลองแบบ Master-Master

ข้อดี

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

จุดด้อย

  • สม่ำเสมออย่างหลวม ๆ
  • ไม่ง่ายเหมือน master-slave ในการกำหนดค่าและปรับใช้

3. MySQL คลัสเตอร์

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

ดูMySQL Cluster 101สำหรับข้อมูลเพิ่มเติม

ข้อดี

  • (High Avalability) ไม่มีจุดล้มเหลวแม้แต่จุดเดียว
  • ปริมาณงานสูงมาก
  • เวลาทำงาน 99.99%
  • Auto-sharding
  • การตอบสนองตามเวลาจริง
  • การดำเนินการออนไลน์ (การเปลี่ยนแปลงสคีมา ฯลฯ )
  • การเขียนแบบกระจาย

จุดด้อย

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


2
คุณสามารถเขียนอะไรเกี่ยวกับ Galera ได้หรือไม่? คลัสเตอร์ Percona XtraDB?
Ivanov

"แอปพลิเคชันอาจต้องรีสตาร์ท" ซึ่งเป็นส่วนหนึ่งของข้อเสีย หมายความว่าอย่างไร?
Lily

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