Microservices Implementations not only with Java. Eberhard Wolff Fellow

Similar documents
Four times Microservices: REST, Kubernetes, UI Integration, Async. Eberhard Fellow

Microservices mit Java, Spring Boot & Spring Cloud. Eberhard Wolff

Service Mesh with Istio on Kubernetes. Dmitry Burlea Software FlixCharter

SPRING CLOUD AGIM EMRULI - MIMACOM

What is Spring Cloud

CADEC 2016 MICROSERVICES AND DOCKER CONTAINERS MAGNUS LARSSON

Microservices. Are your Frameworks ready? Martin Eigenbrodt Alexander Heusingfeld

Spring Cloud, Spring Boot and Netflix OSS

To Microservices and Beyond!

MSB to Support for Carrier Grade ONAP Microservice Architecture. Huabing Zhao, PTL of MSB Project, ZTE

Zero to Microservices in 5 minutes using Docker Containers. Mathew Lodge Weaveworks

Anti-fragile Cloud Architectures. Agim Emruli - mimacom

Java Architectures A New Hope. Eberhard Wolff

Cloud Native Architecture 300. Copyright 2014 Pivotal. All rights reserved.

Cloud Native Java with Kubernetes

Microservices. Chaos Kontrolle mit Kubernetes. Robert Kubis - Developer Advocate,

Hands-On: Hystrix. Best practices & pitfalls

ISTIO 1.0 INTRODUCTION & OVERVIEW OpenShift Commons Briefing Brian redbeard Harrington Product Manager, Istio

SAMPLE CHAPTER. John Carnell MANNING

Resilience, Service- Discovery and Z- D Deployment. Bodo Junglas, York Xylander

Containers, Serverless and Functions in a nutshell. Eugene Fedorenko

Enabling Multi-Cloud with Istio Stretching an Istio service mesh between Public & Private Clouds. John Joyce Robert Li

To Kill a Monolith: Slaying the Demons of a Monolith with Node.js Microservices on CloudFoundry. Tony Erwin,

NGINX: From North/South to East/West

Cloud I - Introduction

Reactive Microservices Architecture on AWS

BARCELONA. 2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

Istio. A modern service mesh. Louis Ryan Principal

Nevin Dong 董乃文 Principle Technical Evangelist Microsoft Cooperation

Wrapp. Powered by AWS EC2 Container Service. Jude D Souza Solutions Wrapp Phone:

LEAN & MEAN - GO MICROSERVICES WITH DOCKER SWARM AND SPRING CLOUD

MICROSERVICES I PRAKTIKEN från tröga monoliter till en arkitektur för kortare ledtider, högre skalbarhet och ökad feltolerans

Ray Tsang Developer Advocate Google Cloud Platform

Application Centric Microservices Ken Owens, CTO Cisco Intercloud Services. Redhat Summit 2015

Running MarkLogic in Containers (Both Docker and Kubernetes)

SERVERLESS APL. For now this is just research in Cloud technologies in SimCorp A/S.

Managing your microservices with Kubernetes and Istio. Craig Box

SBB. Java User Group 27.9 & Tobias Denzler, Philipp Oser

Kubernetes The Path to Cloud Native

Kubernetes introduction. Container orchestration

A Comparision of Service Mesh Options

JFOKUS 2017 EXPERIENCES FROM USING DISCOVERY SERVICES IN A MICROSERVICE LANDSCAPE

Microservices What, Why? ( 마이크로서비스를꼭써야하나 )

Microservice Bus Tutorial. Huabing Zhao, PTL of MSB Project, ZTE

Developer Experience with. Spencer Gibb, Dave Syer, Spring Cloud

Code: Slides:

August, HPE Propel Microservices & Jumpstart

Going Reactive. Reactive Microservices based on Vert.x. JavaLand Kristian Kottke

Tapestry. Code less, deliver more. Rayland Jeans

Microservices stress-free and without increased heart-attack risk

How to Re-Architect without Breaking Stuff (too much) Owen Garrett March 2018

Which compute option is designed for the above scenario? A. OpenWhisk B. Containers C. Virtual Servers D. Cloud Foundry

Implementing Microservices Tracing with Spring Cloud and Zipkin

Using AWS to Build a Large Scale Dockerized Microservices Architecture. Dr. Oliver Wahlen moovel Group GmbH Frankfurt, 30.

Cloud Computing design patterns blueprints

A T O O L K I T T O B U I L D D I S T R I B U T E D R E A C T I V E S Y S T E M S

BUILDING MICROSERVICES ON AZURE. ~ Vaibhav

DevOps Course Content

Eclipse MicroProfile with Thorntail (formerly WildFly Swarm)

the road to cloud native applications Fabien Hermenier

Kuber-what?! Learn about Kubernetes

Architekturen für die Cloud

Microservice Powered Orchestration

API, DEVOPS & MICROSERVICES

Efficiently exposing apps on Kubernetes at scale. Rasheed Amir, Stakater

