Practical Microservices: Nuts and Bolts (Architecture to Deployment)
Microservice architectures break up monolithic server-side applications into a system of small cooperative independent actors. They have unique challenges—they must be designed in a domain-focused way to be maintainable, and building them is not as easy as one might think, given that they must be secure, very lightweight, platform neutral, language independent, and independently deployable. Your service system must be built around appropriate logical and physical architectures and technology, or you will lose all the benefits. There’s a lot of ‘devil in the details’.
This class is a deep dive into at the practical side of microservices, covering everything from architecture to deployment. You'll learn how to design effective APIs. You'll learn about the real-world issues of implementing services on various architectures, including lightweight messaging, and accessing those services securely over a web portal. The focus is on the practical, with particular emphasis on decoupling services from each other and eliminating single points of failure (like brokers and centralized discovery/scaling). This is an architecture class, but we'll look at a lot of code (Java) as well.
- You’ll understand exactly what a microservice is and how to build one
- You’ll learn about various approaches to service architectures, both orchestrated and choreographed
- You’ll learn how to design effective service-based APIs around your problem domain
- You’ll learn how to get large clouds of cooperating services to interact effectively and reliably
- You’ll learn the real-world issues surrounding service construction and deployment
- You’ll learn the pitfalls of microservice-based systems and how to correct for them
This classes gives you everything you need to succeed, whether you're starting from scratch or refactoring an existing system. It covers eseential details that are far from obvious, and will save you from making critical mistakes that could subvert your system.
What you'll learn
- What is a Microservice?
- The characteristics of a microservice
- The good, the bad, and the ugly
- Agile and other volatile-requirements environments
- Impact on the development organization and processes
- Testing difficulties and deployment strategies
- Moving from the monolith
- Logical Architecture
- Mini, micro, or nano?
- Essentail architectural patterns
- Lambda (single-method cloud services)
- Reactive
- Proxy
- Router Mesh
- Fabric
- Swarm
- Domain-focused architecture
- Reactive services vs. objects
- Essential design principles and patterns
- Responsibility-based design
- Single responsibility
- Stories to architecture
- Bounded Contexts
- Implementation hiding
- Active Object (actor)
- Eventual consistency
- Statelessness
- Incremental design and development
- Going from stories to code
- problem statements
- Story definition
- Extracting a logical architecture from the stories
- Physical architecture
- Inappropriate infrastructure (languages, etc.)
- Interfacing to the outside world
- Communications infrastructure and messaging.
- UI architectures
- Presentation/Abstraction/Control
- Deployment
- Service independence
- VMs
- Containers (Docker)
- Inter-service communication
- REST-less communication
- Lightweight messaging
- ZeroMQ
- compared to Rabbit and Kafka
- PubSub vs push/pull
- Brokerless, point-to-point communication
- Swarming architectures (decentralized self-scaling fabrics)
- Eliminating single points of failure
- Emergence
- Decentralized Discovery (registries) and scaling
- Startup (Cloning)
- Shutdown
- Hot updates
- Reliability
- Heartbeating
- Monitoring
- Circuit Breakers
- Bulkheads
- Testing
- Security
- User
- Inter-service
- Every service is an attack surface
- Service-specific attacks
- AIDS: Assault by Internal Denial-of-Service