Published on

Top key points from the book Building Microservice by Sam Newman

Authors
  1. Microservices are an architectural approach to building large, complex software systems that are composed of small, independent services that communicate with each other through APIs.

  2. Microservices are designed to be loosely coupled, independently deployable, and scalable.

  3. Microservices offer several benefits, including increased agility, flexibility, and scalability.

  4. Microservices also present several challenges, including increased complexity, distributed systems management, and testing.

  5. Microservices should be designed around business capabilities, rather than technical concerns.

  6. Each microservice should have a single responsibility, and should be small enough to be easily understood and maintained.

  7. Communication between microservices should be done through APIs, using lightweight protocols such as HTTP and REST.

  8. Microservices should be deployed independently of one another, using automated deployment and testing tools.

  9. Monitoring and logging are critical for managing microservices, as they provide visibility into the system and can help identify issues.

  10. Microservices can be implemented using a variety of programming languages and technologies, including Java, Python, Node.js, and Docker.

  11. Microservices should be designed with fault tolerance and resilience in mind, using techniques such as circuit breakers and bulkheads.

  12. Testing is critical for ensuring the reliability and scalability of microservices, and should be done at all levels of the system.

  13. Microservices should be versioned and documented to ensure that they can be easily understood and maintained.

  14. Containerization, using tools such as Docker, can simplify the deployment and management of microservices.

  15. Service discovery and registration are important for managing the dynamic nature of microservices, and can be done using tools such as Consul and ZooKeeper.

  16. Polyglot persistence is an approach to data storage that allows different microservices to use different databases or data storage technologies.

  17. Microservices can be orchestrated using tools such as Kubernetes and Apache Mesos.

  18. Event-driven architecture can be used to decouple microservices and enable asynchronous communication between them.

  19. Microservices can be monitored using a variety of tools, including Prometheus and Grafana.

  20. API gateways can be used to provide a single entry point for clients to access multiple microservices.

  21. DevOps practices, such as continuous integration and deployment, are critical for managing the complexity of microservices.

  22. Microservices can be secured using techniques such as OAuth and JWT.

  23. Microservices should be designed with scalability in mind, using techniques such as horizontal scaling and load balancing.

  24. Performance testing is critical for ensuring that microservices can handle the expected load.

  25. Microservices can be designed to be resilient to failure, using techniques such as retries and timeouts.

  26. Microservices should be designed to be easily deployable and maintainable, using tools such as Ansible and Chef.

  27. Monitoring and logging are critical for managing the complexity of microservices, and can be done using tools such as ELK stack and Splunk.

  28. Microservices can be designed to be fault-tolerant, using techniques such as circuit breakers and bulkheads.

  29. Deployment automation is critical for managing the complexity of microservices, and can be done using tools such as Jenkins and Travis CI.

  30. Microservices are not a silver bullet, and should only be used when they provide a clear benefit over other architectural approaches.