Practical Microservices: Nuts and Bolts (Architecture to Implementation)

Building a microservice is not as easy as one might think. Given that they must be secure, very lightweight, platform neutral, language independent, and independently deployable. Microservice systems have unique challenges, and if your services are not built around appropriate logical and physical architectures and technology, you loose all of the benefits. When implementing, there's a lot of 'devil in the details'.

This class is a deep dive into at the practical side of microservice implementation. You'll learn about the real-world issues of implementing services on various architegtures, 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.

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
  • DDD
  • 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