Building microservices requires more than just infrastructure, but infrastructure does have a role. In this talk we look at microservices from an enterprise perspective and talk about DDD, Docker, Kubernetes and how established open-source projects in the integration space fits a microservices architecture
3. Do we need “integration?”
What kind of challenges are we going to run into?
Where do Containers fit into this?
WE’RE OFF TO DO MICROSERVICES!
4. Christian Posta
Principal Middleware Architect @ Red Hat
Twitter: @christianposta
Blog: http://blog.christianposta.com
Email: christian@redhat.com
• “Microservices for Java developers” (6/2016)
• Committer Apache Camel, ActiveMQ, Fabric8
• Worked with large Microservices, web-scale,
unicorn company
• Blogger, speaker about DevOps, integration,
and microservices
5. • Single, self-contained,
autonomous
• Isolated and Resilient to
faults
• Faster software delivery
• Own their own data
• Easier to understand
individually
• Scalability
• Right technology for the
problem
• Test individual services
• Individual deployments
MICROSERVICES
8. DOMAIN COMPLEXITY IS REAL
• Break things into smaller,
understandable models
• Surround a model and its
“context” with a boundary
• Implement the model in
code or get a new model
• Explicitly map between
different contexts
• Model transactional
boundaries as aggregates
9. Book checkout / purchase Title Search
Recommendations
Weekly reporting
16. • Automatic retries, back-off algorithms
• Dynamic routing
• Powerful testing/mocking framework
• Circuit breakers, fallbacks
• Idempotent consumers
• Backpressure mechanisms
• Beautiful REST DSL with built in Swagger support
CAMEL FOR RESILIENT
MICROSERVICES
18. public class OrderProcessorRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
rest().post(“/order/socks”)
.description(“New Order for pair of socks”)
.consumes(“application/json”)
.route()
.to(“activemq:topic:newOrder”)
.log(“received new order ${body.orderId}”)
.to(“ibatis:storeOrder?statementType=Insert”);
}
EXPOSE REST END POINT
19. public class OrderProcessorRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from(“jms:topic:foo”)
.hystrix()
.to(“http://fooservice/”)
.onFallback()
.transform().constant(“fallback foo!”)
.end()
}
CIRCUIT BREAKER/FALLBACK
20. public class OrderProcessorRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from(“jms:topic:foo”)
.idempotentConsumer(header(“fooMessageId”),
memoryCache)
.to(“http://fooservice/”)
.log(“got response ${body}”);
}
IDEMPOTENT CONSUMER
22. • How to run them all locally?
• How to package them (dependency
management)
• How to test?
• Vagrant? VirtualBox? VMs?
• Specify configuration
• Process isolation
• Service discovery
• Multiple versions?
PROBLEMS DEVELOPING
MICROSERVICES
24. RED HAT OPENSHIFT
• Developer focused workflow
• Enterprise ready, supported
• Higher level abstraction above containers for delivering
technology and business value
• Build/deployment triggers
• Software Defined Networking (SDN)
• Docker native format/packaging
• CLI/Web based tooling
26. • Set of tools for integration developers
• Package your Fuse/Camel services as Docker
images
• Run locally on CDK (container development kit)
• Manage them with Kubernetes/OpenShift
• Flat class loader JVMs
• Supports Spring, CDI, Blueprint
• Plugs-in to your existing build/release ecosystem
(Jenkins/Maven/Nexus/Gitlab,etc)
FUSE INTEGRATION SERVICES
27. • How to run them all locally?
• How to package them
• How to test?
• Vagrant? VirtualBox? VMs?
• Specify configuration
• Process isolation
• Service discovery
• Multiple versions?
PROBLEMS DEVELOPING
MICROSERVICES: SOLVED
33. Christian Posta
Principal Middleware Specialist/Architect
Twitter: @christianposta
Blog: http://blog.christianposta.com
Email: christian@redhat.com
Questions, Discussion, Demo!