2 điểm bởi GN⁺ 2024-10-21 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ế

Độ 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
  • 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ụ

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

Lý thuyết, ngôn ngữ, hạ tầng, lưu trữ

Đồ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
  • 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
  • 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

 
GN⁺ 2024-10-21
Ý 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

    • Biết vậy rồi thì bối cảnh trở nên rõ ràng hơn hẳn. Đã 10 năm trôi qua kể từ khi danh sách này xuất hiện, và ngay cả vào thời điểm đó thì bài báo về MapReduce cũng đã ra đời được 10 năm rồi
  • 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

    • Cần phải làm rõ những danh sách kiểu này thực sự dành cho ai. Tôi không nghĩ đây là danh sách cho những người đơn giản chỉ muốn “học về hệ thống phân tán
      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?

    • Vì đây là tài liệu từ 10 năm trước