Dağıtık Sistemler Okuma Listesi (2014)
(dancres.github.io)- Dağıtık sistemleri öğrenmenin özü, belirli bir teknolojiden çok düşünme biçimini değiştirmekte yatıyor; bu liste, internet ölçeğindeki sistemleri tasarlarken karşılaşılan sorunları konu başlıklarına göre takip etmeyi sağlıyor
- Kaynaklar; tasarım felsefesi, gecikme, Amazon ve Google’ın büyük ölçekli sistem örnekleri, tutarlılık modelleri, teori, araçlar, altyapı, depolama, uzlaşma algoritmaları, gossip protokolleri ve P2P olarak ayrılıyor
- CAP, 2PC’den kaçınma, eventual consistency ve iyimser replikasyon; tutarlılık ile erişilebilirliği aynı anda en üst düzeye çıkarmanın zor olduğunu gösteren operasyonel tavizleri ortaya koyuyor
- Google makale derlemesi, MapReduce, Chubby, GFS, BigTable, Dremel, Spanner, Photon, Mesa gibi büyük ölçekli dağıtık sistemlerin uygulama örneklerini sunarken; Amazon kaynakları hizmet tabanlı mimariye geçişle birlikte organizasyon kültürünü de ele alıyor
- Paxos, Raft, FLP, Lamport Clock, Byzantine Generals, Chord, Kademlia ve Pastry’ye kadar sıralı biçimde okunduğunda uzlaşma, zaman, replikasyon ve yönlendirme problemlerini tek bir akış içinde toparlamak mümkün oluyor
Düşünme Biçimi ve Tasarım Perspektifi
- Dağıtık sistemlerde en zor kısım, düşünme biçimini değiştirmektir; liste de bu dönüşüme yardımcı olan yazı ve makalelerle başlıyor
- “Thought Provokers”, büyük sunucular, veritabanları ve transaction’ların tek başına tüm sorunları çözemeyeceği perspektifini ele alıyor
- Harvest, Yield and Scalable Tolerant Systems: CAP’in pratikteki uygulanışını ele alıyor
- On Designing and Deploying Internet Scale Services: James Hamilton’ın internet ölçeğinde hizmet tasarımı ve dağıtımı üzerine materyali
- The Perils of Good Abstractions: Kusursuz API ve arayüzler oluşturmanın zorluğunu ele alıyor
- Chaotic Perspectives: Büyük ölçekli sistemlerin öngörülemezliğini, düzensizliğini ve paralelliğini vurguluyor
- Pat Helland’ın Data on the Outside versus Data on the Inside, Memories, Guesses and Apologies, Building on Quicksand yazıları da dahil
- Jim Waldo’nun Why Distributed Computing? ve Waldo, Wollrath vd. imzalı A Note on Distributed Computing çalışmaları da birlikte okunacak kaynaklar arasında
Gecikme ve İnternet Ölçeğinde Hizmetler
- “Latency”, gecikmenin her zaman var olduğu varsayımından hareketle bunun mimariyi nasıl etkilediğini ele alıyor
- Latency Exists, Cope!: Gecikmeye karşı başa çıkma yöntemlerini ve mimari etkilerini ele alıyor
- Latency - the new web performance bottleneck: Web performansında darboğaz olarak gecikmeyi inceliyor
- The Tail At Scale: Büyük ölçekli sistemlerde gecikmeyi, özellikle de tail latency sorununu ele alıyor
- Amazon kaynakları yalnızca teknik seçimleri değil, hizmet tabanlı mimariye geçiş sırasında oluşan kültürü ve organizasyonu da birlikte inceliyor
- A Conversation with Werner Vogels: Amazon’un hizmet tabanlı mimariye geçişini ele alıyor
- Discipline and Focus: Amazon’un hizmet tabanlı mimariye geçişini ek yönleriyle ele alıyor
- Vogels on Scalability ve SOA creates order out of chaos @ Amazon da dahil
Google Sistem Makaleleri ve Tutarlılık Modelleri
- Google derlemesi, MapReduce’dan Mesa’ya kadar dağıtık sistemlerin “rocket science” sayılabilecek büyük ölçekli sistem makalelerini tek bir yerde topluyor
- MapReduce
- Chubby Lock Manager
- Google File System
- BigTable
- Dremel: Web ölçeğindeki veri kümeleri üzerinde etkileşimli analiz
- Megastore: Veri merkezleri arasında düşük gecikmeli Paxos uygulaması için tasarım
- Spanner: Ölçeklenebilir, çok sürümlü, küresel olarak dağıtılmış ve senkron şekilde replike edilen Google veritabanı
- Photon: Sürekli veri akışları için hata toleranslı ve ölçeklenebilir join işlemleri
- Mesa: Google’ın internet reklamcılığı işiyle ilgili temel ölçüm verilerini depolayan coğrafi olarak replike edilmiş, near-real-time ve ölçeklenebilir veri ambarı
- “Consistency Models”, sistem bağlamına göre tutarlılık ile erişilebilirlik arasında doğru ödünleşimi bulmaya odaklanan kaynaklardan oluşuyor
- CAP Conjecture: Consistency, Availability ve Partition Tolerance’ın aynı anda tam olarak sağlanamayacağını anlatıyor
- CAP Twelve Years Later: Eric Brewer’ın özgün ödünleşim açıklamasını genişletiyor
- Werner Vogels’in Consistency and Availability ve Eventual Consistency yazıları da dahil
- Avoiding Two-Phase Commit ve 2PC or not 2PC, Wherefore Art Thou XA?, iki aşamalı commit’ten kaçınmayı ve bunun sınırlarını ele alıyor
- Starbucks doesn't do two phase commit: Asenkron mekanizmaları ele alıyor
- Optimistic Replication: Veri replikasyonu için gevşetilmiş tutarlılık yaklaşımını ele alıyor
Teori, Diller, Altyapı, Depolama
- “Theory”, dağıtık sistem tasarımında tekrar tekrar karşımıza çıkan ekonomi, hata varsayımları, zaman ve uzlaşmanın sınırlarını anlamak için gerekli kaynakları bir araya getiriyor
- Distributed Computing Economics: Jim Gray
- Rules of Thumb in Data Engineering: Jim Gray ve Prashant Shenoy
- Fallacies of Distributed Computing: Peter Deutsch
- Impossibility of distributed consensus with one faulty process: FLP olarak da bilinen makale; erişim için hesap veya ödeme gerekebilir ve ücretsiz sürüm bağlantısı da veriliyor
- Unreliable Failure Detectors for Reliable Distributed Systems: FLP’nin ortaya koyduğu zorluğa nasıl yaklaşılacağını ele alıyor
- Lamport Clocks: Her bilgisayarın saatinin bağımsız olduğu durumda küresel bir zaman perspektifi kurma problemi
- The Byzantine Generals Problem
- Dil ve araçlara dair kaynaklar, yalnızca belli bir teknolojiyi seçmenin güvenilirlik sorunlarını ortadan kaldırmadığını gösteriyor
- Programming Distributed Erlang Applications: Pitfalls and Recipes: Yalnızca Erlang ve OTP seçmenin güvenilir dağıtık uygulamalar geliştirmeyi otomatik olarak kolaylaştırmadığını gösteriyor
- Altyapı kaynakları, saat yönetiminin debugging gibi temel görevler için bile vazgeçilmez olduğunu ele alıyor
- Depolama kaynakları, dağıtık cache’leme ve Dynamo benzeri depolama tasarımlarına uzanıyor
Uzlaşma, Gossip, P2P
- Paxos derlemesi, Paxos’u anlamanın başlı başına zor olduğu varsayımıyla başlıyor ve önce Paxos Made Simple’ı okuyup diğer makalelerden sonra tekrar dönmeyi öneriyor
- The Part-Time Parliament: Leslie Lamport
- Paxos Made Simple: Leslie Lamport
- Paxos Made Live - An Engineering Perspective: Chandra ve diğerleri
- Revisiting the Paxos Algorithm: Lynch ve diğerleri
- How to build a highly available system with consensus: Butler Lampson
- Reconfiguring a State Machine: Küme üyeliğini değiştirme
- Implementing Fault-Tolerant Services Using the State Machine Approach: Fred Schneider’ın öğretici metni
- Diğer uzlaşma makaleleri, WAN ortamlarını ve Paxos’a alternatifleri birlikte ele alıyor
- Mencius: Geniş alan ağları için uzlaşma algoritması
- In Search of an Understandable Consensus Algorithm: Raft makalesinin genişletilmiş sürümü ve Paxos’a alternatif
- Gossip protokolü kaynakları, salgın benzeri davranış gösteren iletişim, izleme ve üyelik protokollerini bir araya getiriyor
- How robust are gossip-based communication protocols?
- Astrolabe: Dağıtık sistem izleme, yönetim ve veri madenciliği için sağlam ve ölçeklenebilir teknik
- SWIM: Ölçeklenebilir, weakly consistent, infection-style süreç grubu üyelik protokolü
- P2P kaynakları; dağıtık lookup, routing, storage ve uygulama katmanı multicast konularını adım adım takip etmeyi sağlıyor
- Chord: İnternet uygulamaları için ölçeklenebilir P2P lookup protokolü
- Kademlia: XOR metric tabanlı P2P bilgi sistemi
- Pastry: Büyük ölçekli P2P sistemler için ölçeklenebilir, dağıtık nesne konumlandırma ve yönlendirme
- PAST: Pastry üzerinde büyük ölçekli kalıcı P2P depolama yardımcı aracı
- SCRIBE: Pastry üzerinde geniş alan mesajlaşması için büyük ölçekli dağıtık uygulama katmanı multicast altyapısı
1 yorum
Hacker News yorumları
Bu liste biraz eski görünüyor; Heidi Howard’ın dağıtık uzlaşı okuma listesini öneririm
https://github.com/heidihoward/distributed-consensus-reading...
Bu alanın “roket bilimi” olarak Google’ın MapReduce’unun gösterildiğini görünce bir tuhaf geldi
Kontrol edince bu listenin 2014 tarihli olduğunu gördüm [1]; bugün durum epey değişti, o yüzden dikkat etmek gerekiyor
[1] https://news.ycombinator.com/from?site=dancres.github.io
Yaklaşık 10 yıl önce hazırladığım dağıtık sistem okuma listelerinin meta listesi var
Bu listeyi de yaklaşık 10 yıl gecikmeyle eklemiştim; topladığım maddelerden bugün hâlâ hangilerinin ayakta olduğunu ancak Tanrı bilir
https://gist.github.com/macintux/6227368
Asıl listededen bahseden https://ferd.ca/a-distributed-systems-reading-list.html de birlikte bakmaya değer
Sınırları zorlayan ya da yeni yaklaşımlar arayan kişiler için faydalı olabilir; ama geri kalanlar için, ikinci dereceden denklem çözmeyi sorup karşılığında 100 kategori teorisi makalesi almak gibi bir his veriyor
Fred Herbert’ın listesi asıl yazıdan daha güncel, ama kendi ifadesiyle o da eksiksiz değil. “Designing Data-Intensive Applications”ı olmazsa olmaz sayarken bile, gerçekten anlamak için önce çok sayıda makale okumak gerektiği gibi konuşuyor
Bu tür listeler anlamanın önkoşulu gibi sunulduğunda eşiği yükseltmek gibi hissedilebiliyor
Onlarca yılda biriken başkalarının çalışmaları sayesinde, etkili bir Linux kullanıcısı olmak için 100 nanokernel makalesi okumanız gerekmiyor. İyi bir işletim sistemini sıfırdan yapmak hâlâ zor, ama insanların %99’unun buna ihtiyacı yok; mevcut araçları ustalıkla kullanmak yeterli
Dağıtık sistemlerde de benzer şekilde, en ileri sınırı zorlamıyorsanız bu kadar zor olmak zorunda değil
Araştırmaya derinlemesine dalmaktan çok pratik deneyim isteyen bir yazılım mühendisiyseniz NATS [1] ya da YugaByte [2] ile bir şeyler geliştirmeniz veya [3] gibi uygulamalı bir öğreticiyi denemeniz iyi olur
“Designing Data-Intensive Applications” da okunmaya değer. Tekrar okudukça daha da iyi gelen kitaplardan biri; bu yüzden 100 makale okumamış olsanız bile doğrudan okuyabilirsiniz. Anlamadığınız yerler olursa soru sorup yardım alırsınız; devasa okuma listesini atlamanızda sorun yok
1: https://nats.io/
2: https://www.yugabyte.com/
3: https://pragprog.com/titles/tjgo/distributed-services-with-g...
Buna rağmen CRDT teknolojisinden hiç bahsedilmiyor mu?