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ę