ความสอดคล้องในที่สุดในภาษาอังกฤษล้วน


131

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

ใครช่วยให้คำอธิบายง่ายๆว่าความสอดคล้องในที่สุดคืออะไรโดยทั่วไปไม่เกี่ยวข้องกับการจัดเก็บข้อมูลที่เป็นรูปธรรม?


1
เช่น Wikipedia ไม่ได้ช่วยอะไร? en.wikipedia.org/wiki/Eventual_consistency
Oliver Charlesworth

22
@OliCharlesworth: ไม่. อาจจะเป็นแค่ฉัน แต่มันก็ไม่ชัดเจนแม้จะอ่านสองครั้ง
โรมัน

คำตอบ:


228

ความสอดคล้องในที่สุด:

  1. ฉันดูรายงานสภาพอากาศและเรียนรู้ว่าพรุ่งนี้ฝนจะตก
  2. ฉันบอกคุณว่าพรุ่งนี้ฝนจะตก
  3. เพื่อนบ้านของคุณบอกภรรยาว่าพรุ่งนี้จะมีแดดจัด
  4. คุณบอกเพื่อนบ้านว่าพรุ่งนี้ฝนจะตก

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

ตรงข้ามกับการปฏิบัติตามความสอดคล้องอย่างเข้มงวด / ACID:

  1. ยอดเงินในธนาคารของคุณคือ $ 50
  2. คุณฝากเงิน $ 100
  3. ยอดเงินในธนาคารของคุณสอบถามจากตู้เอทีเอ็มทุกแห่งคือ 150 เหรียญ
  4. ลูกสาวของคุณถอนเงิน 40 ดอลลาร์ด้วยบัตร ATM ของคุณ
  5. ยอดเงินในธนาคารของคุณสอบถามจากตู้เอทีเอ็มทุกแห่งคือ $ 110

ในช่วงเวลาใดยอดคงเหลือของคุณไม่สามารถสะท้อนสิ่งอื่นใดนอกจากผลรวมจริงของธุรกรรมทั้งหมดที่เกิดขึ้นในบัญชีของคุณจนถึงช่วงเวลานั้น

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


ฉันไม่เข้าใจ. การเติบโตเป็นแบบเส้นตรงหรือเลขชี้กำลัง?
Maciek Kreft

4
การเติบโตของค่าโสหุ้ยการสื่อสารของระบบ N โหนดที่สอดคล้องกันอย่างเคร่งครัดมักเข้าใจกันว่าเป็น super-linear (นั่นคือมากกว่าเชิงเส้น) อาจเป็นเลขชี้กำลังอาจเป็นลูกบาศก์ ... ขึ้นอยู่กับโปรโตคอลการสื่อสาร ฯลฯ
Chris Shain

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

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

จริงๆแล้วระบบธนาคารส่วนใหญ่ก็สอดคล้องกันในที่สุด
Chaos

107

ความสอดคล้องในที่สุด:

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

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

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


2
โพสต์บล็อกที่ดี ควรค่าแก่การอ่านสำหรับคนที่เพิ่งเริ่มคิดเรื่องความสอดคล้องในที่สุด คำตอบนี้จะดีกว่าถ้าเขียนใหม่เพื่ออธิบายสิ่งที่อยู่ในบล็อกโพสต์มากขึ้น
axiopisty

1
อธิบายได้ดีในบล็อกของคุณ ขอบคุณสำหรับการแบ่งปัน.
Ataur Rahman Munna

12

คิดว่าคุณมีแอปพลิเคชันและแบบจำลอง จากนั้นคุณต้องเพิ่มรายการข้อมูลใหม่ลงในแอปพลิเคชัน

ใส่คำอธิบายภาพที่นี่

จากนั้นแอปพลิเคชันจะซิงโครไนซ์ข้อมูลกับแบบจำลองอื่น ๆ ที่แสดงด้านล่าง

ใส่คำอธิบายภาพที่นี่

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

ปัญหาคือในที่สุดเราจะสอดคล้องกันได้อย่างไร?

