The Micro Way. czyli architektura mikroserwisów. Konrad Król



Podobne dokumenty
Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

Architektura mikroserwisów na platformie Spring IO

JAVA EE MODEL APLIKACJI. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Program szkolenia: REST i Microservices w PHP

Paweł Rajba

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, Bydgoszcz

OD MONOLITU DO MIKROUSŁUGI MICROSERVICES

Quality in Clouds. Michał Dec

JAVA NA SERWERZE SPRING. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Laboratorium Programowania Kart Elektronicznych

EJB 3.0 (Enterprise JavaBeans 3.0)

1 Wprowadzenie do J2EE

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Automatyzacja procesów biznesowych Andrzej Sobecki. ESB Enterprise service bus

KURS SPRING APLIKACJE WEBOWE

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Dokumentacja kompilacji źródeł aplikacji 1.0

Architektura systemów webowych wysokiej przepustowości. na przykładzie Wikia

OSGi Agata Hejmej

Zabawa z prawem Conway a. Łukasz Januszek Żółw

Aplikacje RMI

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

Aplikacje RMI Lab4

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Automatyczne testowanie aplikacji Android

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

TDD Pythonowych Mikroserwisów. Michał Bultrowicz

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Programowanie komponentowe 5

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

JAX-RS czyli REST w Javie. Adam Kędziora

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Dobre praktyki w doborze technologii rozwiązań informatycznych realizujących usługi publiczne

CI/CD - CO TO? PO CO? JAK?

Program szkolenia: JavaScript Craftsmanship

Zaawansowane aplikacje WWW - laboratorium

HP Service Anywhere Uproszczenie zarządzania usługami IT

Zastosowanie komponentów EJB typu Session

Zaawansowane Aplikacje Internetowe

Analiza i projektowanie aplikacji Java

Enterprise Java Beans wykład 7 i 8

Tworzenie i wykorzystanie usług sieciowych

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

Wybrane działy Informatyki Stosowanej

Projektowanie architektury systemu rozproszonego. Jarosław Kuchta Projektowanie Aplikacji Internetowych

IBM Corporation IBM SOA Center of Excellence

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Usługowy model zarządzania w oparciu o ITIL v3. wprowadzenie do biblioteki ITIL na prostym przykładzie

Fragmenty są wspierane od Androida 1.6

SIMON SAYS ARCHITECTURE! Usługi zdalne. Technologie, techniki i praktyki implementacji

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Stanowe komponenty sesyjne

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Czym jest jpalio? jpalio jpalio jpalio jpalio jpalio jpalio jpalio jpalio

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Języki i metody programowania Java. Wykład 2 (część 2)

PureSystems zautomatyzowane środowisko aplikacyjne. Emilia Smółko Software IT Architect

MONITOROWANIE DOSTĘPNOŚCI USŁUG IT

Enterprise JavaBeans

Kurs OPC S7. Spis treści. Dzień 1. I OPC motywacja, zakres zastosowań, podstawowe pojęcia dostępne specyfikacje (wersja 1501)

Programowanie zespołowe

Bezpieczeństwo aplikacji internetowych. Rozwój napędzany potrzebą WALLF Web Gateway. Leszek Miś, RHCA,RHCSS,Sec+ Linux Polska Sp. z o.o.

Platformy Technologiczne

Enterprise JavaBean 3.0

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Zmiana sposobu dostarczania aplikacji wspierających funkcje państwa

Programowanie w Javie cz. 1 Wstęp. Łódź, 24 luty 2014 r.

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Asseco dla Zdrowia r.

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Komponenty sterowane komunikatami

Wykład 1 Inżynieria Oprogramowania

SPRING FRAMEWORK. dr inż. Jakub Chłapioski

BUDOWANIE APLIKACJI. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Skalowanie i monitorowanie działania systemu dlibra 5.0

Systemy operacyjne na platformach mobilnych

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Open Source w służbie developerom

O nas. Usługi. jpbs realizuje następujące rodzaje projektów usługowych:

PHP revisited - odświerzenie spojrzenia na programowanie w PHP

Android, wprowadzenie do SDK

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Modele komponentowe SCA, OSGi, Distributed OSGi i OSGi Enterprise a Java EE

Programowanie obiektowe zastosowanie języka Java SE

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Wybrane działy Informatyki Stosowanej

