This is an old revision of the document!


Week 2023-W27 in reading

Reactive systems

Sources:

Key properties of a Reactive system:

  • responsive — responds in a reasonable time if possible;
  • resilient — stays responsive even when failures occur (e.g. fail gently, isolate failures so they don't propagate and cause the whole system to fail);
  • elastic — stays responsive under varying load;
  • message-driven — relies on asynchronous communication.

My key take-away here is that asynchronously processed messages update some model behind the scenes, so when the time comes to return some data to the user, it is ready. However, this probably involves eventual consistency and increased complexity.

See also:

Evolving HTTP APIs

Source: Evolving HTTP APIs

  1. Compatible versions shouldn't cause any adjustments (shouldn't change versions).
  2. Avoid major / incompatible versions.
  3. Be backward-compatible, but still limiting the impact. New version requires everyone to adapt, so keeping the same version with some adjustments might make more sense from effort perspective.

Self-contained Systems

Sources:

This idea doesn't sound very innovative, while it does sound a bit strict. Experience tells me being strict is good in theory, while practice one has to be flexible/open and mix things to achieve goals.