Stateless

  • Does not keep track of state between requests
  • More fault tolerant
    • If a server goes down, no state or data is lost

State can be observed by using distributed caches or databases

Loose Coupling

  • Use well-defined API’s/interfaces for communication
  • Easy to create/modify microservices
  • Components operate independent of each other

Event Driven

  • Services emit/listen to events
  • Allows for non-blocking operations to continue
    • Asynchronous
  • Can help mitigate tight coupling
    • Reducing the risk of cascading failures

Asynchronous architecture introduces the following complexities:

  1. Data consistency
  2. Error handling
  3. Debugging