Fuzzing OWASP The OWASP Foundation Piotr Łaskawiec J2EE Developer/Pentester

Transkrypt:

The Micro Way czyli architektura mikroserwisów Konrad Król

Zainteresowanie microserwisami By Google Trends

Zainteresowanie microserwisami By ThoughtWorks Technology Radar Assess marzec 2012 Rosnące zainteresowanie tematem mikroserwisów styczeń 2014 Trial październik 2012

Classic Way vs Micro Way James Hughes, Micro Service Architecture

Aplikacje monolityczne Warstwa prezentacji: specjaliści UI Warstwa logiki: specjaliści Java Warstwa persystencji: specjaliści DB Martin Fowler, Microservices, 25 March 2014

Aplikacje monolityczne Conway's law Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure. Melvin Conway, 1967

Aplikacje monolityczne Charakterystyka monolitów Architektura wielowarstwowa Oparte o z góry określony stack technologiczny Wiele (100+ tysięcy) linii kodu

Aplikacje monolityczne Typowe problemy Zamknięcie na zmiany nieprzewidziane na etapie projektowania Zamknięty stack technologiczny Bardzo długi cykl życia

Aplikacje monolityczne Typowe problemy Skalowalność Ryzyko związane z wdrażaniem nowej wersji Wydajność, wspólne wątki Długi proces wprowadzania zmian

Skalowalność w ujęciu monolitycznym

Skalowalność w ujęciu monolitycznym

Skalowalność pojedynczego microserwisu Load Balancer

Wprowadzanie zmian w ujęciu monolitycznym

Wprowadzanie zmian w ujęciu monolitycznym

Wprowadzanie zmian w ujęciu monolitycznym M CM QA

The Micro Way is approach to developing a single application as a suite of small services. Martin Fowler, Microservices, 25 March 2014

The Micro Way Single responsibility wiele luźno powiązanych aplikacji każda aplikacja ma tylko jedną, konkretną funkcję kilkaset linii kodu

The Micro Way Containerless one process one service embedded container executable fat jar

The Micro Way Dedykowane repozytorium osobne repozytorium dla każdej aplikacji wspólne moduły w formie bibliotek

The Micro Way Production ready Monitoring Skalowalne komponenty Health check endpoints

The Micro Way Zwinne zespoły Podzielone pod kątem obszarów biznesowych Martin Fowler, Microservices, 25 March 2014

The Micro Way

The Micro Way Wyzwania: Narzut na zdalną komunikację Przenoszenie odpowiedzialności pomiędzy systemami jest trudniejsze niż pomiędzy bibliotekami

The micro way porady Dobór technologii: Standardised w przypadku interfejsów Free for all - czyli możesz poeksperymentować wewnątrz niektórych mikroserwisów

