डिस्ट्रिब्यूटेड सिस्टम्स रीडिंग लिस्ट (2014)
(dancres.github.io)- डिस्ट्रिब्यूटेड सिस्टम्स सीखने की कुंजी किसी खास तकनीक से अधिक सोचने के तरीके में बदलाव में है, और यह सूची इंटरनेट-स्केल सिस्टम डिज़ाइन करते समय सामने आने वाली समस्याओं को विषयवार समझने में मदद करती है
- सामग्री को डिज़ाइन दर्शन, latency, Amazon और Google के बड़े पैमाने के सिस्टम केस स्टडी, consistency models, theory, tools, infrastructure, storage, consensus algorithms, gossip protocols, और P2P में बाँटा गया है
- CAP, 2PC से बचाव, eventual consistency, और optimistic replication यह दिखाते हैं कि consistency और availability दोनों को एक साथ अधिकतम पाना कठिन operational trade-off है
- Google पेपर्स का संग्रह MapReduce, Chubby, GFS, BigTable, Dremel, Spanner, Photon, Mesa जैसे बड़े पैमाने के डिस्ट्रिब्यूटेड सिस्टम्स के implementation उदाहरण देता है, और Amazon की सामग्री service-based architecture में बदलाव के साथ संगठनात्मक संस्कृति को भी कवर करती है
- Paxos, Raft, FLP, Lamport Clock, Byzantine Generals, Chord, Kademlia, और Pastry तक क्रम से पढ़ने पर consensus, time, replication, और routing से जुड़ी समस्याओं को एक प्रवाह में समझा जा सकता है
सोचने का तरीका और डिज़ाइन दृष्टिकोण
- डिस्ट्रिब्यूटेड सिस्टम्स में सबसे कठिन हिस्सा सोचने के तरीके को बदलना है, और यह सूची उसी बदलाव में मदद करने वाले लेखों और पेपर्स से शुरू होती है
- “Thought Provokers” इस दृष्टिकोण पर केंद्रित है कि सिर्फ बड़े सर्वर, डेटाबेस, और transactions से हर समस्या हल नहीं होती
- Harvest, Yield and Scalable Tolerant Systems: CAP के व्यावहारिक उपयोग पर
- On Designing and Deploying Internet Scale Services: James Hamilton की इंटरनेट-स्केल services के डिज़ाइन और deployment पर सामग्री
- The Perils of Good Abstractions: यह बताता है कि परफ़ेक्ट API और interfaces बनाना कितना कठिन है
- Chaotic Perspectives: बड़े सिस्टम्स की unpredictability, disorder, और parallelism पर ज़ोर
- Pat Helland के Data on the Outside versus Data on the Inside, Memories, Guesses and Apologies, Building on Quicksand भी शामिल हैं
- Jim Waldo का Why Distributed Computing? और Waldo, Wollrath आदि का A Note on Distributed Computing भी साथ पढ़ने लायक हैं
Latency और इंटरनेट-स्केल services
- “Latency” इस आधार पर चर्चा करता है कि latency हमेशा मौजूद रहती है, और इससे architecture पर क्या असर पड़ता है
- Latency Exists, Cope!: latency से निपटने के तरीके और architectural प्रभाव
- Latency - the new web performance bottleneck: web performance bottleneck के रूप में latency
- The Tail At Scale: बड़े सिस्टम्स में latency, खासकर tail latency, पर
- Amazon की सामग्री सिर्फ तकनीकी विकल्पों तक सीमित नहीं है, बल्कि service-based architecture में बदलाव के दौरान बने culture और organization को भी देखती है
- A Conversation with Werner Vogels: Amazon के service-based architecture में बदलाव पर
- Discipline and Focus: Amazon के service-based architecture transformation पर आगे की चर्चा
- Vogels on Scalability और SOA creates order out of chaos @ Amazon भी शामिल हैं
Google सिस्टम पेपर्स और consistency models
- Google का यह संग्रह MapReduce से Mesa तक डिस्ट्रिब्यूटेड सिस्टम्स की “rocket science” मानी जाने वाली बड़े पैमाने की सिस्टम रिसर्च को एक जगह लाता है
- MapReduce
- Chubby Lock Manager
- Google File System
- BigTable
- Dremel: web-scale datasets का interactive analysis
- Megastore: data centers के बीच low-latency Paxos implementation के लिए डिज़ाइन
- Spanner: scalable, multi-version, globally distributed, और synchronously replicated Google database
- Photon: continuous data streams के fault-tolerant और scalable joins
- Mesa: Google के internet advertising business की महत्वपूर्ण measurement data को स्टोर करने वाला geo-replicated, near real-time, scalable data warehouse
- “Consistency Models” ऐसी सामग्री का संग्रह है जो सिस्टम के वातावरण के हिसाब से consistency और availability के बीच सही trade-off खोजने पर केंद्रित है
- CAP Conjecture: Consistency, Availability, और Partition Tolerance को एक साथ पूरी तरह संतुष्ट नहीं किया जा सकता
- CAP Twelve Years Later: Eric Brewer ने मूल trade-off की व्याख्या को आगे बढ़ाया
- Werner Vogels के Consistency and Availability और Eventual Consistency शामिल हैं
- Avoiding Two-Phase Commit और 2PC or not 2PC, Wherefore Art Thou XA? 2-phase commit से बचने और उसकी सीमाओं पर हैं
- Starbucks doesn't do two phase commit: asynchronous mechanisms पर
- Optimistic Replication: data replication के लिए relaxed consistency approach
थ्योरी, भाषाएँ, infrastructure, storage
- “Theory” उन सामग्रियों का संग्रह है जो डिस्ट्रिब्यूटेड सिस्टम डिज़ाइन में बार-बार आने वाले economics, failure assumptions, time, और consensus limitations को समझने के लिए ज़रूरी हैं
- Distributed Computing Economics: Jim Gray
- Rules of Thumb in Data Engineering: Jim Gray और Prashant Shenoy
- Fallacies of Distributed Computing: Peter Deutsch
- Impossibility of distributed consensus with one faulty process: FLP के नाम से भी जाना जाता है; इसे पढ़ने के लिए account या payment की ज़रूरत हो सकती है, और एक free version link भी दिया गया है
- Unreliable Failure Detectors for Reliable Distributed Systems: FLP की कठिनाई से निपटने का तरीका
- Lamport Clocks: जब हर कंप्यूटर की घड़ी स्वतंत्र हो, तब समय का global view बनाने की समस्या
- The Byzantine Generals Problem
- भाषाओं और tools से जुड़ी सामग्री दिखाती है कि सिर्फ कोई खास तकनीक चुन लेने से reliability की समस्या खत्म नहीं हो जाती
- Programming Distributed Erlang Applications: Pitfalls and Recipes: सिर्फ Erlang और OTP चुन लेने से reliable distributed applications बनाना आसान नहीं हो जाता
- infrastructure सामग्री यह दिखाती है कि clock management debugging जैसे बुनियादी कामों के लिए भी आवश्यक है
- storage सामग्री distributed caching और Dynamo जैसे storage design तक ले जाती है
Consensus, gossip, P2P
- Paxos से जुड़ी सामग्री इस आधार से शुरू होती है कि Paxos को समझना खुद में कठिन है, और पहले Paxos Made Simple पढ़ने, फिर बाकी पेपर्स के बाद उसे दोबारा पढ़ने की सलाह देती है
- The Part-Time Parliament: Leslie Lamport
- Paxos Made Simple: Leslie Lamport
- Paxos Made Live - An Engineering Perspective: Chandra आदि
- Revisiting the Paxos Algorithm: Lynch आदि
- How to build a highly available system with consensus: Butler Lampson
- Reconfiguring a State Machine: cluster membership changes
- Implementing Fault-Tolerant Services Using the State Machine Approach: Fred Schneider का tutorial
- अन्य consensus पेपर्स WAN वातावरण और Paxos के विकल्पों को साथ में देखते हैं
- Mencius: wide-area networks के लिए consensus algorithm
- In Search of an Understandable Consensus Algorithm: Raft पेपर का विस्तृत संस्करण और Paxos का एक विकल्प
- gossip protocol सामग्री epidemic-style behavior वाले communication, monitoring, और membership protocols को एकत्र करती है
- How robust are gossip-based communication protocols?
- Astrolabe: distributed systems monitoring, management, और data mining के लिए robust और scalable technology
- SWIM: scalable weakly consistent infection-style process group membership protocol
- P2P सामग्री distributed lookup, routing, storage, और application-level multicast को क्रम से समझाती है
- Chord: internet applications के लिए scalable P2P lookup protocol
- Kademlia: XOR metric आधारित P2P information system
- Pastry: बड़े P2P systems के लिए scalable, distributed object location और routing
- PAST: Pastry के ऊपर बना large-scale persistent P2P storage utility
- SCRIBE: Pastry के ऊपर wide-area messaging के लिए large-scale distributed application-level multicast infrastructure
1 टिप्पणियां
Hacker News की राय
यह सूची थोड़ी पुरानी लगती है, और Heidi Howard की distributed consensus reading list की सिफारिश करता/करती हूँ
https://github.com/heidihoward/distributed-consensus-reading...
इस क्षेत्र की “rocket science” के तौर पर Google के MapReduce को पेश किया गया देख कर कुछ अजीब लगा
जाँचने पर पता चला कि यह सूची 2014 की सामग्री है [1], इसलिए अब हालात काफी बदल चुके हैं—इस बात का ध्यान रखना चाहिए
[1] https://news.ycombinator.com/from?site=dancres.github.io
करीब 10 साल पहले बनाई गई distributed systems reading lists की meta list मौजूद है
यह सूची भी मैंने लगभग 10 साल देर से जोड़ी थी, और मैंने जो आइटम इकट्ठा किए थे उनमें से कितने आज भी live हैं, यह तो भगवान ही जाने
https://gist.github.com/macintux/6227368
मूल पोस्ट की सूची का उल्लेख करने वाला https://ferd.ca/a-distributed-systems-reading-list.html भी साथ में देखने लायक है
जो लोग सीमाओं को आगे बढ़ा रहे हैं या नए approaches खोज रहे हैं, उनके लिए यह मददगार हो सकती है, लेकिन बाकी लोगों के लिए यह ऐसा है जैसे आपने quadratic equation हल करना पूछा और जवाब में category theory के 100 पेपर मिल गए
Fred Herbert की सूची मूल पोस्ट से ज़्यादा नई है, लेकिन उनके अपने शब्दों में भी यह पूरी नहीं है। वे “Designing Data-Intensive Applications” को अनिवार्य बताते हैं, फिर भी कुछ ऐसा कहते हैं कि उसे सच में समझने के लिए पहले बहुत सारे पेपर पढ़ने होंगे
जब ऐसी सूचियों को समझ की prerequisite की तरह पेश किया जाता है, तो यह entry barrier बढ़ाने जैसा महसूस हो सकता है
दशकों से दूसरों के किए काम की बदौलत, एक प्रभावी Linux user बनने के लिए आपको nanokernel पर 100 पेपर पढ़ने की ज़रूरत नहीं है। अच्छा operating system शुरू से बनाना अब भी मुश्किल है, लेकिन 99% लोगों को ऐसा करने की ज़रूरत नहीं होती; वे मौजूद tools को कुशलता से इस्तेमाल कर सकते हैं
distributed systems के साथ भी यही बात है: अगर आप frontier को आगे नहीं बढ़ा रहे हैं, तो इसे इतना कठिन होने की ज़रूरत नहीं है
अगर आप research में गहराई तक जाने के बजाय practical experience चाहने वाले software engineer हैं, तो NATS [1] या YugaByte [2] से कुछ बनाकर देखें, या [3] जैसा hands-on tutorial करें
“Designing Data-Intensive Applications” भी पढ़ने लायक है। यह उन किताबों में से है जो बार-बार पढ़ने पर और बेहतर लगती हैं, इसलिए भले ही आपने 100 पेपर न पढ़े हों, इसे सीधे पढ़ सकते हैं। जहाँ समझ न आए, सवाल पूछें और मदद लें; बहुत बड़ी reading list को छोड़ देना भी ठीक है
1: https://nats.io/
2: https://www.yugabyte.com/
3: https://pragprog.com/titles/tjgo/distributed-services-with-g...
फिर भी CRDT technology का कोई ज़िक्र नहीं?