I'm a big fan of Chain Replication (the CRAQ paper [1] mentioned is one of my favorites)
Something I'm curious about: How does a recovering node know that it is healthy enough to serve requests? Is there some anti-entropy protocol used between the tail and the recovering node?
[1] https://www.usenix.org/legacy/event/usenix09/tech/full_paper...