In January 2012, Amazon launched DynamoDB, a scalable high-performance
“no SQL” data store that replicates
customer data across multiple data
centers while promising strong consistency. 2 This combination of requirements leads to a large, complex system.
The replication and fault-tolerance
mechanisms in DynamoDB were created by author T.R. To verify correctness
of the production code, T.R. performed
extensive fault-injection testing using
a simulated network layer to control
message loss, duplication, and reordering. The system was also stress test-
ed for long periods on real hardware
under many different workloads. We
know such testing is absolutely necessary but can still fail to uncover subtle
flaws in design. To verify the design of DynamoDB, T.R. wrote detailed informal proofs of correctness that did in-
deed find several bugs in early versions
of the design. However, we have also
learned that conventional informal
proofs can miss very subtle problems. 14
To achieve the highest level of confidence in the design, T.R. chose TLA+.
T.R. learned TLA+ and wrote a detailed specification of these components in a couple of weeks. To model-
check the specification, we used the
distributed version of the TLC model
checker running on a cluster of 10 cc1.4xlarge EC2 instances, each with
eight cores plus hyperthreads and
23 GB of RAM. The model checker verified that a small, complicated part of
the algorithm worked as expected for
a sufficiently large instance of the system to give high confidence it is correct. T.R. then checked the broader
fault-tolerant algorithm. This time the
model checker found a bug that could
lead to losing data if a particular se-
quence of failures and recovery steps
would be interleaved with other processing. This was a very subtle bug; the
shortest error trace exhibiting the bug
included 35 high-level steps. The improbability of such compound events
is not a defense against such bugs; historically, AWS engineers have observed
many combinations of events at least
as complicated as those that could trigger this bug. The bug had passed unnoticed through extensive design reviews,
code reviews, and testing, and T.R. is
convinced we would not have found it
by doing more work in those conventional areas. The model checker later
found two bugs in other algorithms,
both serious and subtle. T.R. fixed all
these bugs, and the model checker verified the resulting algorithms to a very
high degree of confidence.
T.R. says that, had he known about
TLA+ before starting work on DynamoDB he would have used it from
the start. He believes the investment
he made in writing and checking the
formal TLA+ specifications was more
reliable and less time consuming than
the work he put into writing and checking his informal proofs. Using TLA+ in
place of traditional proof writing would
thus likely have improved time to market, in addition to achieving greater
confidence in the system’s correctness.
After DynamoDB was launched, T.R.
worked on a new feature to allow data
to be migrated between data centers.
As he already had the specification for
the existing replication algorithm, T.R.
was able to quickly incorporate this
new feature into the specification. The
model checker found the initial design
would have introduced a subtle bug,
but it was easy to fix, and the model
checker verified the resulting algorithm to the necessary level of confidence. T.R. continues to use TLA+ and
model checking to verify changes to
the design for both optimizations and
new features.
In January 2012, Amazon launched DynamoDB, a scalable high-performance“no SQL” data store that replicatescustomer data across multiple datacenters while promising strong consistency. 2 This combination of requirements leads to a large, complex system.The replication and fault-tolerancemechanisms in DynamoDB were created by author T.R. To verify correctnessof the production code, T.R. performedextensive fault-injection testing usinga simulated network layer to controlmessage loss, duplication, and reordering. The system was also stress test-ed for long periods on real hardwareunder many different workloads. Weknow such testing is absolutely necessary but can still fail to uncover subtleflaws in design. To verify the design of DynamoDB, T.R. wrote detailed informal proofs of correctness that did in-deed find several bugs in early versionsof the design. However, we have alsolearned that conventional informalproofs can miss very subtle problems. 14To achieve the highest level of confidence in the design, T.R. chose TLA+.T.R. learned TLA+ and wrote a detailed specification of these components in a couple of weeks. To model-check the specification, we used thedistributed version of the TLC modelchecker running on a cluster of 10 cc1.4xlarge EC2 instances, each witheight cores plus hyperthreads and23 GB of RAM. The model checker verified that a small, complicated part ofthe algorithm worked as expected fora sufficiently large instance of the system to give high confidence it is correct. T.R. then checked the broaderfault-tolerant algorithm. This time themodel checker found a bug that couldlead to losing data if a particular se-quence of failures and recovery stepswould be interleaved with other processing. This was a very subtle bug; theshortest error trace exhibiting the bugincluded 35 high-level steps. The improbability of such compound eventsis not a defense against such bugs; historically, AWS engineers have observedmany combinations of events at leastas complicated as those that could trigger this bug. The bug had passed unnoticed through extensive design reviews,code reviews, and testing, and T.R. isconvinced we would not have found itby doing more work in those conventional areas. The model checker laterfound two bugs in other algorithms,both serious and subtle. T.R. fixed allthese bugs, and the model checker verified the resulting algorithms to a veryhigh degree of confidence.T.R. says that, had he known aboutTLA+ before starting work on DynamoDB he would have used it fromthe start. He believes the investmenthe made in writing and checking theformal TLA+ specifications was morereliable and less time consuming thanthe work he put into writing and checking his informal proofs. Using TLA+ inplace of traditional proof writing wouldthus likely have improved time to market, in addition to achieving greaterความเชื่อมั่นในความถูกต้องของระบบหลังจากที่ได้เปิดตัว DynamoDB, T.R.ทำงานในลักษณะการทำงานใหม่เพื่ออนุญาตให้ข้อมูลจะย้ายระหว่างศูนย์ข้อมูลแล้วเขามีข้อกำหนดสำหรับอัลกอริธึมการจำลองแบบที่มีอยู่ T.R.สามารถรวมได้อย่างรวดเร็วนี้คุณลักษณะใหม่ในข้อมูลจำเพาะ ที่ตรวจสอบรุ่นที่พบการออกแบบเริ่มต้นจะได้แนะนำข้อผิดพลาดรายละเอียดแต่ก็ง่ายต่อการแก้ไข และรูปแบบตรวจสอบตรวจสอบอัลกอริทึมผลลัพธ์ระดับจำเป็นของความเชื่อมั่น T.R. ยังคงใช้ TLA + และรูปแบบการตรวจสอบเพื่อตรวจสอบการเปลี่ยนแปลงการออกแบบสำหรับเพิ่มทั้งประสิทธิภาพ และคุณลักษณะใหม่
การแปล กรุณารอสักครู่..
ในเดือนมกราคม 2012 , Amazon เปิดตัว dynamodb , ยืดหยุ่นสูง
" SQL " จัดเก็บข้อมูลที่ซ้ำ
ข้อมูลลูกค้าผ่านศูนย์ข้อมูล
หลายในขณะที่สัญญาความมั่นคงแข็งแรง 2 การรวมกันของความต้องการที่จะนำไปสู่ระบบที่ซับซ้อนขนาดใหญ่ .
ผิดในการและกลไกการ dynamodb ถูกสร้างขึ้นโดย ทีอาร์ ผู้เขียนยืนยันความถูกต้อง
ของรหัสการผลิต ทีอาร์ทำการทดสอบอย่างละเอียดโดยใช้การฉีดยาผิด
จำลองเครือข่ายชั้นควบคุม
ข้อความร่วง , การทำซ้ำ , และใหม่ . ระบบยังทดสอบความเครียด -
เอ็ดสำหรับระยะเวลานานจริงฮาร์ดแวร์
ภายใต้หลายเวิร์กโหลด เรา
รู้การทดสอบดังกล่าวเป็นสิ่งที่จำเป็นอย่างยิ่ง แต่ก็ยังล้มเหลวในการค้นพบข้อบกพร่องบอบบาง
ในการออกแบบ การตรวจสอบการออกแบบ dynamodb , T.R .เขียนแบบรายละเอียดการพิสูจน์ความถูกต้องที่ทำ -
โฉนดพบข้อบกพร่องหลายในรุ่นแรก ๆ
ของการออกแบบ อย่างไรก็ตาม เรายังได้เรียนรู้ว่าหลักฐานทางการ
ปกติจะคิดถึงปัญหาที่บอบบางมาก 14
เพื่อให้บรรลุระดับของความเชื่อมั่นในการออกแบบ ทีอาร์ เลือก TLA .
T.R . เรียนรู้ TLA และเขียนข้อมูลรายละเอียดของส่วนประกอบเหล่านี้ในไม่กี่สัปดาห์ รุ่น -
ตรวจสอบสเปคเราใช้
กระจายรุ่นของ TLC แบบ
ตรวจสอบวิ่งบนพื้นที่ 10 cc1.4xlarge EC2 อินสแตนซ์ของแต่ละแกน บวก hyperthreads และ
8 23 GB of RAM . แบบตรวจสอบยืนยันว่าขนาดเล็กซับซ้อนส่วนหนึ่งของขั้นตอนวิธีทำงานตามที่คาดไว้สำหรับ
ตัวอย่างขนาดใหญ่เพียงพอของระบบเพื่อให้ความมั่นใจสูง ถูกต้อง ทีอาร์แล้วเช็คที่กว้างขึ้น
) ขั้นตอนวิธี คราวนี้
รูปแบบตรวจสอบพบข้อบกพร่องที่อาจนำไปสู่การสูญเสียข้อมูล
-
ถ้าเฉพาะเซ quence ของความล้มเหลวและการกู้คืนขั้นตอน
จะอัดกับการประมวลผล นี้เป็นข้อผิดพลาดที่ลึกซึ้ง ;
สั้นข้อผิดพลาดติดตามจัดแสดงแมลง
รวม 35 ขั้นตอนพื้นฐาน ความเป็นไปไม่ได้ของเหตุการณ์เช่น
สารประกอบไม่ใช่ป้องกันแมลง เช่น ในอดีต วิศวกร AWS ได้สังเกต
ชุดหลายเหตุการณ์อย่างน้อย
ซับซ้อนที่อาจก่อให้เกิดข้อผิดพลาดนี้ ข้อผิดพลาดที่ผ่านมาสังเกตผ่านบทวิจารณ์การออกแบบอย่างละเอียด
รีวิว , รหัสและการทดสอบ และ ทีอาร์ คือ
เชื่อเรา จะ ไม่ พบ มัน
โดยทำงานมากขึ้นในพื้นที่เดิมนั้น แบบตรวจสอบในภายหลัง
พบสองข้อบกพร่องในอัลกอริทึมอื่น ๆ ,
ทั้งจริงจังและลึกซึ้ง . ทีอาร์ ถาวรทั้งหมด
แมลงเหล่านี้ และแบบตรวจสอบยืนยันผลอัลกอริทึมมาก
ระดับสูงของความเชื่อมั่น ทีอาร์ กล่าวว่า เขารู้จัก
TLA ก่อนที่จะเริ่มทำงานใน dynamodb เขาจะใช้มันจาก
เริ่มต้น เขาเชื่อว่าการลงทุน
เขาทำในการเขียนและการตรวจสอบอย่างเป็นทางการ TLA ข้อกําหนดเพิ่มเติม
เชื่อถือได้ และเสียเวลาน้อยกว่า
งานที่เขาใส่ลงไปในการเขียนและการตรวจสอบหลักฐานที่เป็นทางการของเขา ใช้ในสถานที่ของ TLA
หลักฐาน
จึงอาจจะเขียนแบบมีการปรับปรุงเวลาในตลาด นอกจากนี้เพื่อให้บรรลุความมั่นใจในความถูกต้องของระบบมากกว่า
.
หลังจาก dynamodb เปิดตัว , ทีอาร์
ทำงานเป็นคุณลักษณะใหม่ที่จะช่วยให้ข้อมูลที่จะย้ายระหว่างศูนย์
)เขามีข้อกำหนดสำหรับ
ที่มีอยู่ซ้ำขั้นตอนวิธี ทีอาร์ก็สามารถที่จะได้อย่างรวดเร็วรวมคุณลักษณะใหม่นี้
เข้าสเปค ตรวจสอบพบ
รูปแบบการออกแบบเริ่มต้นจะแนะนำข้อผิดพลาดบอบบาง
แต่มันเป็นเรื่องง่ายที่จะแก้ไข และตรวจสอบความถูกต้องรูปแบบ
ซึ่งขั้นตอนวิธีการระดับที่จำเป็นของความเชื่อมั่น ทีอาร์ ยังคงใช้ TLA และ
การตรวจสอบรูปแบบเพื่อตรวจสอบการเปลี่ยนแปลงการออกแบบสำหรับการเพิ่มประสิทธิภาพและ
คุณสมบัติใหม่
การแปล กรุณารอสักครู่..