Bespoke Microservices Architecture ( bspmsarch | 21 hours )
Prerequisites:
Audience
This course is suitable for Enterprise Architects who need to design flexible large-scale systems and oversee agile development of services that meet business needs. Developers and Analysts may also find this course useful as a means of gaining a broader background in Microservices Architecture.
Overview:
- Understand microservices and the relationship with SOA and DevOps
- Move from business requirements to service design
- Learn the principles of microservices architecture
- Learn techniques for designing and migrating to a microservice architecture
- Understand communicating infrastructure technologies
- Appreciate how to use tools for enabling microservices
- Incorporate security, testing and quality into a microservices architecture
- Monitor microsystems and size appropriately for maximum scalability
- Build modern, scalable, highly available and easily maintainable applications
Format of the Course
- Interactive lecture and discussion.
- Lots of exercises and practice.
- Hands-on implementation in a live-lab environment.
Course Customization Options
- To request a customized training for this course, please contact us to arrange.
Course Outline:
What are Microservices?
- Small and focused
- Loosely coupled
- Language-neutral
- Bounded context
- Domain-driven design
- Comparing microservices and monolithic architectures
Benefits from Microservices
- Enterprise solutions context
- Challenges with monolithic architecture
- Developer perspective
- Tester perspective
- Business owner perspective
- Service management perspective
- Exercise: Try out a SOAP and REST service using Postman
Analysing and Designing microservices
- What is a microservice application?
- Scaling through Decomposition
- Key Principles
- Who uses microservices?
- Domain-driven Design
- Service Analysis, Design and implementation
- Exercise: Analyse course case study and use Domain driven design
API Management
- API Economy in Numbers
- API-Led Architecture
- Hypermedia
- API Gateway
- API Micro Gateways
- Sidecar pattern
- Exercise: Write OpenAPI or Swagger contract
Microservices today
- Microservices at Robinhood
- The contents of an Event
- Exposing Services to the World
- Exercise: Build a service using java, maven and Spring boot
Architecture of a Microservices Application
- Role of the Architect
- A microservice platform
- Services layer
- Communication
- Locating Services
- The application boundary
- Client layer
- Exercise: Configure a services registry such as Eureka
Architectural Modularity
- Technical Drivers
- Business Drivers
- How Much Modularity is enough?
- Sacrificial Architecture
- Exercise: Build a Micro Frontend with Node.js and Angular spa
Service Design
- Micro Hexagonal Service Design Pattern
- Service Taxonomy
- Identifying Taxonomy
Service Granularity
- Purpose and Service Scope
- Transactions
- Data Dependencies
- Workflow and Choreography
- Code Structure and Reuse
- Exercise: Configure an API gateway
Share Nothing Architecture
- Bounded Context
- Shared Libraries
- Sharing a Database and Schema
Inter-service communication Using gRPC
- Using gRPC Between Services
- How gRPC Works
- Load Balancing gRPC Servers
- Exercise: Configure an API gateway (example Nginx) to load balance request
Orchestration and Choreography
- Defining Orchestration
- Defining Choreography
- Service Orchestration
- Issues with Gateway Orchestration
- Using Microservice Orchestrators
- Orchestration and Loose Coupling
- Exercise: Walk through some Saga code
Service Aggregation
- Aggregation vs. Orchestration
- Issues with Orchestration
- Using Service Aggregation
- Aggregation Use Cases
Deploying Microservices
- Why is Deployment important?
- A microservice production environment
- Serverless Computing
- Building Service Artefacts
- Securing the Services
- Service to Host models
- Containerizing a Service
- Deploying to a Cluster
- Deploying services without downtime
- Exercise: Deploy a service to a Docker container
Transactions and Queries with Microservices
- Consistent transactions
- Event-based communication
- Sagas
- CQRS
- Event Sourcing
- CAP Theorem
- Exercise: Configure MongoDB and H2 for command and query side to test CQRS pattern
Microservices and Distributed Data
- Change Control Issues
- Connection Issues
- Bounded Context and Data
- Exercise: Using polyglot persistence
Distributed Data Issues
- Data Sharing and Choreography
- Data Sharing and Data Replication
- Sharing data between Services
- Using Replicated Caching
- Limitations and Restrictions
Designing Reliable Services
- Defining Reliable Service
- What could go wrong
- Designing reliable communication
- Maximizing service reliability
- Exercise: Using Kubernetes
- Service Mesh
- Exercise: Using Istio and Envoy to build a simple service Mesh
Building a Delivery Pipeline for Microservices
- Making deploys boring
- Building a pipeline with Jenkins
- Building reusable pipeline steps
- Exercise: Configure Jenkins
DevOps and Microservices
- Why you should use DevOps
- Defining DevOps
- DevOps, a prerequisite to successfully adopting microservices?
- Organizing teams to support microservices
Using an Event Broker
- Building Topologies
- Event-driven Approach
- Processing Events with Stateful Functions
- Making Events the source of truth
- Exercise: Using Kafka
Microservices governance
- Centralized versus decentralized governance
- Enterprise transformation for microservices
- DevOps capabilities: Testing strategies for microservices
- Considerable testing methods
- Building a sufficient testing strategy
Hybrid Architectures
- Issues with Microservices for Business Applications
- Service-Based Topology
- Advantages of Service-Based Architecture
- Topology Configurations
- Managing Database Changes
- Microservices: a few epic fails
Testing Microservices
- Testing Strategies
- Writing Unit Tests
- Writing Integration Tests
- Developing Component Tests
- Writing End-to-End Tests
- Exercise: A quick look at Cucumber and Gherkin