Danh sách đọc về hệ thống phân tán (2014)
(dancres.github.io)- Cốt lõi của việc học hệ thống phân tán nằm ở việc chuyển đổi cách tư duy hơn là một công nghệ cụ thể, và danh sách này giúp lần theo các vấn đề gặp phải khi thiết kế hệ thống ở quy mô Internet theo từng chủ đề
- Tài liệu được chia thành triết lý thiết kế, độ trễ, các trường hợp hệ thống quy mô lớn của Amazon và Google, mô hình nhất quán, lý thuyết, công cụ, hạ tầng, lưu trữ, thuật toán đồng thuận, giao thức gossip và P2P
- CAP, việc tránh 2PC, eventual consistency, replication lạc quan cho thấy đánh đổi trong vận hành khi rất khó đồng thời đạt mức tối đa cả tính nhất quán lẫn tính sẵn sàng
- Bộ bài viết của Google cung cấp các ví dụ triển khai hệ thống phân tán quy mô lớn như MapReduce, Chubby, GFS, BigTable, Dremel, Spanner, Photon, Mesa; còn tài liệu về Amazon cũng bàn cả quá trình chuyển sang kiến trúc hướng dịch vụ và văn hóa tổ chức
- Nếu đọc tiếp từ Paxos, Raft, FLP, Lamport Clock, Byzantine Generals đến Chord, Kademlia, Pastry, bạn có thể hệ thống hóa các bài toán về đồng thuận, thời gian, sao chép và định tuyến trong một mạch xuyên suốt
Góc nhìn tư duy và thiết kế
- Phần khó nhất trong hệ thống phân tán là thay đổi cách suy nghĩ, và danh sách bắt đầu bằng các bài viết, bài báo giúp hỗ trợ sự chuyển đổi đó
- “Thought Provokers” bàn về quan điểm rằng không thể giải quyết mọi vấn đề chỉ bằng máy chủ lớn, cơ sở dữ liệu và transaction
- Harvest, Yield and Scalable Tolerant Systems: Bàn về cách áp dụng CAP trong thực tế
- On Designing and Deploying Internet Scale Services: Tài liệu của James Hamilton về thiết kế và triển khai dịch vụ ở quy mô Internet
- The Perils of Good Abstractions: Bàn về việc rất khó tạo ra API và interface hoàn hảo
- Chaotic Perspectives: Nhấn mạnh tính khó dự đoán, hỗn loạn và song song của hệ thống quy mô lớn
- Cũng bao gồm Data on the Outside versus Data on the Inside, Memories, Guesses and Apologies, Building on Quicksand của Pat Helland
- Cũng nên đọc thêm Why Distributed Computing? của Jim Waldo và A Note on Distributed Computing của Waldo, Wollrath và cộng sự
Độ trễ và dịch vụ quy mô Internet
- “Latency” bàn về việc kiến trúc bị ảnh hưởng ra sao từ tiền đề rằng độ trễ luôn tồn tại
- Latency Exists, Cope!: Bàn về cách ứng phó với độ trễ và tác động tới kiến trúc
- Latency - the new web performance bottleneck: Bàn về độ trễ như nút thắt hiệu năng mới của web
- The Tail At Scale: Bàn về độ trễ trong hệ thống quy mô lớn, đặc biệt là vấn đề tail latency
- Tài liệu về Amazon không chỉ xem xét lựa chọn kỹ thuật mà còn cả văn hóa và tổ chức được hình thành trong quá trình chuyển sang kiến trúc hướng dịch vụ
- A Conversation with Werner Vogels: Bàn về quá trình chuyển sang kiến trúc hướng dịch vụ tại Amazon
- Discipline and Focus: Tiếp tục bàn về quá trình chuyển sang kiến trúc hướng dịch vụ tại Amazon
- Cũng bao gồm Vogels on Scalability và SOA creates order out of chaos @ Amazon
Các bài báo hệ thống của Google và mô hình nhất quán
- Bộ tài liệu của Google tập hợp tại một nơi các bài báo về hệ thống quy mô lớn có thể xem là “rocket science” của hệ thống phân tán, từ MapReduce đến Mesa
- MapReduce
- Chubby Lock Manager
- Google File System
- BigTable
- Dremel: Phân tích tương tác trên tập dữ liệu ở quy mô web
- Megastore: Thiết kế cho triển khai Paxos độ trễ thấp giữa các data center
- Spanner: Cơ sở dữ liệu của Google có khả năng mở rộng, đa phiên bản, phân tán toàn cầu và sao chép đồng bộ
- Photon: Join có khả năng chịu lỗi và mở rộng trên các luồng dữ liệu liên tục
- Mesa: Kho dữ liệu có sao chép địa lý, gần thời gian thực và có khả năng mở rộng để lưu trữ dữ liệu đo lường cốt lõi liên quan đến mảng quảng cáo Internet của Google
- “Consistency Models” gồm các tài liệu tìm kiếm điểm cân bằng giữa tính nhất quán và tính sẵn sàng phù hợp với môi trường hệ thống
- CAP Conjecture: Nội dung nói rằng không thể đồng thời thỏa mãn cả Consistency, Availability và Partition Tolerance
- CAP Twelve Years Later: Eric Brewer mở rộng phần giải thích đánh đổi ban đầu
- Bao gồm Consistency and Availability và Eventual Consistency của Werner Vogels
- Avoiding Two-Phase Commit và 2PC or not 2PC, Wherefore Art Thou XA? bàn về việc tránh two-phase commit và những giới hạn của nó
- Starbucks doesn't do two phase commit: Bàn về cơ chế bất đồng bộ
- Optimistic Replication: Bàn về cách tiếp cận nhất quán nới lỏng cho sao chép dữ liệu
Lý thuyết, ngôn ngữ, hạ tầng, lưu trữ
- “Theory” tập hợp những tài liệu cần thiết để hiểu tính kinh tế, giả định lỗi, thời gian và giới hạn của đồng thuận vốn lặp đi lặp lại trong thiết kế hệ thống phân tán
- Distributed Computing Economics: Jim Gray
- Rules of Thumb in Data Engineering: Jim Gray và Prashant Shenoy
- Fallacies of Distributed Computing: Peter Deutsch
- Impossibility of distributed consensus with one faulty process: Bài báo còn được biết đến với tên FLP; để truy cập có thể cần tài khoản hoặc thanh toán, và cũng có kèm liên kết tới bản miễn phí
- Unreliable Failure Detectors for Reliable Distributed Systems: Bàn về cách xử lý khó khăn do FLP đặt ra
- Lamport Clocks: Bài toán thiết lập một góc nhìn toàn cục về thời gian khi đồng hồ của từng máy tính là độc lập
- The Byzantine Generals Problem
- Tài liệu về ngôn ngữ và công cụ cho thấy rằng việc chọn một công nghệ cụ thể không tự động làm biến mất các vấn đề về độ tin cậy
- Programming Distributed Erlang Applications: Pitfalls and Recipes: Chỉ riêng việc chọn Erlang và OTP cũng không khiến việc xây dựng ứng dụng phân tán đáng tin cậy trở nên đơn giản
- Tài liệu về hạ tầng nói về việc quản lý đồng hồ là thiết yếu ngay cả với các tác vụ cơ bản như debug
- Tài liệu về lưu trữ dẫn sang thiết kế lưu trữ như distributed caching và Dynamo
Đồng thuận, gossip, P2P
- Bộ tài liệu về Paxos bắt đầu từ tiền đề rằng bản thân việc hiểu Paxos đã rất khó, và khuyến nghị nên đọc Paxos Made Simple trước rồi đọc lại sau khi xem các bài báo khác
- The Part-Time Parliament: Leslie Lamport
- Paxos Made Simple: Leslie Lamport
- Paxos Made Live - An Engineering Perspective: Chandra và cộng sự
- Revisiting the Paxos Algorithm: Lynch và cộng sự
- How to build a highly available system with consensus: Butler Lampson
- Reconfiguring a State Machine: Thay đổi membership của cluster
- Implementing Fault-Tolerant Services Using the State Machine Approach: Hướng dẫn của Fred Schneider
- Các bài báo đồng thuận khác cũng bàn cùng lúc về môi trường WAN và các lựa chọn thay thế cho Paxos
- Mencius: Thuật toán đồng thuận cho mạng diện rộng
- In Search of an Understandable Consensus Algorithm: Phiên bản mở rộng của bài báo Raft, một lựa chọn thay thế cho Paxos
- Tài liệu về giao thức gossip tập hợp các giao thức truyền thông, giám sát và membership mang hành vi kiểu dịch tễ học
- How robust are gossip-based communication protocols?
- Astrolabe: Kỹ thuật bền vững và có khả năng mở rộng cho giám sát, quản trị và khai phá dữ liệu trong hệ thống phân tán
- SWIM: Giao thức membership nhóm tiến trình theo kiểu infection-style, có khả năng mở rộng và nhất quán yếu
- Tài liệu về P2P giúp lần theo các chủ đề tra cứu phân tán, định tuyến, lưu trữ và multicast ở tầng ứng dụng
- Chord: Giao thức tra cứu P2P có khả năng mở rộng cho các ứng dụng Internet
- Kademlia: Hệ thống thông tin P2P dựa trên XOR metric
- Pastry: Định vị đối tượng và định tuyến phân tán, có khả năng mở rộng cho hệ thống P2P quy mô lớn
- PAST: Tiện ích lưu trữ P2P bền vững quy mô lớn chạy trên Pastry
- SCRIBE: Hạ tầng multicast phân tán quy mô lớn ở tầng ứng dụng cho nhắn tin diện rộng trên Pastry
1 bình luận
Ý kiến Hacker News
Danh sách này có vẻ hơi cũ, và tôi đề xuất danh sách đọc về đồng thuận phân tán của Heidi Howard
https://github.com/heidihoward/distributed-consensus-reading...
Tôi thấy hơi lạ khi xem MapReduce của Google như kiểu “khoa học tên lửa” của lĩnh vực này
Kiểm tra lại thì hóa ra danh sách này là tài liệu từ năm 2014 [1], nên bây giờ tình hình đã khác đi rất nhiều và cần lưu ý điều đó
[1] https://news.ycombinator.com/from?site=dancres.github.io
Có một danh sách meta về các danh sách đọc hệ thống phân tán được tạo cách đây khoảng 10 năm
Tôi cũng thêm danh sách này vào muộn khoảng 10 năm, và chỉ có trời mới biết trong số những mục tôi đã gom lại thì hiện giờ còn bao nhiêu cái vẫn còn tồn tại
https://gist.github.com/macintux/6227368
Cũng đáng xem https://ferd.ca/a-distributed-systems-reading-list.html, bài có nhắc tới danh sách gốc
Nó có thể hữu ích cho những ai đang đẩy giới hạn hoặc tìm kiếm cách tiếp cận mới, nhưng với những người còn lại thì giống như hỏi cách giải phương trình bậc hai rồi được đưa cho 100 bài báo về lý thuyết phạm trù
Danh sách của Fred Herbert mới hơn danh sách gốc, nhưng theo chính lời ông ấy thì cũng không đầy đủ. Ông coi “Designing Data-Intensive Applications” là tài liệu bắt buộc, nhưng cũng nói theo kiểu rằng muốn thực sự hiểu thì trước hết phải đọc thật nhiều bài báo
Khi những danh sách như thế này được trình bày như điều kiện tiên quyết để hiểu vấn đề, chúng có thể tạo cảm giác như đang nâng cao rào cản gia nhập
Nhờ vào công sức của người khác được tích lũy qua hàng chục năm, bạn không cần phải đọc 100 bài báo về nanokernel để trở thành một người dùng Linux hiệu quả. Việc tự xây dựng một hệ điều hành tốt từ đầu vẫn rất khó, nhưng 99% trường hợp thì không cần làm vậy, chỉ cần thành thạo các công cụ đã có là đủ
Hệ thống phân tán cũng vậy: nếu bạn không phải đang đẩy ở tuyến đầu, thì nó không nhất thiết phải khó đến thế
Nếu bạn là kỹ sư phần mềm muốn có kinh nghiệm thực chiến hơn là đào sâu nghiên cứu, thì nên thử xây dựng thứ gì đó với NATS [1] hoặc YugaByte [2], hay làm các tutorial thực hành như [3]
“Designing Data-Intensive Applications” cũng rất đáng đọc. Đây là một trong những cuốn sách càng đọc lại càng thấy hay, nên bạn cứ đọc luôn cả khi chưa đọc 100 bài báo. Nếu gặp đoạn nào không hiểu thì cứ hỏi và tìm hỗ trợ, bỏ qua những danh sách đọc khổng lồ đó cũng không sao
1: https://nats.io/
2: https://www.yugabyte.com/
3: https://pragprog.com/titles/tjgo/distributed-services-with-g...
Nhưng vậy mà lại không nhắc gì đến công nghệ CRDT sao?