OPENSHIFT 3.7 and beyond

/ Cloud Computing. Recitation 5 February 14th, 2017

Full Stack Developer with Java

Introduction to reactive programming. Jonas Chapuis, Ph.D.

Cloud & container monitoring , Lars Michelsen Check_MK Conference #4

Upgrading to Spring Boot 2.0

Service Computation 2018 February 18 22, Keynote Speech on Microservices A modern, agile approach to SOA

Send me up to 5 good questions in your opinion, I ll use top ones Via direct message at slack. Can be a group effort. Try to add some explanation.

Cloud providers, tools and best practices in running Magento on Kubernetes. Adrian Balcan MindMagnet Software

Kubernetes. Introduction

20486-Developing ASP.NET MVC 4 Web Applications

Continuous delivery while migrating to Kubernetes

Developing ASP.NET MVC 5 Web Applications. Course Outline

Kubernetes Integration with Virtuozzo Storage

An Introduction to Kubernetes

Application Resilience Engineering and Operations at Netflix. Ben Software Engineer on API Platform at Netflix

OpenShift 3 Technical Architecture. Clayton Coleman, Dan McPherson Lead Engineers

Developing ASP.Net MVC 4 Web Application

The Road to Istio: How IBM, Google and Lyft Joined Forces to Simplify Microservices

Open Cloud Engine - An Open Source Cloud Native Transformer

Ingress Kubernetes Tutorial

Stream and Batch Processing in the Cloud with Data Microservices. Marius Bogoevici and Mark Fisher, Pivotal

ARCHITECTING WEB APPLICATIONS FOR THE CLOUD: DESIGN PRINCIPLES AND PRACTICAL GUIDANCE FOR AWS

20486: Developing ASP.NET MVC 4 Web Applications

More on Testing and Large Scale Web Apps

Containers OpenStack. Murano brings Docker & Kubernetes to OpenStack. Serg Melikyan. software.mirantis.com. January 27, 2015

COURSE 20486B: DEVELOPING ASP.NET MVC 4 WEB APPLICATIONS

RAFT library for Java

20486: Developing ASP.NET MVC 4 Web Applications (5 Days)

Cloud Service Engine. Product Description. Issue 01 Date

Web Applications. Software Engineering 2017 Alessio Gambi - Saarland University

Kubernetes - Networking. Konstantinos Tsakalozos

Kubernetes Ingress Virtual Service Configuration

Developing ASP.NET MVC 4 Web Applications

Unit 3 - Week 2 lectures: Building your webapp

Transcription:

Microservices Implementations not only with Java Eberhard Wolff http://ewolff.com @ewolff Fellow

http://continuous-delivery-buch.de/ http://continuous-delivery-book.com/

http://microservices-buch.de/ http://microservices-book.com/

FREE!!!! http://microservices-book.com/ primer.html http://microservices-buch.de/ ueberblick.html

What are Microservices? > Modules providing interfaces > Processes, Containers, virtual machines > Standardized communication: Synchronous, asynchronous, or UI integration > Macro- and Micro-Architecture i.e. clearly defined common, and specific decisions

What are Microservices? > Independent Continuous Delivery Pipeline including tests > Standardized Operations (configuration, log analysis, tracing, monitoring, deployment) > Standards on the interface level e.g. not a specific log library > Resilient (compensate failure, crashes ) therefore separate processes, VM, Docker containers

Microservices = Extreme Decoupling

Operational Complexity Extreme Decoupling

Link Micro Service Sync Async Micro Service

Synchronous REST Microservices

external HTTP internal REST Customer Order Catalog

Synchronous Microservices > Service Discovery: IP / port? > Load Balancing: Resilience and independent scaling > Routing: Route external request to microservices > Resilience

Synchronous Microservices with Java, Spring Boot / Cloud & the Netflix Stack

https://github.com/ ewolff/microservice

Service Discovery Eureka

Why Eureka for Service Discovery? > REST based service registry > Supports replication > Caches on the client > Resilient > Fast > Foundation for other services

Eureka Client > @EnableDiscoveryClient: generic > @EnableEurekaClient: specific > Dependency on spring-cloud-starter-eureka > Automatically registers application

Eureka Server @EnableEurekaServer @EnableAutoConfiguration public class EurekaApplication { public static void main(string[] args) { SpringApplication.run(EurekaApplication.class, args); } } Add dependency to spring-cloud-starter-eureka-server

Load Balancing Ribbon

Ribbon: Client Side Load Balancing Client Load Balancer Server > Decentralized Load Balancing > No bottle neck > Resilient

Ribbon Example Via Dependency Injection private LoadBalancerClient loadbalancer; Eureka name ServiceInstance instance = loadbalancer.choose("catalog"); String url = "http://" + instance.gethost() + ": + instance.getport() + "/catalog/"; Need dependency to spring-cloud-starter-ribbon

Resilience

Timeout > Do call in other thread pool > Won t block request handler > Can implement timeout

