WA2874
Microservices Development Bootcamp with immersive project (using Spring Boot and Docker) Training
Is your organization looking to break up large indivisible applications into microservices-based solutions? In this comprehensive 5-day bootcamp, developers, solutions architects, and technical team leads will learn how to use Spring Boot, Linux Containers, and Docker to meet your microservices goals to deploy, automate, and rapidly scale.
Course Details
Duration
5 days
Prerequisites
- Knowledge of Java – Equivalent to WA2494 Introduction to Java 8 Using Eclipse
- Git - Equivalent to WA2410 Introduction to Version Control with Git
Target Audience
- Developers
- Solution Architects
- Technical Team Leads
Skills Gained
- Breaking up Monoliths into Microservices
- Build using Gradle
- Creating RESTful services with Spring Boot
- Using databases and JPA in Spring Boot
- Security patterns and best practices in Spring Boot
- Deploying resilient and scalable services
- Traffic routing patterns
- Metrics and tracing of Microservices
Course Outline
- DevOps Fundamentals
- Why DevOps
- What is DevOps?
- Collaborative, Matrixed and Cross-Functional Teams
- Key Components of Successful DevOps Teams
- DevOps-ification
- DevOps Vocabulary
- DevOps Goals
- Not DevOps - Crush Buzzwords
- Driving Business Outcomes with DevOps
- Technology-Enabled Business
- DevOps Key Enabler for Digital Transformation
- Core Values and Mission
- Core Values - Culture
- Core Values - Automation
- Core Values - Measurement
- Core Values - Sharing
- Communication
- Collaboration
- Value Stream Mapping
- Behavioral Patterns for Success
- DevOps Org Structures
- DevOps Team - Separate
- DevOps Merged Organization
- DevOps Overlapped Organization
- Organizational Structure Leadership
- What Does Continuous Delivery Mean?
- Deployment Pipelines
- Your Organization is Doing CD if …
- Pipelining for CD
- Continuous Integration
- CI Pipeline
- CD & CI Methodologies
- Key Tool Categories for CI/CD
- ntroduction to Git Flow
- Why Use an SCM Workflow?
- What is Git Flow
- The Main Branch
- Benefits
- How Git Flow works?
- What is Git Flow?
- Git Flow Extension
- Initializing Git Flow
- Features
- Release
- Hotfixes
- Git Flow and Continuous Integration
- Git Flow – Summary
- Git Flow – Pros and Cons
- Git Flow – When it Works Best?
- Git Flow – When it Doesn’t Work?
- Git Flow Alternatives
- Trunk-based Development
- Trunk-based Development – When it Works?
- Trunk-based Development – When it Doesn’t Work?
- GitHub Flow
- GitHub Flow – Pros and Cons
- GitLab Flow
- GitLab Flow – Environment Branches
- GitLab Flow – Release Branches
- GitLab Flow – Pros and Cons
- Breaking Up Monoliths – Pros and Cons
- Traditional Monolithic Applications and Their Place
- Disadvantages of Monoliths
- Developer's Woes
- Architecture Modernization
- Architecture Modernization Challenges
- Microservices Architecture is Not a Silver Bullet!
- What May Help?
- In-Class Discussion
- Twelve-factor Applications
- Twelve-factor Applications
- Twelve Factors, Microservices, and App Modernization
- The Twelve Factors
- Categorizing the 12 Factors
- 12-Factor Microservice Codebase
- 12-Factor Microservice Dependencies
- 12-Factor Microservice Config
- 12-Factor Microservice Backing Services
- 12-Factor Microservice Build, Release, Run
- 12-Factor Microservice Processes
- 12-Factor Microservice Port Binding
- 12-Factor Microservice Concurrency
- 12-Factor Microservice Disposability
- 12-Factor Microservice Dev/Prod Parity
- 12-Factor Microservice Logs
- 12-Factor Microservice Admin Processes
- Kubernetes and the Twelve Factors - 1 Codebase
- Kubernetes and the Twelve Factors - 2 Dependencies
- Kubernetes and the Twelve Factors - 3 Config
- Kubernetes and the Twelve Factors - 4 Backing Services
- Kubernetes and the Twelve Factors - 5 Build, Release, Run
- Kubernetes and the Twelve Factors - 6 Processes
- Kubernetes and the Twelve Factors - 7 Port Binding
- Kubernetes and the Twelve Factors - 8 Concurrency
- Kubernetes and the Twelve Factors - 9 Disposability
- Kubernetes and the Twelve Factors - 10 Dev/Prod Parity
- Kubernetes and the Twelve Factors - 11 Logs
- Kubernetes and the Twelve Factors - 12 Admin Processes
- Microservice Development
- What are Microservices?
- Microservices vs Classic SOA
- Principles of Microservices Architecture Design
- Domain-Driven Design
- Domain-Driven Design - Benefits
- Microservices and Domain-Driven Design
- Designing for failure
- Microservices Architecture – Pros
- Microservices Architecture – Cons
- Docker and Microservices
- Microservice Deployment with Docker – Workflow
- Writing Dockerfile
- Kubernetes
- What is OpenShift
- OpenShift Architecture
- Microservices and Various Applications
- Web Applications
- Web Applications – Reference Architecture
- Web Applications – When to use?
- Single Page Applications
- Single Page Applications – Benefits
- Traditional Enterprise Application Architecture
- Sample Microservices Architecture
- Serverless & Event-driven Microservice – AWS Lambda
- gRPC
- What is gRPC?
- Protocol Buffers
- REST vs. gRPC
- Protobuf vs. JSON
- HTTP/2 vs. HTTP 1.1
- Messages vs. Resources and Verbs
- Streaming vs. Request-Response
- Strong Typing vs. Serialization
- Web Browser Support
- REST vs. gRPC – In a Nutshell
- Introduction to Spring Boot
- What is Spring Boot?
- Spring Framework
- How is Spring Boot Related to Spring Framework?
- Spring Boot 2
- Spring Boot Main Features
- Spring Boot on the PaaS
- Understanding Java Annotations
- Spring MVC and REST Annotations
- Example of Spring MVC-based RESTful Web Service
- Spring Booting Your RESTful Web Service
- Spring Boot Skeletal Application Example
- Starters
- Maven - The 'pom.xml' File
- Spring Boot Maven Plugin
- Gradle - The 'build.gradle' File
- Spring Boot Gradle Plugin
- HOWTO: Create a Spring Boot Application
- Spring Initializr
- Overview of Spring Boot Database Integration
- DAO Support in Spring
- Spring Data Access Modules
- Spring JDBC Module
- Spring ORM Module
- DataAccessException
- @Repository Annotation
- Using DataSources
- DAO Templates
- DAO Templates and Callbacks
- ORM Tool Support in Spring
- Using Spring with JPA
- Spring JPA
- Benefits of Using Spring with ORM
- Spring @Repository
- Using JPA with Spring
- Configure Spring Boot JPA EntityManagerFactory
- Application JPA Code
- Spring Boot Considerations
- Spring Data JPA Repositories
- Database Schema Migration
- Database Schema Migration for CI/CD using Liquibase
- How Liquibase Works?
- Changelogs in Liquibase
- Preconditions in Changelogs
- Sample Empty Changelog
- Sample Precondition in Changelog
- Sample Changeset in Changelog
- Running Liquibase
- Liquibase Commands
- Spring REST Services
- REpresentational State Transfer
- Principles of RESTful Services
- Understanding REST
- REST Example – Create
- REST Example – Retrieve
- REST Example – Update
- REST Example – Delete
- REST Example – Client Generated ID
- REST Example – JSON
- @RestController Annotation
- HTTP Request Method Mapping
- Path Variables and Query Parameters
- RequestBody and ResponseBody
- JAX-RS vs Spring
- Java Clients Using RestTemplate
- RestTemplate Methods
- RestTemplate Example
- Testing with Postman
- Scripting in Postman
- Postman Scripts
- Organization
- Execution Order
- Pre-Request Scripts
- Post-Request Scripts
- Console Output
- Tests
- Sample Assertions
- Multiple Test Example
- Test Results
- Variables
- Variable Scope
- Defining Global Variables
- Defining GlobalVariables
- Using Environment Variables
- Dynamic Variables
- Spring Security
- Securing Web Applications with Spring Boot 2
- Spring Security
- Authentication and Authorization
- Programmatic vs Declarative Security
- Adding Spring Security to a Project
- Spring Security Configuration
- Spring Security Configuration Example
- Authentication Manager
- Using Database User Authentication
- LDAP Authentication
- What is Security Assertion Markup Language (SAML)?
- What is a SAML Provider?
- Spring SAML2.0 Web SSO Authentication
- Setting Up an SSO Provider
- Adding SAML Dependencies to a Project
- SAML vs. OAuth2
- OAuth2 Overview
- OAuth – Facebook Sample Flow
- OAuth Versions
- OAuth2 Components
- OAuth2 – End Points
- OAuth2 – Tokens
- OAuth – Grants
- Authenticating Against an OAuth2 API
- OAuth2 using Spring Boot – Dependencies
- OAuth2 using Spring Boot – application.yml
- OAuth2 using Spring Boot – Main Class
- OAuth2 using Spring Boot – Single Page Application Client
- JSON Web Tokens
- JSON Web Token Architecture
- How JWT Works
- JWT Header
- JWT Payload
- JWT Example Payload
- JWT Example Signature
- How JWT Tokens are Used
- Adding JWT to HTTP Header
- How The Server Makes Use of JWT Tokens
- What are “Scopes”?
- JWT with Spring Boot – Dependencies
- JWT with Spring Boot – Main Class
- Docker Introduction
- What is Docker
- Where Can I Run Docker?
- Installing Docker Container Engine
- Docker Machine
- Docker and Containerization on Linux
- Linux Kernel Features: cgroups and namespaces
- The Docker-Linux Kernel Interfaces
- Docker Containers vs Traditional Virtualization
- Docker Integration
- Docker Services
- Docker Application Container Public Repository
- Competing Systems
- Docker Command Line
- Starting, Inspecting, and Stopping Docker Containers
- Docker Volume
- Dockerfile
- Docker Compose
- Using Docker Compose
- Dissecting docker-compose.yml
- Specifying services
- Dependencies between containers
- Injecting Environment Variables
- runC Overview
- runC Features
- Using runC
- Running a Container using runC
- Introduction to Kubernetes
- What is Kubernetes
- What is a Container
- Container – Uses
- Container – Pros
- Container – Cons
- Composition of a Container
- Control Groups
- Namespaces
- Union Filesystems
- Popular Containerization Software
- Microservices
- Microservices and Containers / Clusters
- Microservices and Orchestration
- Microservices and Infrastructure-as-Code
- Kubernetes Container Networking
- Kubernetes Networking Options
- Kubernetes Networking – Balanced Design
- Traffic Routing Patterns
- Edge Proxy Server
- Request Handling
- Filters
- Filter Architecture
- API Gateway for Routing Requests
- API Gateway for Routing Requests (Contd.)
- API Gateway – Example
- Rate Limiting
- Rate Limiting – Business Cases
- Configuring Rate Limiting in NGINX
- Circuit Breaker
- Design Principles
- Design Principles (continued)
- Cascading Failures
- Bulkhead Pattern
- Circuit Breaker Pattern
- Thread Pooling
- Request Caching
- Request Collapsing
- Fail-Fast
- Fallback
- Circuit Breaker Solutions
- Load Balancing in Microservices
- Server-side load balance
- Client-side Load Balance
- Architecture
- Service Mesh
- Service Mesh (Contd.)
- Service Mesh Solutions
- Content Delivery Network (CDN)
- How does a CDN Work?
- Benefits of using a CDN
- CDN Solutions
- Lab Exercises
- Lab 1. Using the GitFlow Workflow
- Lab 2. Monolith vs Microservices Design
- Lab 3. A Simple RESTful API in Spring Boot
- Lab 4. Use the Spring JDBCTemplate under Spring Boot
- Lab 5. Use the Spring Data JPA under Spring Boot
- Lab 6. Create a RESTful API with Spring Boot
- Lab 7. Enable Basic Security
- Lab 8. Creating a Docker Account and Obtain an Access Token
- Lab 9. Getting Started with Docker
- Lab 10. Load Balancing using Kubernetes
- Lab 11. Getting Started with Istio
Upcoming Course Dates