The micro way porady Monitoring: Dbaj o monitoring na produkcji Używaj narzędzi pozwalających na dostęp do logów z jednego miejsca (#logstash, #kibana)

The micro way porady Testowanie systemów produkcyjnych: Stwórz testową transakcję i obserwuj jak przepływa przez system Pomyśl w jaki sposób ją zidentyfikować (np. customowy HTTP Header)

The micro way porady Interfejsy publiczne vs opublikowane Interfejs publiczny jego metody są publiczne dla innych elementów systemu Interfejs opublikowany jest dostępny publicznie, poza ramami systemu, nie znamy jego klientów

The micro way porady Cascade failures 1 Definiuj timeouty Używaj komunikacji asynchronicznej (jeśli możliwe) 4 2 3 5 6

The micro way porady Deployment trzy żelazne zasady Jeden zunifikowany sposób na deployment (#fabric) Zawsze rób deployment tylko jednego serwisu Zrób deployment jak najszybciej

API microserwisów Tolerant reader Klient usługi powinien nałożyć jak najmniejsze oczekiwania na strukturę odpowiedzi nawet wtedy gdy dostawca usługi dostarcza schemat odpowiedzi, np. XSD # GET /products/1 <?xml version="1.0" encoding="utf 8"?> <product> <name>iphone 5s</name> <price>2200,00 PLN</price> <description>very modern and elegant...</description> <category>telecommunication</category> <rating>5</rating> <opinions>101</opinions> </product>

API microserwisów # GET /v2/products/1 Wersjonowanie Najlepsze rozwiązanie w przypadku opublikowanych API Bardzo zwiększa narzut na utrzymanie systemu Można obsługiwać tylko określoną liczbę wersji wstecz <?xml version="1.0" encoding="utf 8"?> <product> <name>iphone 5s</name> <price>2200,00 PLN</price> <description>very modern and elegant...</description> <category>telecommunication </category> <categories> <category>telecommunication</category> <category>mobile phones</category> </categories> <rating>5</rating> <opinions>101</opinions> </product>

API microserwisów Extension points Jeśli jednak chcesz walidować odpowiedzi oryginalną schemą Każdy schemat jest kompatybilny do przodu i do tyłu Dobry do przekazywania ekstra parametrów <xs:complextype name="extension"> <xs:sequence> <xs:any minoccurs="1" maxoccurs="unbounded" processcontents="lax" /> </xs:sequence> </xs:complextype>

API microserwisów Consumer driven contract Pokazuje które elementy API są wykorzystywane w procesach biznesowych Mamy bardzo szybki feedback, która zmiana może się nie udać #Schematron, #pact <pattern name="validate product"> <rule context="*//p:product"> <assert test="p:name">must contain Name</assert> <assert test="p:price">must contain Price</assert> </rule> </pattern>

API microserwisów Distributed transactions Write-of Retry Compensation A B C D

Dostępne frameworki

Spring Boot czym jest? Automatyczna (domyślna) konfiguracja Convention over configuration Metryki Startery No XML Config Standalone Apps

Spring Boot przykład dependencies { compile("org.springframework.boot:spring-boot-starter-web") } build.gradle package hello; import org.springframework.boot.autoconfigure.enableautoconfiguration; import org.springframework.boot.springapplication; import org.springframework.context.annotation.componentscan; @ComponentScan @EnableAutoConfiguration public class Application { public static void main(string[] args) { SpringApplication.run(Application.class, args); } } package hello; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.bind.annotation.requestmapping; @RestController public class HelloController { @RequestMapping("/") public String index() { return "Greetings from Spring Boot!"; } } Application.java HelloController.java

Spring Boot przykład Build & Run gradle build java -jar java -jar build/libs/gs-rest-service-0.1.0.jar curl localhost:8080 Czego nie ma w środku? Co siedzi w środku? spring-core spring-web jackson embedded-tomcat Log4j... web.xml beans.xml...

Spring Boot więcej przykładów Przewodniki od spring.io można ukończyć w 10-15 minut można zbudować maven'em lub gradl'em można pobrać z github'a (wersja początkowa i końcowa) są oparte o startery od Spring Boot

Spring Boot Starters Spring Boot starters Rozwijane przez community Przykłady: jpa, web, test, tomcat, jetty, jdbc, batch, amqp, security... Obejmują większość popularnych technologii używanych ze Springiem

Production ready spring-boot-actuator monitoring oraz zdalny dostęp poprzez: jmx ssh endpointy: /info /health /beans /env /dump /metrics /trace /autoconfigurationreport /shutdown

Spring Boot vs Spring Roo find. type f xargs cat wc l find. type f wc l Spring Boot 87 linii kodu 4 pliki Spring Roo 1130 linii kodu 26 plików

Źródła Martin Fowler, Microservices, March 2014, http://martinfowler.com/articles/microservices.html Ian Robinson, Consumer-Driven Contracts: A Service Evolution Pattern, 12 June 2006 http://martinfowler.com/articles/consumerdrivencontracts.html Martin Fowler, Tolerant Reader, 9 May 2011, http://martinfowler.com/bliki/tolerantreader.html Martin Fowler, Public versus Published Interfaces, March/April 2002 Sam Newman, GeeCON 2014: Sam Newman - The Practical Implications Of Microservices Sam Newman, GeeCON 2014: Sam Newman - Deploying And Testing Microservices Marco Vermeulen, Building Microservices using Spring Boot and Friends, Greach 2014 James Hughes, Micro Service Architecture, http://yobriefca.se/blog/2013/04/28/micro-service-architecture Schematron, http://www.schematron.com/ Pact, https://github.com/realestate-com-au/pact Spring Boot - http://projects.spring.io/spring-boot/ Fabric - https://github.com/fabric/fabric Logstash - http://logstash.net/ Kibana - http://www.elasticsearch.org/guide/en/kibana/current/

Dziękujemy za uwagę