Circuit Breaker > Called system fails -> open > Open -> do not forward call > Forward calls after a time window

Hystrix Configuration > Failure Percentage > Time window until open configurable > Time window to reject requests > > https://github.com/netflix/hystrix/wiki/con figuration

Hystrix & Spring Cloud > Annotation based approach > Annotations of javanica libraries > Simplifies Hystrix > No commands

Enable Hystrix @SpringBootApplication @EnableDiscoveryClient @EnableCircuitBreaker public class OrderApp { public static void main(string[] args) { SpringApplication.run(OrderApp.class, args); } } Need spring-cloud-starter-hystrix

@HystrixCommand(fallbackMethod = "getitemscache", commandproperties = { @HystrixProperty(name = "circuitbreaker.requestvolumethreshold", value = "2") } ) public Collection<Item> findall() { } this.itemscache = pagedresources.getcontent(); return itemscache; Fallback private Collection<Item> getitemscache() { } return itemscache;

Zuul Routing

Routing > One URL to the outside > Internal: Many Microservices > REST > Or HTML GUI > Hides internal structure (sort of) > Might add filters

Automatically maps route to server registered on Eureka i.e. /customer/** to CUSTOMER No configuration Zuul Proxy Customer Order Catalog

Netflix Stack > Service Discovery: Eureka > Load Balancing: Ribbon > Routing: Zuul > Resilience: Hystrix > Non-Java microservice: specific clients or sidecar

Consul > Service Discovery by Hashicorp > DNS interface > Platform independent > Consul Template can fill out config file templates > e.g. for load balancer > unaware of service discovery

https://github.com/ ewolff/microservice-consul

Kubernetes

https://github.com/ ewolff/microservicekubernetes

Kubernetes > Docker container on a single machine: Not resilient enough > Kubernetes: Run Docker container in cluster > and much more!

Pods > Kubernetes runs Pods > Pods = 1..n Docker containers > Shared volumes > and ports

Replica Sets > Deployment creates replica set > Replica sets ensure that a certain number of Pods run >...for load balancing / fail over

Services > Services ensure access to the Pods > DNS entry > Cluster-wide unique IP address for internal access > External load balancer for external access

Pod starts Service Replica Set DNS Cluster IP address Load Balancer Pod creates Deployment

Load Balancer Service 1 Service 2 Load Balancer (e.g. Amazon Kubernetes Cluster Server Elastic Load Balancer) Service adds a load balancer Service 1 Service 2 Kubernetes Cluster Server

Kubernetes > Service Discovery: DNS > Load Balancing: IP > Routing: Load Balancer or Node Port > Resilience: Hystrix? envoy proxy? > Can use any language

No code dependencies on Kubernetes!

UI Integration

UI Integration > Very powerful > Often overlooked > UI should be part of a microservices > Self-contained System emphasize UI > http://scs-architecture.org/

System 1 System 2 Hyperlinks to navigate between systems.

System 1 System 2 Transclusion of content served by another application

https://www.innoq.com/ en/blog/transclusion/

Server-side integration Browser Backend 1 UI 1 Frontend Server UI 2 Backend 2 > Centralized aggregation > Bottleneck (runtime/development time)

Server-side Integration: Technologies > ESI (Edge Side Include) > E.g. Varnish cache > SSI (Server Side Include) > E.g. Apache httpd, Nginx

ESI (Edge Side Includes)... <header>... Logged in as: Ada Lovelace... </header>... <div>... a lot of static content and images... </div>... <div> some dynamic content </div>

ESI (Edge Side Includes)... <esi:include src="http://example.com/header" />... <div>... a lot of static content and images... </div>... <esi:include src="http://example.com/dynamic" /> http://www.w3.org/tr/esi-lang

https://github.com/ ewolff/scs-esi

Client-side integration Browser UI 1 Backend 1 UI 2 Backend 2

Client-side Integration: Code Replace <a href= " " class= "embeddable"> with content of document in a <div> (jquery) $("a.embeddable").each(function(i, link) { $("<div />").load(link.href, function(data, status, xhr) { $(link).replacewith(this); }); });

Transclusion > Tighter coupling than links > but still very loose > Common CSS > (Avoid) common JavaScript > Layout > Look & Feel

https://github.com/ ewolff/scs-jquery

https://github.com/ ewolff/ crimson-assurance-demo

Conclusion

Operational Complexity Extreme Decoupling

Conclusion: Communication > Netflix: Java focus, code dependencies > Kubernetes: No code dependencies > UI Integration more decoupling

Links > List of microservices demos (sync, async, UI): http://ewolff.com/microservices-demos.html > REST vs. Messaging for Microservices https://www.slideshare.net/ewolff/rest-vsmessaging-for-microservices

EMail jugsaxony2017@ewolff.com to get: Slides + Microservices Primer + Sample Microservices Book + Sample of Continuous Delivery Book Powered by Amazon Lambda & Microservices