สำหรับสิ่งนั้นเราใช้แอปพลิเคชันสื่อกลางเพื่ออัปเดต / สร้าง / ลบข้อมูลและใช้การสืบค้นโดยตรงเพื่ออ่านข้อมูล ที่ช่วยสร้างความสอดคล้องในที่สุด

ใส่คำอธิบายภาพที่นี่ ใส่คำอธิบายภาพที่นี่


3

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

แหล่งที่มาhttp://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

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


1

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

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

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

คำเตือน: นักพัฒนาและแม้แต่สถาปนิกที่ไม่รู้จักหรือเข้าใจเทคโนโลยีของที่เก็บข้อมูลเอกสารและกลัวที่จะยอมรับว่าเพราะกลัวว่าจะตกงาน แต่ได้รับการฝึกอบรมแบบคลาสสิกใน RDBMS และผู้ที่รู้เฉพาะระบบ ACID เท่านั้น (ต่างกันอย่างไร ) และใครไม่รู้เทคโนโลยีหรือใช้เวลาในการเรียนรู้จะพลาดการออกแบบที่เก็บข้อมูลเอกสาร นอกจากนี้ยังอาจลองใช้เป็น RDBMS หรือสำหรับสิ่งต่างๆเช่นการแคช พวกเขาจะแยกย่อยสิ่งที่ควรจะเป็นธุรกรรมปรมาณูซึ่งควรดำเนินการกับเอกสารทั้งเล่มออกเป็นส่วน "เชิงสัมพันธ์" โดยลืมไปว่าการจำลองแบบและเวลาแฝงเป็นสิ่งต่างๆหรือที่แย่กว่านั้นคือลากระบบของบุคคลที่สามไปสู่ ​​"ธุรกรรม" พวกเขาจะทำเช่นนี้เพื่อให้ RDBMS สามารถสะท้อน data lake ได้โดยไม่ต้องคำนึงว่ามันจะใช้ได้หรือไม่และไม่ต้องทดสอบเพราะพวกเขารู้ว่ากำลังทำอะไรอยู่ จากนั้นพวกเขาจะประหลาดใจเมื่อวัตถุที่ซับซ้อนที่จัดเก็บในเอกสารแยกกันเช่น "คำสั่งซื้อ" มี "รายการสั่งซื้อ" น้อยกว่าที่คาดไว้หรืออาจจะไม่มีเลย แต่มันจะไม่เกิดขึ้นบ่อยครั้งหรือบ่อยพอที่พวกเขาจะเดินไปข้างหน้า พวกเขาอาจไม่ประสบปัญหาในการพัฒนา จากนั้นแทนที่จะออกแบบสิ่งต่าง ๆ ใหม่พวกเขาจะโยน“ ความล่าช้า” และ“ การลองใหม่” และ“ การตรวจสอบ” เพื่อปลอมแบบจำลองข้อมูลเชิงสัมพันธ์ซึ่งใช้ไม่ได้ผล แต่จะเพิ่มความซับซ้อนเพิ่มเติมโดยไม่มีประโยชน์ แต่ตอนนี้สายเกินไป - สิ่งนี้ได้ถูกนำไปใช้แล้วและตอนนี้ธุรกิจกำลังดำเนินการอยู่ ในที่สุดระบบทั้งหมดจะถูกโยนทิ้งและแผนกจะถูกว่าจ้างจากภายนอกและจะมีคนอื่นดูแลระบบ มันยังทำงานไม่ถูกต้อง แต่อาจล้มเหลวในราคาถูกกว่าความล้มเหลวในปัจจุบัน


0

ความสอดคล้องในที่สุดก็เหมือนกับสเปกตรัม ในด้านหนึ่งคุณมีความสม่ำเสมอที่แข็งแกร่งและอีกด้านหนึ่งคุณมีความสม่ำเสมอในที่สุด ในระหว่างนั้นมีระดับเช่น Snapshot อ่านการเขียนของฉัน ดั๊กเทอร์รี่มีคำอธิบายที่สวยงามใน กระดาษของเขาเกี่ยวกับความสอดคล้องในที่สุดผ่านเบสบอล

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

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

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