-
Notifications
You must be signed in to change notification settings - Fork 1
Monolith to Microservices
If you work in an enterprise that needs microservices, this workshop is for you. It is ideal for developers and architects who need to work with cloud-native, microservice-based systems.
Java programming experience will be helpful. The starting point monolith is written in Ruby on Rails, so some knowledge of that framework will be nice, but is not required.
You will need a GitHub account with the ability to create new repositories.
Make sure you have a laptop that can access the Net without proxies or VPNs. It should have Java 8 and your preferred IDE.
Everybody has a monolith that they fear to attack. Under-documented, under-tested, and under load.
This workshop begins with just such a monolith. Students will tear it apart into a constellation of microservices. The microservices will be deployed continuously and fully tested. All the while, students must keep the service available.
We start with the prerequisites: automated testing, monitoring, and deployment. We will make use of AWS for compute resources, containers, elastic and application load balances, and security. Each team of students will have their own complete infrastructure, repositories, and deployment pipelines.
With the basics in hand, we start to find (and often create) seams in the old monolith. These seams let us replace a part at a time while keeping the whole thing available. There is no Big Bang rewrite here. Incremental evolution is the name of the game. Students will replace functionality in the monolith piece by piece. The new pieces don't just duplicate the functionality of the old system, though. That would result in little net benefit and a lot more operational complexity. Instead, students will make the new microservices more general and more useful, without making them more expensive to create. That builds more incremental value with each service.
Students will build services in a variety of styles, including clustered web services, dataflow, auto-scaling containers, and serverless. A real project wouldn't try to keep score with the number of different technologies in play, but this assortment of cloud "bon bons" gives students plenty of tools in their toolbox that they can apply on real projects.
Students will learn to build systems that evolve and grow. That requires some new technology (but not much). It also requires new ways to think about teams, organizations, and processes. We will learn to stop aiming for the end state and understand that change is continuous. To do that, we will using a blend of information architecture, technical architecture, and some process change.
This workshop includes both teaching and hands-on design sessions. Design sessions will be paper and whiteboard work in small groups. We will be writing and deploying real code. At the end of the workshop, students will have a fully operational deployment pipeline, monitoring infrastructure, and microservice-based system running in the cloud.
- Foundations
- Monitoring and debugging
- Decision hiding
- Separation of concerns
- Stability patterns
- Circuit breaker
- Bulkheads
- Timeouts
- Decoupling middleware
- Architectural styles
- Request/response
- Message-based
- Actors
- Dataflow
- Event stream/CQRS
- Finding seams
- Decomposition strategies
- Information architecture
- Maintaining availability during change
- Continuous delivery/deployment
- Evolutionary architectures*
- Identifiers and their many issues
- Architecture without an end state
- High-leverage architecture*
- Data/metadata unification
- Rules-based systems
- Generalized minimalism
Public workshops will be announced shortly.
To book a private workshop, contact Michael Nygard at [email protected].