Course Overview:
Spring Cloud is a platform for building Java-based distributed systems and microservices. Building complex enterprise applications is challenging. Any change made to a part of the systems could trigger the need for changing the design of the entire system. By the end of this training, participants will have a solid understanding of Service-Oriented Architecture (SOA) and Microservice Architecture as well practical experience using Spring Cloud and related Spring technologies for rapidly developing their own cloud-scale, cloud-ready microservices.
Course Objectives:
- Participants will learn how to evaluate different technologies and approaches for the design of a services-based system architecture.
- The training begins with a discussion and comparison of monolithic systems and service architectures, then digs into the details of microservice architecture.
- Participants are given a chance to put their knowledge into practice as they step through the creation and deployment of a set of proof-of-concept microservices built with Spring Cloud, Spring Boot and Docker.
- Finally, the relevant infrastructure building blocks are examined to help participants determine the most suitable tools and approaches to use for different organizational requirements.
- Part lecture, part discussion, exercises and heavy hands-on practice
Pre-requisites:
- An understanding of software and system engineering
- Java development experience
- Experience with Spring Framework
Target Audience:
- Java developers wishing to rapidly build and deploy microservices
- System Architects wishing to implement a microservice architecture
Course Duration:
- 35 hours – 5 days
Course Content:
Introduction
- System and service architecture, PaaS, and cloud-native design
Overview of Monolithic System Architecture
- Running an entire monolithic applications functionality in a single process
- Scalability through replication across multiple servers
- Protocols used in monolithic systems: EAI, CORBA, etc.
Overview of Webservices
- Service Oriented Architecture (SOA) and Microservices Architecture
Service-Oriented Architecture (SOA)
- Benefit and Costs of SOA
- Successes and failures in implementing SOA
- Messaging and ESB
- Infrastructure and tools supporting SOA
How Microservices Implement Web Service Concepts
- Do one thing and do it well
- DevOps
- Continuous Deployment and Delivery (Continuous Integration, Continuous Build Process, etc.)
- Lightweight protocols
Microservice Protocols and Standards
- HTTP, JMS, AMQP, Websockets, JSON, etc.
Development Frameworks for Building Microservices
- Java-based frameworks (Spring Cloud)
- Javascript-based frameworks (Seneca)
Decomposing a Monolith Application
- Developing independently deployable applications
- Organizing microservice applications around business capabilities
- Case study: Migrating a monolith application to three core microservices
Setting up a Spring Cloud Development Environment
- Setting up Docker and Docker Compose
- Setting environment variables
Overview of Spring Cloud and Spring Boot
- Spring Cloud sub-projects: Config Server & Bus, Eureka, Ribbon, Feign, and Hystrix
- Spring Boot
- Creating a Spring Boot application
- Centralized, versioned configuration management with Spring Cloud Config
- Dynamic configuration updates with Spring Cloud Bus
- Service discovery with Eureka
- Load balancing with Ribbon
- Applying circuit breakers with Hystrix
- Declarative REST clients with Feign
- Working with API Gateway
- Securing a microservice application
- Tracing microservices to uncover latencies
Deploying Microservices
- Containers (Docker, K8N, LXC, etc…)
- Configuration Management (Ansible, etc…)
- Service discovery
- Monitoring and Managing Microservices
- Infrastructure for Microservices
Cloud and Auto Scalability of Microservices
- Microservice redundancy and fail-over
- Performance scalability for Microservices
- Auto scalability
- Implementing Microservices on OpenStack, AWS, and other cloud platforms
Troubleshooting Common Problems for Distributed Applications
- Complexity of ecosystem
- Network Performance
- Security
- Deployment
- Testing
- Nano-services
Final Considerations for Building Production-ready Systems
- Making system easy for beginners
- Making system complete so that it can serve as the foundation for enterprise applications