Cloud Native Camel Riding

63
Cloud native Camel riding with Kubernetes and OpenShift

Transcript of Cloud Native Camel Riding

Page 1: Cloud Native Camel Riding

Cloud native Camel riding with Kubernetes and OpenShift

Page 2: Cloud Native Camel Riding

Christian Posta Principal Middleware Specialist/Architect

Twitter: @christianposta

Blog: http://blog.christianposta.com

Email: [email protected]

•  Committer on Apache Camel, Apache ActiveMQ, Fabric8

•  Worked with largest Microservices, web-scale, unicorn companies

•  Blogger, speaker about DevOps, integration, and microservices

•  Currently writing “Microservices for Java developers” for

O’Reilly (June 2016)

Cloud Native Architectures

Page 3: Cloud Native Camel Riding

Cloud Native Architectures

Page 4: Cloud Native Camel Riding

Ifchangeishappeningontheoutsidefasterthanontheinsidetheendisinsight.

Jack Welch, former CEO, GE

Cloud Native Architectures

S&P company life expectancy

Page 5: Cloud Native Camel Riding

Cloud Native Architectures

Source: Dave Gray, The Connected Company

Page 6: Cloud Native Camel Riding

Source: Dave Gray, The Connected Company

Page 7: Cloud Native Camel Riding

•  Trying to incorporate new technology? •  Trying to copy what others (Netflix, Amazon) are

doing? •  Tactical automation? •  Created a “DevOps” team? •  Exploring cloud services? •  Build/deploy automation? •  OpenSource? •  Piecemeal integration?

How are you keeping up with change?

Cloud Native Architectures

Page 8: Cloud Native Camel Riding

Cloud Native Architectures

•  Faster software delivery •  Own database (data) •  Faster innovation •  Scalability •  Right technology for the

problem •  Test individual services •  Isolation •  Individual deployments

Page 9: Cloud Native Camel Riding

Microservices helps solve the problem of “how do we decouple our services and teams to move quickly at scale to deliver business value”

Cloud Native Architectures

Page 10: Cloud Native Camel Riding

Microservices Envy: http://www.thoughtworks.com/radar/techniques/microservice-envy

You’re not going to do microservices http://christianposta.com/blog/not-gonna-happen

Page 11: Cloud Native Camel Riding

•  If my services are isolated at the process level, I’m doing #microservices

I’m doing microservices if…

•  If I use REST/Thrift/ProtoBuf instead of SOAP, I’m doing #microservices

•  If I use JSON, I’m doing #microservices •  If I use Docker / SpringBoot / Dropwizard /

embedded Jetty, I’m doing #microservices

Page 12: Cloud Native Camel Riding

PeopletrytocopyNet7lix,buttheycanonlycopywhattheysee.Theycopytheresults,nottheprocess.

Adrian Cockcroft, former Chief Cloud Architect, Netflix

Page 13: Cloud Native Camel Riding
Page 14: Cloud Native Camel Riding

Callitwhatyouwant;SOA,microservices–it’salljustdistributedsystems

Christian Posta – Red Hat

Cloud Native Architectures

Page 15: Cloud Native Camel Riding

Cloud Native Architectures

Page 16: Cloud Native Camel Riding

Cloud Native Architectures

Fallacies of distributed computing •  Reliable networking •  Latency is zero •  Bandwidth is infinite •  Network is secure •  Topology doesn’t change •  Single administrator •  Transport cost is zero •  Network is homogenous

https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing

Page 17: Cloud Native Camel Riding

Cloud Native Architectures

If we have to take into account the network, do we still need integration?

Page 18: Cloud Native Camel Riding

Cloud Native Architectures

We’ll just do reactive, event-driven distributed systems… still need integration?

Page 19: Cloud Native Camel Riding

Cloud Native Architectures

Yes; we need reliable integration! •  REST, RPC •  Messaging (ActiveMQ, JMS, AMQP, STOMP, Kafka, etc) •  Legacy (SOAP, mainframe, file processing, proprietary) •  Managed file processing •  Streaming •  Message transformation •  EIPs

Page 20: Cloud Native Camel Riding

Heavy Lifting: Camel for Microservices

