Configerator is very much a hodgepodge of Facebook internal systems. You define structs in Thrift, instantiate them in Python, write some validators elsewhere in Python, then compile the whole thing to JSON, and check both the Python and the JSON in (though they were planning stop making you check in the JSON). Having used configerator extensively and Cue for several things more recently, I find Cue’s semantics far more compelling.
The part about distributing it out to the fleet is interesting…but perhaps configerator is not the ideal model because it has been responsible for a number of serious outages in the last couple years.
So it’s good to have this out there as a reference, but be aware that this is not a system that I would blindly clone.
Thanks for the experience report - always handy to have.
Cue does look nice! Though I did find its docs a bit off-putting for needless mathiness (e.g. lattices).
I wouldn’t call it needless mathiness. Once you work out the necessary conditions you need for such a configuration system to work smoothly, it turns out to be a lattice, and once you know that it becomes the north star for design decisions: don’t break the lattice. Plus if you know lattice theory, that one statement throws a huge amount of structure into place immediately.
Lattices and order theory in general are one of the most useful pieces of mathematics I ever learned.