Puntos clave
1. Microservicios: Servicios pequeños y autónomos que trabajan juntos
Los microservicios son servicios pequeños y autónomos que trabajan juntos.
Fundamento de los microservicios. La arquitectura de microservicios se basa en el principio de desarrollar software como un conjunto de servicios pequeños e independientes. Cada servicio se enfoca en hacer una cosa bien, se ejecuta en su propio proceso y se comunica a través de mecanismos ligeros como las APIs HTTP/REST. Este enfoque permite una mayor flexibilidad, escalabilidad y mantenibilidad en comparación con las arquitecturas monolíticas.
Beneficios y desafíos. Las ventajas clave de los microservicios incluyen:
- Mejora de la modularidad
- Escalado más fácil de componentes individuales
- Diversidad tecnológica
- Aislamiento mejorado de fallos
- Ciclos de despliegue más rápidos
Sin embargo, los microservicios también presentan desafíos como:
- Mayor complejidad operativa
- Preocupaciones de sistemas distribuidos (por ejemplo, latencia de red, tolerancia a fallos)
- Consistencia de datos entre servicios
2. Arquitectura evolutiva: Adaptándose a los requisitos cambiantes
El papel del arquitecto es ver el panorama general y entender este equilibrio.
Abrazando el cambio. La arquitectura evolutiva enfatiza la necesidad de que los sistemas se adapten a los requisitos cambiantes con el tiempo. Este enfoque reconoce que es imposible predecir todas las necesidades futuras, por lo que se enfoca en crear una base flexible que pueda evolucionar.
Principios clave:
- Cambio incremental: Realizar actualizaciones pequeñas y frecuentes en lugar de grandes e infrecuentes
- Cambio guiado: Usar principios y prácticas para guiar las decisiones arquitectónicas
- Múltiples arquitecturas: Reconocer que diferentes partes del sistema pueden evolucionar a diferentes ritmos
Los arquitectos en este modelo actúan más como planificadores urbanos, estableciendo directrices y restricciones, en lugar de dictar cada detalle. Esto permite a los equipos tomar decisiones locales mientras se asegura la cohesión general del sistema.
3. Modelado de servicios: Definiendo límites y contextos
Nos enfocamos en los límites de nuestros servicios en los límites del negocio, haciendo obvio dónde reside el código para una funcionalidad dada.
Diseño dirigido por el dominio. Modelar servicios de manera efectiva requiere una comprensión profunda del dominio del negocio. El diseño dirigido por el dominio (DDD) proporciona conceptos valiosos para definir los límites de los servicios:
- Contextos delimitados: Áreas del dominio con límites claros
- Lenguaje ubicuo: Un lenguaje común compartido por desarrolladores y expertos del dominio
- Agregados: Conjuntos de objetos del dominio tratados como una unidad
Identificación de límites de servicio:
- Alinear con capacidades del negocio
- Encapsular datos y comportamiento
- Minimizar dependencias entre servicios
- Considerar la estructura del equipo y los patrones de comunicación
Los límites bien definidos conducen a servicios más cohesivos y un acoplamiento más suelto entre ellos, facilitando el desarrollo y despliegue independientes.
4. Estrategias de integración: Elegir el enfoque adecuado para la comunicación
Sé conservador en lo que haces, sé liberal en lo que aceptas de los demás.
Importancia de la integración. La integración efectiva es crucial para que los microservicios trabajen juntos sin problemas. La elección de la tecnología de integración impacta significativamente en la flexibilidad, el rendimiento y la mantenibilidad del sistema.
Patrones clave de integración:
- Comunicación sincrónica: REST, gRPC
- Comunicación asincrónica: Colas de mensajes, transmisión de eventos
- Puertas de enlace API: Para enrutamiento y composición de solicitudes
- Malla de servicios: Para manejar la comunicación entre servicios
Mejores prácticas:
- Usar protocolos agnósticos a la tecnología (por ejemplo, HTTP)
- Implementar lectores tolerantes para manejar cambios con gracia
- Diseñar para fallos con disyuntores y compartimentos
- Considerar arquitecturas impulsadas por eventos para un acoplamiento suelto
La estrategia de integración adecuada depende de su caso de uso específico, requisitos de rendimiento y experiencia del equipo.
5. Dividiendo el monolito: Transición a microservicios
Piensa en nuestro monolito como un bloque de mármol. Podríamos volarlo por completo, pero eso rara vez termina bien. Tiene mucho más sentido ir desbastándolo de manera incremental.
Enfoque incremental. La transición de una arquitectura monolítica a microservicios se realiza mejor de manera gradual. Esto permite a los equipos aprender y adaptarse mientras minimizan el riesgo.
Pasos para dividir un monolito:
- Identificar costuras en la base de código existente
- Extraer contextos delimitados en módulos separados
- Refactorizar estructuras de datos y bases de datos compartidas
- Crear APIs para la comunicación entre módulos
- Extraer módulos en servicios separados
- Implementar nuevas características como microservicios
Desafíos a considerar:
- Dependencias de datos entre servicios
- Integridad transaccional a través de límites de servicio
- Impacto en el rendimiento de la comunicación en red
- Complejidad operativa de gestionar múltiples servicios
Comience con las extracciones más fáciles y menos riesgosas para ganar confianza y experiencia antes de abordar partes más complejas del sistema.
6. Técnicas de despliegue: Asegurando fiabilidad y escalabilidad
Si hacer algo es correcto pero difícil, debemos esforzarnos por hacerlo más fácil.
Despliegue automatizado. Un despliegue fiable y escalable es crítico para el éxito de los microservicios. Las prácticas de Integración Continua y Entrega Continua (CI/CD) son esenciales para gestionar la complejidad de despliegue incrementada.
Técnicas clave de despliegue:
- Infraestructura como Código (IaC)
- Contenerización (por ejemplo, Docker)
- Plataformas de orquestación (por ejemplo, Kubernetes)
- Despliegues azul-verde
- Lanzamientos canarios
Consideraciones de despliegue:
- Descubrimiento de servicios y gestión de configuración
- Monitoreo y registro
- Seguridad y control de acceso
- Migraciones de bases de datos y consistencia de datos
Invierta en herramientas y automatización para hacer los despliegues más fáciles, rápidos y fiables. Esto permite a los equipos desplegar con frecuencia y confianza, realizando todos los beneficios de la arquitectura de microservicios.
7. Pruebas de microservicios: Manteniendo la calidad en un sistema distribuido
Cuantas más partes móviles, más frágiles pueden ser nuestras pruebas y menos deterministas son.
Estrategia de pruebas integral. Probar microservicios requiere un enfoque multinivel para asegurar tanto la calidad de los servicios individuales como el comportamiento general del sistema.
Pirámide de pruebas para microservicios:
- Pruebas unitarias: Pruebas rápidas y enfocadas para componentes individuales
- Pruebas de integración: Verificar interacciones entre servicios
- Pruebas de contrato: Asegurar que los servicios cumplan con las interfaces acordadas
- Pruebas de extremo a extremo: Validar el comportamiento completo del sistema
Desafíos de pruebas:
- Complejidad incrementada debido a la naturaleza distribuida
- Gestión de datos de prueba entre servicios
- Simulación de entornos similares a producción
- Manejo de interacciones asincrónicas
Enfatice los ciclos de retroalimentación rápida con pruebas unitarias e integradas, mientras usa menos pruebas de extremo a extremo, cuidadosamente elegidas, para validar rutas críticas. Considere usar contratos impulsados por el consumidor para gestionar las dependencias de servicios de manera efectiva.
8. Monitoreo y seguridad: Manteniendo los microservicios saludables y protegidos
Un buen registro, y específicamente la capacidad de agregar registros de múltiples sistemas, no se trata de prevención, pero puede ayudar a detectar y recuperarse de cosas malas que suceden.
Enfoque holístico. El monitoreo y la seguridad efectivos son cruciales para mantener un ecosistema de microservicios saludable. Estos aspectos se vuelven más desafiantes e importantes en sistemas distribuidos.
Mejores prácticas de monitoreo:
- Registro centralizado y agregación de registros
- Trazado distribuido (por ejemplo, usando IDs de correlación)
- Alertas en tiempo real y paneles de control
- Monitoreo del rendimiento de aplicaciones (APM)
- Monitoreo sintético para rutas críticas
Consideraciones de seguridad:
- Autenticación y autorización de servicio a servicio
- Puertas de enlace API para seguridad perimetral
- Gestión de secretos
- Segmentación de red
- Auditorías de seguridad regulares y pruebas de penetración
Implemente una estrategia de defensa en profundidad, asegurando tanto el perímetro como los servicios individuales. Use la automatización para asegurar la aplicación consistente de políticas de seguridad en todos los servicios.
9. Ley de Conway: Alineando organización y diseño del sistema
La ley de Conway destaca los peligros de intentar imponer un diseño de sistema que no coincide con la organización.
Impacto organizacional. La Ley de Conway establece que el diseño del sistema refleja las estructuras de comunicación dentro de una organización. Este principio tiene implicaciones significativas para la arquitectura de microservicios.
Alineando equipos y servicios:
- Organizar equipos en torno a capacidades del negocio
- Empoderar a los equipos con propiedad de extremo a extremo de los servicios
- Minimizar dependencias entre equipos
- Fomentar una cultura de colaboración y responsabilidad compartida
Consideraciones:
- Tamaño y composición del equipo
- Patrones y herramientas de comunicación
- Procesos de toma de decisiones
- Desarrollo de habilidades y compartición de conocimientos
Reconozca que la estructura organizacional y la arquitectura del sistema están entrelazadas. Evolucione ambos en conjunto para crear un entorno propicio para el desarrollo y operación exitosos de microservicios.
10. Escalando microservicios: Manejo del crecimiento y fallos
A gran escala, incluso si compras el mejor equipo, el hardware más caro, no puedes evitar el hecho de que las cosas pueden y fallarán.
Diseñando para la escala y la resiliencia. Las arquitecturas de microservicios deben diseñarse para manejar tanto el crecimiento en la demanda como los fallos inevitables de manera elegante.
Estrategias de escalado:
- Escalado horizontal (agregar más instancias)
- Escalado vertical (aumentar recursos por instancia)
- Caché (en memoria, distribuida)
- Fragmentación y replicación de bases de datos
- Procesamiento asincrónico y arquitecturas impulsadas por eventos
Patrones de resiliencia:
- Disyuntores para prevenir fallos en cascada
- Compartimentos para aislamiento de fallos
- Tiempos de espera y reintentos con retroceso exponencial
- Degradación gradual de la funcionalidad
Consideraciones del teorema CAP:
- Consistencia
- Disponibilidad
- Tolerancia a particiones
Entienda que se requieren compensaciones al escalar sistemas distribuidos. Priorice según sus requisitos y restricciones específicos. Implemente prácticas de observabilidad e ingeniería del caos para mejorar continuamente la resiliencia del sistema.
Última actualización:
FAQ
What's Building Microservices by Sam Newman about?
- Microservices Architecture: The book explores microservices, which are small, autonomous services that collaborate to form a system. It highlights how this architecture can enhance software delivery speed and flexibility.
- Business Domain Focus: Microservices are modeled around business domains, aligning software design with business needs and avoiding issues of monolithic architectures.
- Practical Guidance: Sam Newman provides real-world examples from companies like Netflix and Amazon, offering a comprehensive guide for adopting or understanding microservices.
Why should I read Building Microservices by Sam Newman?
- Comprehensive Resource: It covers design, development, deployment, testing, and maintenance of microservices, making it ideal for those transitioning from monolithic systems.
- Real-World Examples: The book includes insights from organizations that have successfully implemented microservices, providing practical perspectives and lessons learned.
- Continuous Learning: It encourages embracing continuous learning to keep up with the fast-evolving nature of microservices technology and practices.
What are the key takeaways of Building Microservices by Sam Newman?
- Microservices Benefits: The book outlines benefits like improved scalability, resilience, and quick adoption of new technologies due to service autonomy.
- Loose Coupling and High Cohesion: Emphasizes designing services to be loosely coupled and highly cohesive, facilitating easier maintenance and updates.
- Integration Strategies: Discusses synchronous and asynchronous communication strategies, crucial for maintaining service autonomy and effective collaboration.
What is the definition of microservices according to Building Microservices by Sam Newman?
- Small, Autonomous Services: Defined as "small, autonomous services that work together," highlighting their independence and functionality without reliance on others.
- Business Functionality Focus: Each microservice handles a specific business capability, aligning with organizational goals and prioritizing work effectively.
- Decoupled Communication: Services communicate through well-defined APIs, maintaining loose coupling and enabling independent development and deployment.
How does Building Microservices by Sam Newman suggest modeling services?
- Bounded Contexts: Introduces bounded contexts from Domain-Driven Design to define service boundaries, with each context representing a specific responsibility.
- Loose Coupling and High Cohesion: Stresses that related functionality should reside within the same service, while unrelated functionality should be separated.
- Iterative Approach: Recommends refining service boundaries over time to accommodate changes in business requirements and technology.
What are the integration strategies discussed in Building Microservices by Sam Newman?
- Synchronous vs. Asynchronous: Contrasts synchronous communication, where a service waits for a response, with asynchronous communication, where services operate independently.
- Event-Driven Architecture: Advocates for event-driven architectures, where services emit events to signal state changes, promoting loose coupling.
- REST and RPC: Discusses RESTful APIs and Remote Procedure Calls for service communication, emphasizing technology-agnostic APIs for flexibility.
What are the challenges of deploying microservices as outlined in Building Microservices by Sam Newman?
- Increased Complexity: Warns of the complexity due to interdependencies between services, which can lead to deployment challenges without proper management.
- Continuous Integration and Delivery: Emphasizes robust CI/CD practices to manage microservices effectively, ensuring quick and reliable deployments.
- Monitoring and Management: Suggests comprehensive monitoring solutions to track the health and performance of each service independently.
How does Building Microservices by Sam Newman address testing in microservices?
- Types of Tests: Categorizes tests into technology-facing and business-facing, including unit, integration, and end-to-end tests for service reliability.
- Consumer-Driven Contracts: Introduces consumer-driven contracts to validate service interactions, ensuring changes in one service don't break dependent services.
- Automated Testing: Advocates for automated testing to maintain quality and speed in deployment, allowing confident release of changes.
What is the significance of Conway’s Law in Building Microservices by Sam Newman?
- Organizational Structure and Architecture: Discusses Conway’s Law, which states that system designs reflect the communication structures of organizations.
- Team Autonomy: Emphasizes organizing microservices around autonomous teams that own specific services, fostering accountability and ownership.
- Impact on Design: Highlights the importance of aligning team structures with service boundaries for effective collaboration and faster feature delivery.
What are the best quotes from Building Microservices by Sam Newman and what do they mean?
- Freedom to React: "Microservices give us significantly more freedom to react and make different decisions," highlighting agility compared to monolithic architectures.
- Service Autonomy: "The golden rule: can you make a change to a service and deploy it by itself without changing anything else?" emphasizes designing independent services.
- Postel's Law: "Be conservative in what you do, be liberal in what you accept from others," underscores flexibility in service interactions while maintaining strict internal standards.
What are some architectural safety measures discussed in Building Microservices by Sam Newman?
- Circuit Breakers: Prevent cascading failures by stopping further calls to a failing service, allowing it to recover without being overwhelmed.
- Bulkheads: Isolate different parts of a system to prevent a failure in one area from affecting others, enhancing resilience and stability.
- Timeouts: Setting appropriate timeouts for service calls to avoid hanging requests, ensuring services can fail fast and recover effectively.
How does Building Microservices by Sam Newman suggest handling service discovery?
- Dynamic Service Registries: Discusses using tools like Consul and Eureka for managing service discovery, allowing easy registration and discovery of services.
- DNS as a Solution: Mentions DNS for service discovery, though it may not suit highly dynamic environments, suggesting load balancers to mitigate limitations.
- Human-Friendly Interfaces: Emphasizes creating user-friendly interfaces for service discovery, aiding developers in finding and understanding available services.
Reseñas
Building Microservices recibe críticas mixtas, con muchos elogiando su visión general exhaustiva de los conceptos de microservicios y sus consejos prácticos. Los lectores aprecian el enfoque cauteloso del autor y los ejemplos del mundo real. Los críticos señalan la falta de profundidad del libro en algunos temas y su potencial para sobrevalorar los microservicios. Muchos lo consideran valioso para principiantes, pero menos útil para arquitectos experimentados. El libro abarca varios aspectos de los microservicios, incluyendo diseño, implementación, pruebas y escalado. Algunos lectores desearon más detalles concretos de implementación, mientras que otros valoraron su perspectiva de alto nivel sobre la arquitectura de software.
Similar Books