Page 21: Cloud Native Camel Riding

Cloud Native Architectures

Apache Camel to the rescue! •  Small Java library •  Distributed-system swiss-army knife! •  Powerful EIPs •  Declarative DSL •  Embeddable into any JVM (EAP, Karaf, Tomcat, Spring

Boot, Dropwizard, Wildfly Swarm, no container, etc) •  Very popular (200+ components for “dumb pipes”)

Page 22: Cloud Native Camel Riding

Real developers ride Camels!

Page 23: Cloud Native Camel Riding

Cloud Native Architectures

Apache Camel to the rescue!

•  Automatic retries, backoff algorithms •  Dynamic routing •  Powerful testing/mocking framework •  Circuit breakers •  Backpressure mechanisms •  Beautiful REST DSL with built in Swagger support

Page 24: Cloud Native Camel Riding

•  “Smart endpoints, dumb pipes” •  Endpoint does one thing well •  Metadata used for further routing •  Really “dynamic” with rules engine (eg,

Drools/BRMS)

Dynamic Routing

Page 25: Cloud Native Camel Riding

REST DSL

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”); }}

Page 26: Cloud Native Camel Riding

•  Throttle EIP •  http://camel.apache.org/throttler.html

•  Blocking SEDA Queue •  from(“seda:name?size=100&blockWhenFull=true)

•  Configure jetty/netty to use blocking acceptor queues •  https://wiki.eclipse.org/Jetty/Howto/High_Load

•  Using Exception handling/retry and DLQ logic when getting flow controlled •  http://camel.apache.org/error-handling-in-camel.html

Backpressure with Camel

Page 27: Cloud Native Camel Riding

Circuit breaker

public class OrderProcessorRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from(“direct:someinterface”) .loadbalance()

.circuitBreaker(3, 20000L, MyException.class).to(“ibatis:storeOrder?statementType=Insert”);

}}

Page 28: Cloud Native Camel Riding

Cloud Native Architectures

Quick Demo?

Page 29: Cloud Native Camel Riding

Cloud Native Architectures

Page 30: Cloud Native Camel Riding

Cloud Native Architectures

Typical problems developing microservices •  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?

Page 31: Cloud Native Camel Riding

Cloud Native Architectures

Shared infrastructure platforms headaches

•  Different teams •  Different rates of change •  VM sprawl •  Configuration drift •  Isolation / multi-tenancy

•  Performance •  Real-time vs batch •  Compliance •  Security •  Technology choices

Page 32: Cloud Native Camel Riding

Cloud Native Architectures

Reasonable solutions

•  Automate, automate, automate

•  Duct tape, shoe string, bungee cords

•  Rely on templates, versioning, scm

•  Fuse Fabric

Page 33: Cloud Native Camel Riding
Page 34: Cloud Native Camel Riding

Cloud Native Architectures

Immutable infrastructure/deploys •  “we’ll just put it back in Ansible”

•  Avoid chucking binaries / configs together and hope!

•  Cattle vs Pets

•  Don’t change it; replace it

•  System created fully from automation; avoid drift

•  Eliminate manual configuration/intervention

Page 35: Cloud Native Camel Riding

Docker / Linux Containers

Page 36: Cloud Native Camel Riding
Page 37: Cloud Native Camel Riding

Kubernetes

Page 38: Cloud Native Camel Riding
Page 39: Cloud Native Camel Riding

•  Developer focused workflow •  Enterprise ready •  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

OpenShift

Page 40: Cloud Native Camel Riding

Red Hat OpenShift

Public PaaS Service

On-premise or Private PaaS Software

Open Source PaaS Project

Page 41: Cloud Native Camel Riding
Page 42: Cloud Native Camel Riding

Cloud Native Architectures

Page 43: Cloud Native Camel Riding

RED HAT JBOSS FUSE

Development and tooling

Develop, test, debug, refine, deploy

JBoss Developer Studio

Web services framework Web services standards, SOAP, XML/

HTTP, RESTful HTTP

Integration framework Transformation, mediation, enterprise

integration patterns

Management and monitoring

System and web services metrics,

automated discovery, container status, automatic updates

JBoss Operations Network

+ JBoss Fabric Management

