Punti chiave
1. Microservizi: Piccoli servizi autonomi che lavorano insieme
I microservizi sono piccoli servizi autonomi che collaborano tra loro.
Fondamenti dei microservizi. L'architettura a microservizi si basa sul principio di sviluppare software come una suite di piccoli servizi indipendenti. Ogni servizio è focalizzato su un compito specifico, opera nel proprio processo e comunica tramite meccanismi leggeri come le API HTTP/REST. Questo approccio consente una maggiore flessibilità, scalabilità e manutenibilità rispetto alle architetture monolitiche.
Vantaggi e sfide. I principali vantaggi dei microservizi includono:
- Maggiore modularità
- Scalabilità più semplice dei singoli componenti
- Diversità tecnologica
- Migliore isolamento dei guasti
- Cicli di distribuzione più rapidi
Tuttavia, i microservizi introducono anche sfide come:
- Maggiore complessità operativa
- Preoccupazioni relative ai sistemi distribuiti (ad es., latenza di rete, tolleranza ai guasti)
- Coerenza dei dati tra i servizi
2. Architettura evolutiva: Adattarsi ai requisiti in cambiamento
Il ruolo dell'architetto è guardare il quadro generale e comprendere questo equilibrio.
Abbracciare il cambiamento. L'architettura evolutiva sottolinea la necessità che i sistemi si adattino ai requisiti in cambiamento nel tempo. Questo approccio riconosce che è impossibile prevedere tutte le esigenze future, quindi si concentra sulla creazione di una base flessibile che possa evolversi.
Principi chiave:
- Cambiamento incrementale: Effettuare aggiornamenti piccoli e frequenti piuttosto che grandi e rari
- Cambiamento guidato: Utilizzare principi e pratiche per orientare le decisioni architettoniche
- Architetture multiple: Riconoscere che diverse parti del sistema possono evolversi a ritmi diversi
In questo modello, gli architetti agiscono più come pianificatori urbani, stabilendo linee guida e vincoli, piuttosto che dettare ogni dettaglio. Questo consente ai team di prendere decisioni locali garantendo al contempo la coesione complessiva del sistema.
3. Modellazione dei servizi: Definire confini e contesti
Ci concentriamo sui confini dei nostri servizi in base ai confini aziendali, rendendo ovvio dove risiede il codice per una determinata funzionalità.
Design orientato al dominio. Modellare i servizi in modo efficace richiede una profonda comprensione del dominio aziendale. Il design orientato al dominio (DDD) fornisce concetti preziosi per definire i confini dei servizi:
- Contesti delimitati: Aree del dominio con confini chiari
- Linguaggio ubiquo: Un linguaggio comune condiviso da sviluppatori ed esperti di dominio
- Aggregati: Gruppi di oggetti di dominio trattati come un'unità
Identificazione dei confini dei servizi:
- Allinearsi con le capacità aziendali
- Incapsulare dati e comportamenti
- Minimizzare le dipendenze tra i servizi
- Considerare la struttura del team e i modelli di comunicazione
Confini ben definiti portano a servizi più coesi e a un accoppiamento più sciolto tra di essi, facilitando lo sviluppo e la distribuzione indipendenti.
4. Strategie di integrazione: Scegliere l'approccio giusto per la comunicazione
Sii conservativo in ciò che fai, sii liberale in ciò che accetti dagli altri.
Importanza dell'integrazione. Un'integrazione efficace è cruciale affinché i microservizi lavorino insieme senza problemi. La scelta della tecnologia di integrazione influisce significativamente sulla flessibilità, sulle prestazioni e sulla manutenibilità del sistema.
Modelli di integrazione chiave:
- Comunicazione sincrona: REST, gRPC
- Comunicazione asincrona: Code di messaggi, streaming di eventi
- API gateway: Per il routing e la composizione delle richieste
- Service mesh: Per gestire la comunicazione tra servizi
Migliori pratiche:
- Utilizzare protocolli indipendenti dalla tecnologia (ad es., HTTP)
- Implementare lettori tolleranti per gestire i cambiamenti in modo fluido
- Progettare per il fallimento con circuit breaker e compartimenti stagni
- Considerare architetture basate su eventi per un accoppiamento sciolto
La giusta strategia di integrazione dipende dal tuo caso d'uso specifico, dai requisiti di prestazione e dalle competenze del team.
5. Suddividere il monolite: Transizione ai microservizi
Considera il nostro monolite come un blocco di marmo. Potremmo farlo esplodere tutto, ma raramente finisce bene. Ha molto più senso lavorarci sopra in modo incrementale.
Approccio incrementale. La transizione da un'architettura monolitica a microservizi è meglio effettuata gradualmente. Questo consente ai team di apprendere e adattarsi riducendo al minimo il rischio.
Passi per suddividere un monolite:
- Identificare le giunture nel codice esistente
- Estrarre contesti delimitati in moduli separati
- Rifattorizzare le strutture dati condivise e i database
- Creare API per la comunicazione intermodulare
- Estrarre i moduli in servizi separati
- Implementare nuove funzionalità come microservizi
Sfide da considerare:
- Dipendenze dei dati tra i servizi
- Integrità transazionale oltre i confini dei servizi
- Impatto sulle prestazioni della comunicazione di rete
- Complessità operativa nella gestione di più servizi
Inizia con le estrazioni più semplici e meno rischiose per costruire fiducia ed esperienza prima di affrontare parti più complesse del sistema.
6. Tecniche di distribuzione: Garantire affidabilità e scalabilità
Se fare qualcosa è giusto ma difficile, dobbiamo sforzarci di semplificare le cose.
Distribuzione automatizzata. Un'implementazione affidabile e scalabile è fondamentale per il successo dei microservizi. Le pratiche di Integrazione Continua e Distribuzione Continua (CI/CD) sono essenziali per gestire la complessità aumentata della distribuzione.
Tecniche di distribuzione chiave:
- Infrastruttura come codice (IaC)
- Containerizzazione (ad es., Docker)
- Piattaforme di orchestrazione (ad es., Kubernetes)
- Distribuzioni blue-green
- Rilasci canary
Considerazioni sulla distribuzione:
- Scoperta dei servizi e gestione della configurazione
- Monitoraggio e registrazione
- Sicurezza e controllo degli accessi
- Migrazioni di database e coerenza dei dati
Investi in strumenti e automazione per rendere le distribuzioni più semplici, veloci e affidabili. Questo consente ai team di distribuire frequentemente con fiducia, realizzando i pieni benefici dell'architettura a microservizi.
7. Testare i microservizi: Mantenere la qualità in un sistema distribuito
Più parti in movimento ci sono, più fragili possono essere i nostri test e meno deterministici.
Strategia di test completa. Testare i microservizi richiede un approccio multilivello per garantire sia la qualità dei singoli servizi che il comportamento complessivo del sistema.
Piramide dei test per i microservizi:
- Test unitari: Test rapidi e mirati per singoli componenti
- Test di integrazione: Verificare le interazioni tra i servizi
- Test di contratto: Assicurarsi che i servizi soddisfino le interfacce concordate
- Test end-to-end: Validare il comportamento dell'intero sistema
Sfide nei test:
- Complessità aumentata a causa della natura distribuita
- Gestire i dati di test tra i servizi
- Simulare ambienti simili alla produzione
- Gestire interazioni asincrone
Sottolinea i loop di feedback rapidi con test unitari e di integrazione, utilizzando meno test end-to-end, scelti con attenzione, per convalidare i percorsi critici. Considera l'uso di contratti guidati dai consumatori per gestire efficacemente le dipendenze tra i servizi.
8. Monitoraggio e sicurezza: Mantenere i microservizi sani e protetti
Una buona registrazione, e in particolare la capacità di aggregare i log da più sistemi, non riguarda la prevenzione, ma può aiutare a rilevare e recuperare da eventi negativi.
Approccio olistico. Un monitoraggio e una sicurezza efficaci sono cruciali per mantenere un ecosistema di microservizi sano. Questi aspetti diventano più impegnativi e importanti nei sistemi distribuiti.
Migliori pratiche di monitoraggio:
- Registrazione centralizzata e aggregazione dei log
- Tracciamento distribuito (ad es., utilizzando ID di correlazione)
- Allerta in tempo reale e dashboard
- Monitoraggio delle prestazioni delle applicazioni (APM)
- Monitoraggio sintetico per percorsi critici
Considerazioni sulla sicurezza:
- Autenticazione e autorizzazione tra servizi
- API gateway per la sicurezza al confine
- Gestione dei segreti
- Segmentazione della rete
- Audit di sicurezza regolari e test di penetrazione
Implementa una strategia di difesa in profondità, proteggendo sia il perimetro che i singoli servizi. Utilizza l'automazione per garantire l'applicazione coerente delle politiche di sicurezza in tutti i servizi.
9. La legge di Conway: Allineare organizzazione e design del sistema
La legge di Conway evidenzia i pericoli di cercare di imporre un design di sistema che non corrisponde all'organizzazione.
Impatto organizzativo. La legge di Conway afferma che il design del sistema rispecchia le strutture di comunicazione all'interno di un'organizzazione. Questo principio ha implicazioni significative per l'architettura a microservizi.
Allineare team e servizi:
- Organizzare i team attorno alle capacità aziendali
- Dare potere ai team con la proprietà end-to-end dei servizi
- Minimizzare le dipendenze tra team
- Promuovere una cultura di collaborazione e responsabilità condivisa
Considerazioni:
- Dimensione e composizione del team
- Modelli e strumenti di comunicazione
- Processi decisionali
- Sviluppo delle competenze e condivisione della conoscenza
Riconosci che la struttura organizzativa e l'architettura del sistema sono intrecciate. Evolvi entrambi in tandem per creare un ambiente favorevole allo sviluppo e all'operazione di microservizi di successo.
10. Scalare i microservizi: Gestire la crescita e il fallimento
Su larga scala, anche se acquisti il miglior kit, l'hardware più costoso, non puoi evitare il fatto che le cose possono e falliranno.
Progettare per la scalabilità e la resilienza. Le architetture a microservizi devono essere progettate per gestire sia la crescita della domanda che i fallimenti inevitabili in modo elegante.
Strategie di scalabilità:
- Scalabilità orizzontale (aggiungere più istanze)
- Scalabilità verticale (aumentare le risorse per istanza)
- Caching (in memoria, distribuito)
- Sharding e replica del database
- Elaborazione asincrona e architetture basate su eventi
Modelli di resilienza:
- Circuit breaker per prevenire guasti a cascata
- Compartimenti stagni per isolamento dei guasti
- Timeout e ritentativi con backoff esponenziale
- Degradazione elegante delle funzionalità
Considerazioni sul teorema CAP:
- Coerenza
- Disponibilità
- Tolleranza alle partizioni
Comprendi che i compromessi sono necessari quando si scalano sistemi distribuiti. Prioritizza in base ai tuoi requisiti e vincoli specifici. Implementa pratiche di osservabilità e ingegneria del caos per migliorare continuamente la resilienza del sistema.
Ultimo aggiornamento:
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.
Recensioni
Costruire Microservizi riceve recensioni contrastanti, con molti che lodano la sua panoramica completa sui concetti di microservizi e sui consigli pratici. I lettori apprezzano l'approccio cauto dell'autore e gli esempi tratti dalla vita reale. I critici notano la mancanza di profondità su alcuni argomenti e il rischio di un'eccessiva promozione dei microservizi. Molti lo trovano utile per i principianti, ma meno per architetti esperti. Il libro affronta vari aspetti dei microservizi, tra cui design, distribuzione, test e scalabilità. Alcuni lettori avrebbero desiderato maggiori dettagli concreti sull'implementazione, mentre altri hanno apprezzato la sua prospettiva ad alto livello sull'architettura software.
Similar Books









