Henry Robinson
the-paper-trail.org · Personal blog · on HN since 2010
Henry Robinson, a distributed systems engineer, writes about distributed systems theory, FLP impossibility, Kafka, and storage.
What HN saysHN recommends it as a theory-focused distributed systems blog, and commenters link his FLP impossibility tour and his reading list.
42HN people shared it
17linked it in comments
41stories submitted
1.6Kstory points
2 years agolast shared
2010people per year2026
Most-shared posts
- 1Distributed Systems Theory for the Distributed Systems Engineer6 people · 41 points · first shared 2018 · 1 comments on HN
- 2A Brief Tour of FLP Impossibility5 people · 5 points · first shared 2016 · discussion on HN
- 3Distributed systems theory for the distributed systems engineer4 people · 473 points · first shared 2014 · 23 comments on HN
- 4The Elephant was a Trojan Horse: On the Death of Map-Reduce at Google3 people · 220 points · first shared 2014 · 119 comments on HN
- 5Homepage3 people · first shared 2018
- 6Advanced Computer Science Courses2 people · 256 points · first shared 2011 · 46 comments on HN
- 7Exactly-once or not, atomic broadcast is still impossible in Kafka2 people · 82 points · first shared 2017 · 31 comments on HN
- 8Columnar Storage2 people · 39 points · first shared 2013 · 15 comments on HN
- 9Beating hash tables with trees? The ART-ful radix trie2 people · 9 points · first shared 2018 · 1 comments on HN
- 10Consensus Protocols: Paxos2 people · 7 points · first shared 2011 · discussion on HN
- 11Paper notes: Masstree – cache craftiness for fast multicore key-value storage2 people · 6 points · first shared 2018 · discussion on HN
- 12My notes on AWS’ Physalia database2 people · 1 points · first shared 2020 · discussion on HN
- 13Masstree: A cache-friendly mashup of tries and B-trees1 people · 165 points · first shared 2018 · 21 comments on HN
- 14Beating hash tables with trees? The ART-ful radix trie1 people · 152 points · first shared 2018 · 40 comments on HN
- 15Making algorithms lock-free with Read-Copy Update (RCU)1 people · 121 points · first shared 2016 · 57 comments on HN
What HN people wrote when they linked it
sdht0 · 2021-03-22
The High Scalability blog [0] complements such courses nicely with curated lists of real world distributed systems and practices.
I also found this reading list [1] a great reference.
[0] http://highscalability.com
[1] https://www.the-paper-trail.org/post/2014-08-09-distributed-systems-th…
hugofirth · 2021-02-01
I have many recommendations of different kinds:
## Blogs:
- http://muratbuffalo.blogspot.com/
- https://bartoszsypytkowski.com/
- https://decentralizedthoughts.github.io/
- https://www.the-paper-trail.org/
- https://blog.acolyer.org/
- https://pathelland.substack.com/
## Other web resources
- https://aws.amazon.com/builders-library/ - set of resources from Amazon about building distributed systems
- https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItd… - lecture series from Cambridge
## Books
- https://www.cl.cam.ac.uk/teaching/1213/PrincComm/mfcn.pdf - A great book on the maths of networking (probability, queuing theory etc...)
HenryR · 2018-07-14
Unfortunately not (my blog is http://the-paper-trail.org but tends to be more theoretical than practical). That would make a good post though!
yencabulator · 2024-07-21
It's a huge field, basically distributed computing, burdened here with the glorious purpose of durable data storage. Any introductory text long enough becomes essentially a university-level computer science course.
RADOS is the underlying storage protocol used by Ceph (https://ceph.com/). Ceph is a distributed POSIX-compliant (very few exceptions) filesystem project that along the way implemented simpler things such as block devices for virtual machines and S3-compatible object storage. Clients send read/write/arbitrary-operation commands to OSDs (the storage servers), which deal internally with consistency, replication, recovery from data loss, and so on. Replication is usually leader and two followers. A write is only acknowledged after the OSD can guarantee that all later reads -- including ones sent to replicas -- will see the write. You can implement a filesystem or network block device on top of that, run a database on it, and not suffer data loss. But every write needs to be communicated to replicas, replica crashes need to be resolved quickly to be able to continue accepting writes (to maintain the strong consistency requirement), and so on.
On the other end of the spectrum, we have Cassandra. Cassandra is roughly a key-value store where the value consists of named cells, think SQL table columns. Concurrent writes to the same cell are resolved by Last Write Wins (LWW) (by timestamp, ties resolved by comparing values). Writes going to different servers act as…
jamesblonde · 2016-02-10
You mean in the asynchronous systems model, in the presence of failures, it is impossible to write a reliable failure detector:
http://the-paper-trail.org/blog/a-brief-tour-of-flp-impossibility/
However, you can write a failure detector for a practical system with the help of omega (weakest failure detector):
http://www.cs.utexas.edu/~lorenzo/corsi/cs380d/papers/p685-chandra.pdf
In practice, failure detectors mean timeouts. What I am arguing is that you can have systems that adapt their timeouts for failure (such as our one), based on the current level of network congestion or load or whatever. The setting/changing of the timeout is averaged over a period of time, to ensure it is high enough to not give false positives. You could do the same approach at the per message level, but for all possible messages, it may be prohibitive. If you have a small number of messages, it may work. The problem with messages, compared to failure detection, however, is the following: how do you figure out you have had a false positive? For failure detection it's easy: the timeout expired, butre i'm still alive and my heartbeat arrives late, so we increase the timeout for that node. Vector clocks (fencing tokens) make it easier to reliably find out if messages arrive very late (identify false positives).
ignoramous · 2023-06-06
afaik, that's how it is envisioned to be used. Many databases rather one big monolith. The era of microdbs is here. Who's not going to bite?
See also: https://archive.is/e7u9x / https://www.the-paper-trail.org/post/2020-04-06-physalia
avinassh · 2021-10-21
You may try Database Papers slack, run by Alex Petrov of Database Internals fame [0]. You can also try Dist Sys Slack group by Henry Robinson (Paper Trail blog) [1]. The invite link is broken, so you may have to contact the author.
I am noob at database things, I am also interested in building one for learning purposes. If you find any groups to talk about Database Internals, please let me know as well (my details in my bio).
[0] - https://databasspapers.herokuapp.com/
[1] - https://www.the-paper-trail.org/page/dist-sys-slack/
scriptnull · 2021-05-27
Time to pull up my RSS reader!
https://drewdevault.com/
http://jvns.ca/
https://www.benkuhn.net/
https://danluu.com/
https://scattered-thoughts.net/
http://antirez.com/
https://www.kalzumeus.com/
https://neilkakkar.com/
https://zachholman.com/
http://rachelbythebay.com/w/
https://endler.dev/
https://www.expatsoftware.com/articles/
https://www.the-paper-trail.org/
https://tonsky.me/
https://dave.cheney.net/
https://blog.wesleyac.com/
https://blog.samaltman.com/
srijanshetty · 2019-10-25
This is probably the most authoritative list I've seen:
https://www.the-paper-trail.org/post/2014-08-09-distributed-systems-th…
truncate · 2019-09-01
Start with understanding "Consensus problem". Paxos is one of the famous solution. There is blog called "The Paper Trail" which has lots of articles on this topic[1]. You should start with the oldest post IMO (from Three General Proble,, FLP impossibility, 2/3 phase locking, to Paxos). Once you have an idea, you can readup the "Paxos made simple"[2].
In distributed systems, each node needs to agree on facts (which could be value of a key, ordering of operations on an object etc...), and Paxos helps you with that.
[1] https://www.the-paper-trail.org/tags/consensus/
[2] https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
cottonseed · 2018-08-04
You might find some of these references useful:
Resources for Getting Started with Distributed Systems https://caitiem.com/2017/09/07/getting-started-with-distributed-system…
Distributed systems theory for the distributed systems engineer http://www.the-paper-trail.org/post/2014-08-09-distributed-systems-the…
Distributed Systems for Fun and Profit http://book.mixu.net/distsys/
Notes on the Theory of Distributed Systems http://cs-www.cs.yale.edu/homes/aspnes/classes/465/notes.pdf
malandrew · 2017-06-29
An overview of FLP Impossibility
http://the-paper-trail.org/blog/a-brief-tour-of-flp-impossibility/
sumodirjo · 2015-06-08
geofft · 2015-02-08
The link makes more sense without the anchor:
http://the-paper-trail.org/blog/the-elephant-was-a-trojan-horse-on-the…
kylemaxwell · 2011-06-13
Of course, many people don't ever cross the gulf between "i can haz programming" and actual computer science. That doesn't mean they /can't/ self-direct themselves.
http://the-paper-trail.org/blog/?page_id=152 (from HN recently)
http://overhack.wordpress.com/2011/06/01/self-directed-computer-scienc… (my own)
switch33 · 2014-11-02
"That could work completely offline and sync transaction data periodically with the central server."
From what I've gathered you want the app to sync data when possible but still work as it should when offline? There are several solutions in the space of this.
A simple solution would be to split or abstract the logic with handling the data versus the functionality of the mobile app itself. In which case you should not be tied down to specific backends.
Anything that works for mongodb or other databases you can usually find something that converts said backend to something working for postgres or whatever for server side.
As for mobile your data backend should be something lightweight and it may be beneficial to use something that is agnostic to mobile like html5. Key players for web data usually are Indexedb and somewhat basket.js : https://addyosmani.github.io/basket.js/ . As the web is usually the way of using what mobile apps are using for storage gathered from a look at angular.js in retrospect.
Some of the other stuff you mentioned:
A more accurate terminology for what you may be looking for in the future for communicating with several distributed systems would be a CRDT key-value(for example; https://github.com/dominictarr/crdt ) if you want it to be purely distributed over many devices completely and provide the same updates to many devices. There is still a lot of on-going research in the area with Riak and Redis having somewhat successful uses in the box at…
mjb · 2013-09-17
That depends on what level of book, and what you want to learn from it. On "how real distributed systems are built", there isn't a really good book available in my opinion. I liked The Datacenter as a Computer, but it's scope is fairly narrow and is more focused on global infrastructure issues than software design issues. On the math behind distributed systems, Nancy Lynch's book Distributed Algorithms (http://www.amazon.com/Distributed-Algorithms-Kaufmann-Management-Syste… is my favorite, but it's getting to be quite out-of-date.
Absent a book, there are a lot of great resources online. High Scalability(http://highscalability.com/) has a good amount of quality links to distributed systems content, and some editorial content of varying quality. In general, it's a good site to follow if you're interested in how distributed systems are being used in industry. I also like to follow Aphyr's blog(http://aphyr.com/), Daniel Abadi's blog(http://dbmsmusings.blogspot.com/), and Henry Robinson's blog(http://the-paper-trail.org/blog/) and Peter Bailis's blog(http://www.bailis.org/).