{"id":656,"date":"2015-09-05T17:31:33","date_gmt":"2015-09-05T21:31:33","guid":{"rendered":"http:\/\/localhost\/wordpress\/?p=656"},"modified":"2024-02-09T09:38:57","modified_gmt":"2024-02-09T14:38:57","slug":"distributed-systems-links","status":"publish","type":"post","link":"https:\/\/sourcedelica.com\/blog\/2015\/09\/distributed-systems-links\/","title":{"rendered":"Distributed Systems links"},"content":{"rendered":"<p><a href=\"https:\/\/sourcedelica.com\/wordpress\/wp-content\/uploads\/2015\/09\/pg-distrib-logo.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-664 alignleft\" src=\"https:\/\/sourcedelica.com\/wordpress\/wp-content\/uploads\/2015\/09\/pg-distrib-logo.png\" alt=\"pg-distrib-logo\" width=\"237\" height=\"322\" srcset=\"https:\/\/sourcedelica.com\/blog\/wp-content\/uploads\/2015\/09\/pg-distrib-logo.png 300w, https:\/\/sourcedelica.com\/blog\/wp-content\/uploads\/2015\/09\/pg-distrib-logo-221x300.png 221w\" sizes=\"auto, (max-width: 237px) 100vw, 237px\" \/><\/a>A few\u00a0years ago, while researching Zookeeper for a project I was working on, I realized\u00a0that there was a whole field Computer Science,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Distributed_computing\" target=\"_blank\" rel=\"noopener noreferrer\">Distributed Systems<\/a>, that I was totally unfamiliar with.\u00a0That started a journey of discovery that&#8217;s been very rewarding. \u00a0 In <a href=\"https:\/\/groups.google.com\/d\/msg\/akka-user\/Snx8ufCvSEw\/DhiTSIsXSW8J\" target=\"_blank\" rel=\"noopener noreferrer\">response<\/a> to a question on the Akka mailing list I put together a list of links to Distributed Systems resources. \u00a0I&#8217;ve been meaning to translate that email to a blog post for a while.<\/p>\n<p>To start off I would definitely recommend checking out a talk that Jonas Boner from Typesafe gave at Strange Loop called <a href=\"https:\/\/www.youtube.com\/watch?v=U1C5m8b0qg0\" target=\"_blank\" rel=\"noopener noreferrer\">The Road to Akka Cluster and Beyond<\/a>\u00a0(<a href=\"http:\/\/www.slideshare.net\/jboner\/the-road-to-akka-cluster-and-beyond\" target=\"_blank\" rel=\"noopener noreferrer\">slides<\/a>).<\/p>\n<p>Implementation-oriented books that I would recommend for developers are:<\/p>\n<ul>\n<li><a href=\"http:\/\/shop.oreilly.com\/product\/0636920034339.do\">I Heart Logs<\/a> by Jay Kreps, the designer of Kafka (there is also a\u00a0<a href=\"http:\/\/www.oreilly.com\/pub\/e\/3098\">webcast<\/a>).\u00a0 This is a collection of his recent epic <a href=\"https:\/\/engineering.linkedin.com\/distributed-systems\/log-what-every-software-engineer-should-know-about-real-time-datas-unifying\">blog posts<\/a> (30 pages, highly recommended).<\/li>\n<li><a href=\"http:\/\/www.somethingsimilar.com\/2013\/01\/14\/notes-on-distributed-systems-for-young-bloods\/\">Jeff Hodge&#8217;s Notes on Distributed Systems for Young Bloods<\/a> blog post and his <a href=\"https:\/\/www.youtube.com\/watch?v=BKqgGpAOv1w\">Practicalities of Distributed Systems<\/a> videos<\/li>\n<li><a href=\"https:\/\/www.manning.com\/books\/the-little-elixir-and-otp-guidebook\">The Little Elixir and OTP Guidebook<\/a><\/li>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/dn568099.aspx\">Cloud Design Patterns<\/a><\/li>\n<li><a href=\"http:\/\/www.amazon.com\/Reactive-Messaging-Patterns-Actor-Model\/dp\/0133846830\" target=\"_blank\" rel=\"noopener noreferrer\">Reactive Messaging Patterns with the Actor Model<\/a><\/li>\n<li><a href=\"http:\/\/www.enterpriseintegrationpatterns.com\/\">Enterprise Integration Patterns<\/a><\/li>\n<\/ul>\n<p>These\u00a0are all filled with practical advice for building real-world distributed systems.<\/p>\n<p>One thing I found is that there is a big gap between academic and industry knowledge right now.\u00a0 This is discussed in <a href=\"http:\/\/the-paper-trail.org\/blog\/distributed-systems-theory-for-the-distributed-systems-engineer\/\">a post<\/a> on Henry Robinson&#8217;s excellent <a href=\"http:\/\/the-paper-trail.org\/\">Paper Trail<\/a> blog where he provides a guide to digging deeper both on the academic side and by reading research papers written by industry leaders like Google, Yahoo, etc. \u00a0 Definitely read the links in the &#8220;First Steps&#8221; section.\u00a0 The gap is also the topic of <a href=\"http:\/\/brooker.co.za\/blog\/2014\/08\/10\/the-space-between.html\">a post on Marc Brooker&#8217;s blog<\/a> and a <a href=\"http:\/\/muratbuffalo.blogspot.com\/2020\/06\/learning-about-distributed-systems.html\">post on Murat&#8217;s blog<\/a>.\u00a0 Besides papers he links to some other good people to follow like <a href=\"http:\/\/aphyr.com\/\">Aphyr<\/a> and <a href=\"http:\/\/www.bailis.org\/blog\/\">Peter Bailis<\/a>. \u00a0Two blogs that review Distributed Systems papers are the <a href=\"http:\/\/blog.acolyer.com\" target=\"_blank\" rel=\"noopener noreferrer\">Morning Paper<\/a>\u00a0and <a href=\"http:\/\/muratbuffalo.blogspot.com\/\">MetaData<\/a>.\u00a0 I also recommend following <a href=\"http:\/\/bravenewgeek.com\/\">Brave New Geek<\/a>, <a href=\"http:\/\/www.benstopford.com\/\">Ben Stopford<\/a> and\u00a0<a href=\"http:\/\/kellabyte.com\/\">Kellabyte<\/a>, and the <a href=\"https:\/\/hackingdistributed.com\/tag\/nosql\/\">Hacking, Distributed<\/a>, <a href=\"http:\/\/highscalability.com\/\">High Scalability<\/a> and <a href=\"https:\/\/highlyscalable.wordpress.com\/\">Highly Scalable<\/a> blogs.<\/p>\n<p><a href=\"https:\/\/paperswelove.org\/\">Papers We Love<\/a> is a collective of meetups across the world where people present their takes on research papers that they find fascinating.\u00a0 Their web site has <a href=\"https:\/\/paperswelove.org\/categories\/video\/\">videos<\/a> taken at these meetups.\u00a0 They also hold yearly <a href=\"https:\/\/pwlconf.org\/\">conferences<\/a>.<\/p>\n<p>YouTubers are also getting into the act &#8211; for example, Vivek Haldar has a series of videos called <a href=\"https:\/\/www.youtube.com\/playlist?list=PLOuhQnxVenf1pRG42qUD3eLNw9NveF1hh\">Read a Paper<\/a> where he summarizes papers in around ten minutes.<\/p>\n<p>Many times the conferences where the papers are presented also publish videos, slide decks and posters that are much easier to consume for a working developer.\u00a0 If you have a paper that you are really interested in be sure and and check out the web site of the conference where the paper was published.\u00a0 <a href=\"https:\/\/www.usenix.org\/publications\/proceedings\">Usenix<\/a> in particular is really good at this.\u00a0 In addition in the last few years a number of research projects have been creating web sites to promote the research where you can find code, videos and more.\u00a0 For example, check out the site for <a href=\"https:\/\/hermes-protocol.com\/\">Hermes<\/a>, a replication protocol.<\/p>\n<p>Working to fill the gap between academia and industry:<\/p>\n<ul>\n<li>The <a href=\"https:\/\/aws.amazon.com\/builders-library\">Amazon Builder&#8217;s Library<\/a>, a collection of articles on building large systems written by Amazon developers and architects sharing hard won knowledge from building Amazon&#8217;s systems.<\/li>\n<li><a href=\"https:\/\/martinfowler.com\/articles\/patterns-of-distributed-systems\/\">Patterns of Distributed Systems<\/a> by Unmesh Joshi at Thoughtworks.<\/li>\n<li><a href=\"http:\/\/shop.oreilly.com\/product\/0636920032175.do\">Designing Data Intensive Applications<\/a> by Martin Kleppman from the Samza Project<\/li>\n<li><a href=\"https:\/\/www.amazon.com\/Database-Internals-Deep-Distributed-Systems\/dp\/1492040347\">Database Internals<\/a> by Alex Petrov<\/li>\n<li><a href=\"http:\/\/manning.com\/kuhn\/\">Reactive Design Patterns<\/a> by Akka&#8217;s own Roland Kuhn and Typesafe&#8217;s Jamie Allen<\/li>\n<li><a href=\"http:\/\/book.mixu.net\/distsys\/single-page.html\" target=\"_blank\" rel=\"noopener noreferrer\">Distributed Systems for Fun and Profit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/aphyr\/distsys-class\">An Introduction to Distributed Systems<\/a> (by Aphyr)<\/li>\n<\/ul>\n<p>Essential ACM Queue articles<\/p>\n<ul>\n<li><a href=\"http:\/\/queue.acm.org\/detail.cfm?id=2482856\">There&#8217;s Just No Getting around It: You&#8217;re Building a Distributed System<\/a><\/li>\n<li><a href=\"http:\/\/queue.acm.org\/detail.cfm?id=2655736\">The Network is Reliable<\/a><\/li>\n<li><a href=\"http:\/\/queue.acm.org\/detail.cfm?id=1466448\">Eventually Consistent<\/a> by Werner Vogels of Amazon<\/li>\n<li><a href=\"http:\/\/queue.acm.org\/detail.cfm?id=2462076\">Eventual Consistency Today: Limitations, Extensions, and Beyond<\/a><\/li>\n<li><a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2745385\">There is No Now &#8211; Problems with Simultaneity in Distributed Systems<\/a><\/li>\n<\/ul>\n<p>Notable blog posts<\/p>\n<ul>\n<li><a href=\"https:\/\/highlyscalable.wordpress.com\/2012\/09\/18\/distributed-algorithms-in-nosql-databases\/\">Distributed Algorithms in NoSQL Databases<\/a><\/li>\n<li><a href=\"https:\/\/aphyr.com\/posts\/313-strong-consistency-models\">Strong Consistency Models<\/a><\/li>\n<li><a href=\"http:\/\/www.benstopford.com\/2015\/04\/28\/elements-of-scale-composing-and-scaling-data-platforms\/\">Elements of Scale: Composing and Scaling Data Platforms<\/a><\/li>\n<li><a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2745385\">There is No Now<\/a><\/li>\n<\/ul>\n<p>Other reading lists<\/p>\n<ul>\n<li><a href=\"https:\/\/ferd.ca\/a-distributed-systems-reading-list.html\">A Distributed Systems Reading List<\/a><\/li>\n<\/ul>\n<p>Online Courses<\/p>\n<ul>\n<li><a href=\"https:\/\/www.coursera.org\/specialization\/cloudcomputing\/19\">Cloud Computing Concepts Part 1<\/a>\u00a0and <a href=\"https:\/\/www.coursera.org\/course\/cloudcomputing2\" target=\"_blank\" rel=\"noopener noreferrer\">Part 2<\/a>\u00a0&#8211; despite the generic sounding name these classes cover many distributed systems fundamentals<\/li>\n<\/ul>\n<p>I recommend getting familiar with the CAP Theorem.\u00a0 You&#8217;re going to run into it all over the place.<\/p>\n<ul>\n<li><a href=\"http:\/\/www.eecs.berkeley.edu\/~brewer\/cs262b-2004\/PODC-keynote.pdf\">Towards Robust Distributed Systems<\/a> by Eric Brewer, the guy who came up with CAP.<\/li>\n<li><a href=\"http:\/\/www.infoq.com\/articles\/cap-twelve-years-later-how-the-rules-have-changed\">CAP Twelve Years Later<\/a>\u00a0by Eric Brewer<\/li>\n<li><a href=\"http:\/\/pl.atyp.us\/wordpress\/index.php\/2009\/11\/availability-and-partition-tolerance\/\">Availability and Partition Tolerance<\/a><\/li>\n<li><a href=\"http:\/\/cs-www.cs.yale.edu\/homes\/dna\/papers\/abadi-pacelc.pdf\">Consistency Tradeoffs in Modern Database Design<\/a>\u00a0(aka the PACELC paper)<\/li>\n<li><a href=\"http:\/\/groups.csail.mit.edu\/tds\/papers\/Gilbert\/Brewer2.pdf\">Perspectives on the CAP Theorem<\/a><\/li>\n<li><a href=\"http:\/\/thislongrun.blogspot.com\/2015\/03\/the-cap-theorem-series.html\">This Long Run&#8217;s CAP Theorem series<\/a><\/li>\n<\/ul>\n<p>Zookeeper is a Consensus (or Coordination) system. \u00a0Consensus is a major topic in theoretical and practical distributed systems and is what got me started digging into distributed systems originally. \u00a0To start getting familiar with Consensus I recommend:<\/p>\n<ul>\n<li><a href=\"https:\/\/vimeo.com\/105857866\" target=\"_blank\" rel=\"noopener noreferrer\">Distributed Consensus, a.k.a &#8220;What do we eat for lunch?&#8221;<\/a><\/li>\n<li><a href=\"http:\/\/www.ustream.tv\/recorded\/61483409\" target=\"_blank\" rel=\"noopener noreferrer\">Consensus Systems for the Skeptical Architect<\/a><\/li>\n<li>The <a href=\"http:\/\/shop.oreilly.com\/product\/0636920028901.do\" target=\"_blank\" rel=\"noopener noreferrer\">Zookeeper<\/a> book from O&#8217;Reilly<\/li>\n<li><a href=\"http:\/\/thesecretlivesofdata.com\/raft\/\" target=\"_blank\" rel=\"noopener noreferrer\">The Secret Lives of Data<\/a> &#8211; an interactive tutorial on Raft<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=YbZ3zDzDnrw\" target=\"_blank\" rel=\"noopener noreferrer\">Raft &#8211; A Consensus Algorithm for Distributed Logs<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=JEpsBg0AO6o\" target=\"_blank\" rel=\"noopener noreferrer\">Implementing Replicated Logs with Paxos<\/a><\/li>\n<li><a href=\"https:\/\/pwlconf.org\/2019\/heidi-howard\/\">A Generalized Solution to Distributed Consensus<\/a> &#8211; a video of Heidi Howard, the paper&#8217;s author, presenting the paper at Papers We Love Conf 2019.\u00a0 (<a href=\"http:\/\/muratbuffalo.blogspot.com\/2019\/09\/a-generalized-solution-to-distributed.html\">Murat<\/a>&#8216;s and <a href=\"https:\/\/blog.acolyer.org\/2019\/03\/08\/a-generalised-solution-to-distributed-consensus\/\">Adrian<\/a>&#8216;s takes)<\/li>\n<\/ul>\n<p>On the academic textbook side, I have these on my stack to read:<\/p>\n<ul>\n<li><a href=\"https:\/\/cse.buffalo.edu\/~demirbas\/CSE586\/book.pdf\">Introduction to Distributed Systems<\/a> by Paul Sivilotti (free download)<\/li>\n<li><a href=\"https:\/\/www.amazon.com\/Distributed-Systems-Algorithmic-Approach-Information\/dp\/1466552972\">Distributed Systems, an Algorithmic Approach<\/a> by Sukumar Ghosh<\/li>\n<li><a href=\"http:\/\/www.distributedprogramming.net\/\">Introduction to Secure and Reliable Distributed Programming<\/a> by Christian Cachin, Rachid Guerraoui and Lu\u00eds Rodrigues<\/li>\n<li><a href=\"http:\/\/www.amazon.com\/Guide-Reliable-Distributed-Systems-High-Assurance\/dp\/1447124154.\">Guide to Reliable Distributed Systems<\/a> by Ken Birman.\u00a0 Also check out his <a href=\"http:\/\/www.cs.cornell.edu\/Courses\/CS5412\/2014sp\/Syllabus.htm\">recent syllabus<\/a> where there are slides covering the material in the book.\u00a0 Speaking of Birman, he created a well-known distributed group membership algorithm called <a href=\"http:\/\/en.wikipedia.org\/wiki\/Virtual_synchrony\">Virtual Synchrony<\/a>\u00a0that is useful in a lot of use cases.\u00a0 An implementation of Virtual Synchrony is the open source <a href=\"http:\/\/www.jgroups.org\/\">JGroups<\/a>.<\/li>\n<\/ul>\n<p>This is just the tip of the iceberg. \u00a0Besides consensus, other distributed systems topics\u00a0that I&#8217;ve found interesting include\u00a0distributed databases, group membership,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">gossip protocols<\/a>\u00a0(used in Akka, Cassandra and Consul),\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Vector_clock\" target=\"_blank\" rel=\"noopener noreferrer\">time and clocks<\/a>, and peer-to-peer systems.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few\u00a0years ago, while researching Zookeeper for a project I was working on, I realized\u00a0that there was a whole field Computer Science,\u00a0Distributed Systems, that I was totally unfamiliar with.\u00a0That started a journey of discovery that&#8217;s been very rewarding. \u00a0 In response to a question on the Akka mailing list I put together a list of [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,7,6],"tags":[],"class_list":["post-656","post","type-post","status-publish","format-standard","hentry","category-akka","category-distributed-systems","category-zookeeper","entry"],"_links":{"self":[{"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/posts\/656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/comments?post=656"}],"version-history":[{"count":24,"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/posts\/656\/revisions"}],"predecessor-version":[{"id":1450,"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/posts\/656\/revisions\/1450"}],"wp:attachment":[{"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/media?parent=656"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/categories?post=656"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sourcedelica.com\/blog\/wp-json\/wp\/v2\/tags?post=656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}