We are Régina ten Bruggencate and Linda van der Pal both Java developers at Trailblazers and Java Champions. We attend and speak at a lot of conferences and heard a lot about microservices, but most of the talks were about framework X or Y and how they would allow you to build microservices lightning fast. This got us to wondering how we could split up our big old monoliths. Linda attended a workshop at the XPdays Benelux by Koen Metsu and Erik Talboom. It was a lovely workshop with a great concept, but it didn’t quite go into the level of details she had hoped for. Since the best way to learn is to teach, she asked their permission to use their idea and work it into a workshop of her own. Régina liked the idea too, and so we set out together to submit the workshop to a couple of conferences.
My name is Gunnar Morling; I’m a software engineer working at Red Hat, where I’m leading the Debezium project. Debezium is a platform for change data capture (CDC), allowing you to react to all the changes in your database in near real-time. CDC is not only very useful for use cases like replication or updating full-text search indexes, but also comes in handy for microservice architectures where it for instance can be used to propagate data between different services.
I’m Emmanuel Bernard and am a Hibernate contributor, Java Champion and Chief Architect, Data at Red Hat middleware. I’ve always been involved in improving how to process data from within applications. With microservices, the challenge is more complex because it involves inter system data communication. Even more fun.
During the first half of the workshop we will talk about actually splitting up a real life problem and how you accomplish that. We will give a brief introduction into Domain Driven Design and how you can use that to track down the borders along which you can split your problem. After that we will split up into pairs and get cracking. We will start by looking at a real world problem, and then we’ll have a brainstorm session to determine what could be the microservices. Then we split up the group into pairs and will start coding. The participants can use whatever framework they like to build a microservice.
Of course different microservices don’t exist in isolation, very often they’ll have to exchange data. That’s an interesting challenge, esp. as you’d like to avoid a tight coupling between services and make sure you don’t create a “distributed monolith”. This is what we’ll deal with in the second part of the workshop: attendees will learn how microservices can produce and consume data streams using tools such as Kafka, Debezium and Kubernetes. They’ll also learn how easy it is to set up streams with the changes from a database, without any application changes needed. This all helps with creating loosely coupled microservices. We’ve also planned to discuss some operational aspects such as setting up Kafka on Kubernetes/OpenShift using the Strimzi project, monitoring etc.
People should leave the workshop with a solid understanding of how DDD can be used to model microservices and define their boundaries and how streaming-based communication approaches can help different microservices to cross these boundaries.
Indeed, using a single database for multiple services is something we’d usually not recommend, as it’ll create a tighter coupling between services than desirable. E.g. a database upgrade could impact multiple services instead of just a single one, giving away one of the advantages of microservice architectures.
Thanks a lot! We’re very happy to be part of the first VoxxedDays Microservices and look forward very much to the conference and our workshop. See you in Paris!
#DDD #SplittingMonoliths #DataStreaming #Debezium
Twitter: @reginatb38
LinkedIn: https://www.linkedin.com/in/reginatb
Twitter: @DuchessFounder
LinkedIn: https://www.linkedin.com/in/lvdpal
Twitter: @gunnarmorling
Blog: http://in.relation.to/gunnar-morling
GitHub: http://github.com/gunnarmorling
Twitter: @emmanuelbernard
Blog: https://emmanuelbernard.com
LinkedIn: https://fr.linkedin.com/in/emmanuelbernard
GitHub: http://github.com/emmanuelbernard