I implemented and deployed a state synchronization protocol based on CRDTs at my last job. It replaced a protocol that needed a fully connected mesh to function properly, and the entire cluster would suffer a grey failure if a connection was broken or slow. The new protocol was much more resilient, and was able to take advantage of the transitive property of state-based CRDT operations.
My solution for garbage collection was pretty boring. Occasionally, a JSON file was rsynced to each service node with the 'true' state of the system at some time in the past, and the CRDT maintained the new state on top of that JSON file, until the next file got rsynced.
My solution for garbage collection was pretty boring. Occasionally, a JSON file was rsynced to each service node with the 'true' state of the system at some time in the past, and the CRDT maintained the new state on top of that JSON file, until the next file got rsynced.