PS: Focus is on designing Microservices not coding
No specific Microservices framework in use
All sample code is in plain JAVA to demonstrate/clarify understanding of DDD patterns, etc.
Models are developed in UML - using the PlantUML tool
PostgreSQL/MongDB/RabbitMQ/Kafka - free instances created on the cloud for demos & walkthroughs
PLEASE Do NOT join the course if you are looking for tutorials on Microservices Coding or specific framework.
What is this course about?
PS: Focus is on designing Microservices not coding
No specific Microservices framework in use
All sample code is in plain JAVA to demonstrate/clarify understanding of DDD patterns, etc.
Models are developed in UML - using the PlantUML tool
PostgreSQL/MongDB/RabbitMQ/Kafka - free instances created on the cloud for demos & walkthroughs
PLEASE Do NOT join the course if you are looking for tutorials on Microservices Coding or specific framework.
What is this course about?
Microservices is a new way of building software in which an application is composed of an independent set of services. The biggest benefit of Microservices is that it enables an organization to transform at a very rapid pace. This speed to market is achieved due to the independent nature of the services that make up a Microservices application. Companies like Amazon, Netflix and Etsy have proven the value of Microservices beyond doubt.
Many organizations today are looking to adopt Microservices. These organizations are investing in technologies, tools, skills and are changing their software development and delivery processes as well. But still many organizations are failing to achieve the full benefits of Microservices; in fact many organizations feel that they have created technical debt by adopting Microservices.
So why is it that some organizations have been successful in adopting Microservices while others are not. One common aspect I have observed in companies that fail to adopt Microservices is that they treat Microservices as a purely technology initiative. They do not spend time in understanding the business aspects of their Microservices applications .
Microservices is NOT just about technology
The key element of the Microservices architecture is that services are Independent. This independent aspect of the service is what makes it possible for Microservices to change independently of other services. If scope of the microservices is leading to inter-dependencies between services then it would lead to a need for change coordination between teams which in turn will lead to the same problems we have with Monolithic applications . Release cycles will be longer and there will be no benefit of the adoption of Microservices.
To ensure that these is no interdependencies between Microservices, a Microservices architect needs to understand the domain and then decide on the boundary and scope of the Microservices. This is where Domain Driven Design comes into picture. Once the Microservices business boundaries are defined the services should be built using appropriate Microservices design patterns and technologies.
Teams working on Microservices should not just look at the technical aspects of the service but MUST keep in mind that there are other considerations that play a critical part in the success of Microservices initiative. In order to
Role of a Microservices Architect
An IT professional working in the role of Microservices architect is responsible for may aspects depending on the maturity of Microservices adoption in their organization. Here are the list of activities that the architects is responsible for:
Evaluate the business benefits of Microservices for their specific organization
Build a Business case for Microservices
Educate the Business & IT stakeholders on pros/cons of Microservices
Apply Domain Driven Design to demarcate the boundaries of Microservices
Define the domain model for the Microservices
Do the technical design of Microservices
Guide and Mentor the Microservices teams
Evaluate the technologies | frameworks for the realization of Microservices
Build proof of concepts to show how things work
How will this course help?
This course will help developers & architects in building skills needed for successful implementation of Microservices applications. It consists of a combination of concepts, UML modelling and working code to demonstrate the implementation of Microservices. Students will learn the concepts of Domain driven design by way of common industry examples and a case study (ACME travels).
Focus is on Architecture, Design and Development of Microservices.
1. Transformation & Microservices
2. Domain Driven Design
3. Applying the DDD strategic & tactical pattern
4. Event Driven Architecture
5. Event Storming
6. Data Management
7. Messaging
8. Distributed Transactions
9. API
IMPORTANT:
Code Samples
Focus is on the Microservices design not coding.
All of the sample code is in plain JAVA
Course does NOT cover any specific framework
SpringBoot is used in samples for API/GraphQL section
Please check out the course preview lectures before enrolling the course.
Review the topics covered
Make sure you understand instructor's accent
Pre-Requisites
Basic understanding of JAVA or any other programming language
Some experience with software development practices
PS:
Hand on part is optional but students are encouraged to do hands on tasks to get a better feel of the design patterns.
Quick intro of the instructor
Course outline
Tips to get the most out of the course
By the end of this lesson students will have the development environment setup on their local machine.
Monolithic Architecture
Microservices Architecture
Realization of Microservices Architecture
Discussion on how Business Transformation is accelerated by Microservices Architecture.
How teams are organized for building Microservices applications
Business capabilities and Microservices
Business Benefits of Microservices
Discussion on pros and cons of Microservices architecture from technology perspective.
Understanding the domain and domain models
Conceptual vs Architectural models
Architecture vs Design
Discussion on commonly used modelling techniques and Architectural styles.
Students will be introduced to Domain Driven Design in this lesson.
Define models and elements of domain models.
Enterprise | Unified domain models
Knowledge crunching exercise
Overview of the topics covered in this section.
Understand the use of business model canvas
Learn how the Business model canvas is created
Example: Uber's Business Model Canvas
In this exercise we will create the Business Model Canvas for Acme Travels
Learn about the 3 types of sub domains
Core
Support
Generic
In this exercise we will categorize ACME Travel's subdomains in the core/support/generic categories.
Understand the meaning or Context | Business Context
Bridging the gap between Business and Technology languages. Lesson introduces students to DDD Ubiquitous Language.
Discussion on characteristics of Ubiquitous Language.
In this lesson we will develop the Ubiquitous Language terms for ACME Travels Sales subdomain.
Introduction to the DDD Strategic pattern : Bounded Context
By end of this lesson students should be able to explain the Bounded Contexts.
Students will learn techniques for discovering the Bounded Contexts in a problem space.
In this exercise we will try to identify Bounded Contexts in the ACME travels business domain.
Big Ball of Mud
Challenges with Bounded Context dependencies
Context Maps
DDD Strategic Patterns:
Separate Ways
Partnership pattern
Shared Kernel
DDD Strategic Patterns:
Customer-Supplier pattern
Conformist pattern
Anti corruption layer pattern
DDD Strategic Patterns:
Open Host Service
Published Language
In this exercise we will draw up the context mapping in a banking domain.
DDD Tactical Pattern : Entity pattern
DDD Tactical Pattern : Value Object pattern
In this exercise we will identity | design the Entity and VO in the ACME Travels sales model
Walkthrough of the JAVA code & UML for ACME Travel Sales entities and value objects
DDD Tactical Pattern : Aggregate pattern
In this exercise we will design an Aggregate in the ACME Travel Sales model
Walkthrough of JAVA code and UML model for the Aggregate(s) in the ACME sales model
Discussion on Anemic models and how to address anemic models
DDD Tactical Pattern : Repository pattern
Walkthrough of the JAVA code and UML model for ACME travel repository
DDD Tactical Pattern : Services patterns
DDD Tactical Pattern : Application Services pattern
DDD Tactical Pattern : Infrastructure Services pattern
Walkthrough of the Java code and UML for the Domain Services in ACME travel model
Walkthrough of JAVA code and UML for the ACME application and infrastructure services
Discussion of communication patterns used in Microservices
Discussion on the Microservices interaction patterns
Introduction to Events Driven Architecture and its importance in development of Microservices applications.
Walkthrough of pub-sub messaging pattern using the RabitMQ messaging broker.
Introduction to domain events
Implementing domain events with a static class broker framework pattern
In this exercise we will Identify the ACME travel domain events
Walkthrough of the JAVA code and UML for the implementation of the domain events for ACME travel.
DDD Tactical Pattern : Integration Events
In this exercise we will identify the Integration Events in the ACME travel domain
Walkthrough of JAVA code and UML for the implementation of ACME
Events storming is a technique used for creating shared knowledge of the domain. This lesson will introduce students to event storming.
Elements of event storming flow.
Discussion on how to prepare for an Event Storming workshop.
The process followed in an Event Storming workshop.
Simulation of Event Storming Workshop for ACME sales
Challenges with use of Shared Database in monolithic applications
Introduction to SOA and how it addressed some of the challenges of shared database in Monoliths
Microservices have independent persistent layer. This lesson discusses the pros of separate database pattern for microservices.
Option for persistence layer for brownfield applications
Options for breaking a shared database to separate databases
Introduction to CQRS, Event Sources and SAGA patterns
Command Query Separation (CQS) Pattern
Setup PostgreSQL database for testing
Walkthrough of JDBC Repo implementation
Considerations for CQ pattern
Read vs Write performance
Introduction to "Collaborative Domains"
Walkthrough of JAVA code and UML for CQS realization
Discussion on CQRS pattern
Options for data replication between READ and WRITE sides
Exercise requires you to design CQRS for ACME Travels
Walkthrough of JAVA code and UML for CQRS implementation
Event Sourcing pattern
Considerations for building Event Store
Set up a NoSQL MongoDB for testing out the CQRS
Walkthrough of JAVA code UML for version 1 of CQRS implementation for ACME
Walkthrough of JAVA code UML for version 2 of CQRS implementation for ACME
As a best practice always design distributed systems for failures
OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.
Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.
Find this site helpful? Tell a friend about us.
We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.
Your purchases help us maintain our catalog and keep our servers humming without ads.
Thank you for supporting OpenCourser.