event driven microservices with
play

Event driven Microservices with VERT.X & Kubernetes Andy - PowerPoint PPT Presentation

Event driven Microservices with VERT.X & Kubernetes Andy Moncsek Senior Consultant Andy.Moncsek@trivadis.com Twitter: @AndyAHCP BASEL BERN BRUGG DSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE


  1. Event driven Microservices with VERT.X & Kubernetes Andy Moncsek Senior Consultant Andy.Moncsek@trivadis.com Twitter: @AndyAHCP BASEL BERN BRUGG DÜSSELDORF FRANKFURT A.M. FREIBURG I.BR. GENF HAMBURG KOPENHAGEN LAUSANNE MÜNCHEN STUTTGART WIEN ZÜRICH

  2. Agenda 1. Why? 2. Event driven Microservices 3. VERT.X & Hazelcast 4. Docker & Kubernetes 5. Hazelcast & Kubernetes 6. Demo 2 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  3. Why? 3 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  4. Why? Developing one Microservice is fun   Reduced scope  Choose your technology/language  Easy to deploy/test 4 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  5. Why? Typical microservice architecture 5 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  6. Why? Developing many Microservices can be a pain   Complex deployment / orchestration / testing  Service registry & lookup  latency  DNS & Load balancer  complex 6 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  7. Why?  Idea  Avoid Service registry & lookup  Decouple services  async + events  Fast re-/deploy  And more: resilient, … 7 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  8. Event driven Microservices 8 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  9. Event driven microservice  Asynchronously  Any number of receivers  Easy Load Balancing  Pub/Sub + p2p  No need for service discovery 9 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  10. Event-driven (micro-)service  Traditional way  Message Broker  No direct request / response  Broker  single point of failure 10 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  11. Event-driven microservice  Using an in-memory data grid  Automatic node lookup (services)  Failover  Shared data  replicated in cluster  Pub / sub  Request / response  NO Service discovery 11 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  12. VERT.X & Hazelcast 12 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  13. What Vert.x is is a tool-kit for building reactive appications on the JVM 13 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  14. What Vert.x is scale polyglot fun general purpose 14 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  15. Verticles  Smallest deployable unit public class Service extends AbstractVerticle {  Scalable public void start() {  Actor-like this.vertx... }  Access to Vertx instance public void stop() { } } 15 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  16. Event Loop  Multi-Reactor - event loop (N threads for N verticles on one instance) server.requestHandler( request -> { request.response ().end(„ Hello!");  Don’t block the Event -Loop! } );  Don’t call us, we call you 16 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  17. Event Bus (EB) EventBus eb = vertx.eventBus();  Nervous system of Vert.x eb. send (“ the.addr" , “ hello", ar -> {  Communicate log.info(ar.result().body());  Distributed p2p });  Pub/sub eb. consumer (“ the.addr", message -> { message. reply (“don‘t know");  Request-response }); 17 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  18. What is Hazelcast ? is an In-Memory Data Grid (and the default cluster provider of Vert.X) 18 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  19. Hazelcast  Open Source & Enterprise Edition  Features:  Distributed Caching & Compute  Clustering  Storage  Management & Security 19 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  20. Hazelcast Clustering  Discover Cluster Members using:  Plugins:  Multicast  AWS  TCP  Azure  EC2 Cloud  Kubernetes  jclouds  Etcd  … 20 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  21. Run Vert.x inclustered mode  Vert.x default config: multicast  „ java – jar service.jar – cluster “ 21 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  22. Demo 22 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  23. Demo https://github.com/amoAHCP/kube_vertx_demo 23 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  24. Docker & Kubernetes 24 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  25. Docker isolation + automation + inherence + repository + versioning Ubuntu Java WildFly App image image image image Docker alone doesn‘t make you happy ; -) 25 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  26. Kubernetes Scale HA distributed containers Google starts >20billion apps/week Gmail, Web Search, Maps … 26 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  27. Kubernetes But It is not trivial 27 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  28. Kubernetes Service oriented Services -> machines “Let users manage applications , not machines” 28 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  29. Kubernetes  Platform for hosting containers in clusteres  Docker containers across multiple hosts  Provides: monitoring, grouping, load balancing, auto-healing, scaling  Contributors: Google, Redhat, Microsoft, ... 29 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  30. Kubernetes – Key concepts 1. Push Docker image to Registry 2. Create service 3. Create Controller 4. (Scale Pods) 30 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  31. Kubernetes Pods  Group of containers  Same network / namespace / IP  Environmental variables  Shared volumes 31 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  32. Kubernetes Controller  Ensure X pods are running  Pod templates  Rolling update 32 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  33. Kubernetes Services  Pod discovery ports:  IP per service -port: 80 targetPort: 8181  Route to pods IP: 10.3.245.51 selector: IP: 146.148.15.33 (pub.) name: frontend selected with labels  Load balancer labels: labels: labels: name: frontend name: frontend name: frontend 33 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  34. Kubernetes – all together https://github.com/brendandburns/gcp-live-k8s- visualizer 34 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  35. Hazelcast & Kubernetes 35 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  36. Hazelcast & Kubernetes  What we want  Case 1: Lookup all nodes (Verticles) managed by controller  1 – N pods  1 – X container  Case 2: Lookup all nodes in a cluster  N services per cluster  Routing to X pods 36 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  37. Hazelcast & Kubernetes  What we get >kubectl scale rc frontend --replicas=5 >kubectl scale rc read --replicas=10 >kubectl scale rc write --replicas=2 37 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  38. Hazelcast & Kubernetes  What we get  Easy scale- up/down of service instances  Failover provided by Kubernetes and Hazelcast  Distributed Event-Bus  each Verticle instance  Replicated shared data 38 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  39. Hazelcast node discovery in Kubernetes  Discover Cluster Members using:  Plugins:  Multicast  AWS  TCP  Azure  EC2 Cloud  Kubernetes  jclouds  Etcd  … 39 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  40. Hazelcast node discovery in Kubernetes  Hazelcast discovery plugin for Kubernetes  Option 1: Kubernetes REST API  Allows discovery by service name  Option 2: DNS Lookup  Enable custom cluster.xml in Vert.X  put to classpath  https://github.com/noctarius/hazelcast-kubernetes-discovery 40 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

  41. Hazelcast node discovery in Kubernetes (2)  Vertx-service-discovery project (similar to Hazelcast Option 1)  Option: Kubernetes REST API  Allows discovery by label OR by namespace  Enable custom cluster.xml in Vert.X  put to classpath  https://github.com/vert-x3/vertx-service-discovery 41 11.07.2016 Event driven Microservices with VERT.X & Kubernetes

Recommend


More recommend