Console (hawtio)

Apache CXF Apache Camel

Reliable Messaging JMS/STOMP/NMS/MQTT, publishing-subscribe/point-2-point, store and forward

Apache ActiveMQ

Container Life cycle management, resource management, dynamic deployment,

security and provisioning

Apache Karaf + Fuse Fabric

RED HAT ENTERPRISE LINUX Windows, UNIX, and other Linux

Page 44: Cloud Native Camel Riding

44

Enterprise Service Bus?

Page 45: Cloud Native Camel Riding
Page 46: Cloud Native Camel Riding

Cloud Native Architectures

Fuse Integration Services for OpenShift

•  Set of tools for integration developers

•  Build/package your Fuse/Camel services as Docker

images

•  Run locally on CDK

•  Deploy on top of OpenShift

•  Plugs-in to your existing build/release ecosystem

(Jenkins/Maven/Nexus/Gitlab,etc)

Page 47: Cloud Native Camel Riding

Cloud Native Architectures

Fuse Integration Services for OpenShift

•  Manage them with Kubernetes/OpenShift

•  Flat class loader JVMs

•  Take advantage of existing investment into Karaf with

additional options like “just enough app server”

deployments

•  Supports Spring, CDI, Blueprint

Page 48: Cloud Native Camel Riding

Cloud Native Architectures

Page 49: Cloud Native Camel Riding

Cloud Native Architectures

Using FIS on Red Hat CDK

•  Small VM run locally by developers

•  Full access to Docker, Kubernetes, OpenShift

•  Deploy your suite of microservices with ease!

•  Uses Vagrant/VirtualBox

•  Getting Started on Windows! http://bit.ly/1U5xU4z

Page 50: Cloud Native Camel Riding

Cloud Native Architectures

Typical problems developing microservices •  How to run them all locally? •  How to package them •  How to test? •  Vagrant? VirtualBox? VMs? •  Specify configuration •  Process isolation •  Service discovery •  Multiple versions?

Page 51: Cloud Native Camel Riding

Cloud Native Architectures

Page 52: Cloud Native Camel Riding

Cloud Native Architectures

Page 53: Cloud Native Camel Riding

Cloud Native Architectures

5 min demo

Page 54: Cloud Native Camel Riding

Cloud Native Architectures

What’s included in FIS?

•  Docker base images

•  Source to Image base images

•  Archetypes for new-project creation

•  Maven plugins

•  AMQ discovery (within OpenShift) plugin

•  HawtIO based camel tooling for web-based JVM/Camel

introspection/visualization

Page 55: Cloud Native Camel Riding

Cloud Native Architectures

Quick Demo?

Page 56: Cloud Native Camel Riding

•  Trying to incorporate new technology? •  Trying to copy what others (Netflix, Amazon) are

doing? •  Tactical automation? •  Created a “DevOps” team? •  Exploring cloud services? •  Build/deploy automation? •  OpenSource? •  Piecemeal integration?

How are you keeping up with change?

Cloud Native Architectures

Page 57: Cloud Native Camel Riding

•  100% open source, ASL 2.0 •  Technology agnostic (java, nodejs, python,

golang, etc) •  Built upon decades of industry practices •  1-click automation •  Cloud native (on premise, public cloud, hybrid) •  Complex build/deploy pipelines (human

workflows, approvals, chatops, etc) •  Comprehensive integration inside/outside the

platform

What if you could do all of this right now with an open-source platform?

Page 58: Cloud Native Camel Riding
Page 59: Cloud Native Camel Riding
Page 60: Cloud Native Camel Riding

•  Docker native, built on top of Kubernetes API •  Out of the box CI/CD, management UI •  Logging, Metrics •  ChatOps •  API Management •  iPaaS/Integration •  Chaos Monkey •  Lots and lots of tooling/libraries to make

developing cloud-native applications easier

http://fabric8.io

Page 61: Cloud Native Camel Riding
Page 62: Cloud Native Camel Riding
Page 63: Cloud Native Camel Riding

Christian Posta Principal Middleware Specialist/Architect

Twitter: @christianposta

Blog: http://blog.christianposta.com

Email: [email protected]

Questions and

Discussion