Scaling and “Gray Failures”
There are known and proven ways to build fault-tolerant systems (erlang! ). An underlying issue with most of these, is that they tend to assume that components are either up or down . Gray Failure is a real thing however — where the component is “failing” (quotes intentional), but the manifestation of this failure isn’t easily categorizable. Think “ flaky I/O ”, “ bufferbloat ”, “ packet loss ”, etc., things that may or may not be considered a failure based upon the impact to the user, interactions with other components, etc. The issue with gray failures is that they increase as the system scales out — in fact, “the complex interactions, interference, and dependencies among cloud components … in a multi-tenancy environment” (•), and the emergent behavior thereof, are the perfect petri-dish for gray failures. A common characteristic of all gray failures is Differential Observability , viz., the behavior of the component varies...