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:
- Data consistency
- Error handling
- Debugging