Top Banner
The Micro Way czyli architektura mikroserwisów Konrad Król
44

Tech cafe Microservices

Jul 27, 2015

Download

Technology

Konrad Król
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Tech cafe Microservices

The Micro Wayczyli architektura mikroserwisów

Konrad Król

Page 2: Tech cafe Microservices

Zainteresowanie microserwisami

By Google Trends

Page 3: Tech cafe Microservices

Zainteresowanie microserwisami

• Assess – marzec 2012

• Trial – październik 2012

• Rosnące zainteresowanie tematem mikroserwisów – styczeń 2014

By ThoughtWorks Technology Radar

Page 4: Tech cafe Microservices

Classic Way vs Micro Way

James Hughes, „Micro Service Architecture”

Page 5: Tech cafe Microservices

Aplikacje monolityczne

Warstwa prezentacji: specjaliści UI

Warstwa logiki: specjaliści Java

Warstwa persystencji: specjaliści DB

Martin Fowler, „Microservices”, 25 March 2014

Page 6: Tech cafe Microservices

Aplikacje monolityczne

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

Conway's law

Page 7: Tech cafe Microservices

Aplikacje monolityczne

Charakterystyka monolitów

• Architektura wielowarstwowa

• Wiele (100+ tysięcy) linii kodu

• Oparte o z góry określony stack technologiczny

Page 8: Tech cafe Microservices

Aplikacje monolityczne

Typowe problemy

• Zamknięcie na zmiany nieprzewidziane na etapie projektowania

• Zamknięty stack technologiczny

• Bardzo długi cykl życia

Page 9: Tech cafe Microservices

Aplikacje monolityczne

Typowe problemy

• Skalowalność

• Długi proces wprowadzania zmian

• Ryzyko związane z wdrażaniem nowej wersji

• Wydajność, wspólne wątki

Page 10: Tech cafe Microservices

Skalowalność w ujęciu monolitycznym

Page 11: Tech cafe Microservices

Skalowalność w ujęciu monolitycznym

Page 12: Tech cafe Microservices

Skalowalność pojedynczego microserwisu

Load Balancer

Page 13: Tech cafe Microservices

Wprowadzanie zmian w ujęciu monolitycznym

Page 14: Tech cafe Microservices

Wprowadzanie zmian w ujęciu monolitycznym

Page 15: Tech cafe Microservices

Wprowadzanie zmian w ujęciu monolitycznym

QACMM

Page 16: Tech cafe Microservices

The Micro Way

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

Page 17: Tech cafe Microservices

The Micro Way

Single responsibility

• wiele luźno powiązanych aplikacji

• każda aplikacja ma tylko jedną, konkretną funkcję

• kilkaset linii kodu

Page 18: Tech cafe Microservices

The Micro Way

Containerless

• one process – one service

• embedded container

• executable fat jar

Page 19: Tech cafe Microservices

The Micro Way

Dedykowane repozytorium

• osobne repozytorium dla każdej aplikacji

• wspólne moduły w formie bibliotek

Page 20: Tech cafe Microservices

The Micro Way

Production ready

• Monitoring

• Skalowalne komponenty

• Health check endpoints

Page 21: Tech cafe Microservices

The Micro Way

Zwinne zespołyPodzielonepod kątemobszarów biznesowych

Martin Fowler, „Microservices”, 25 March 2014

Page 22: Tech cafe Microservices

The Micro Way

Page 23: Tech cafe Microservices

The Micro Way

Wyzwania:

• Narzut na zdalną komunikację

• Przenoszenie odpowiedzialności pomiędzy systemami jest trudniejsze niż pomiędzy bibliotekami

Page 24: Tech cafe Microservices

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

Page 25: Tech cafe Microservices

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)

Page 26: Tech cafe Microservices

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)

Page 27: Tech cafe Microservices

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

Page 28: Tech cafe Microservices

The micro way - porady

Cascade failures

• Definiuj timeouty

• Używaj komunikacji asynchronicznej (jeśli możliwe)

1

2 3

4 5 6

Page 29: Tech cafe Microservices

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

Page 30: Tech cafe Microservices

API microserwisów

Tolerant reader

• Klient usługi powiniennałożyć jak najmniejszeoczekiwania 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>

Page 31: Tech cafe Microservices

API microserwisów

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

# GET /v2/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>

  <categories>    <category>Telecommunication</category>    <category>Mobile phones</category>  </categories>  <rating>5</rating>  <opinions>101</opinions></product>

Page 32: Tech cafe Microservices

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>

Page 33: Tech cafe Microservices

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>

Page 34: Tech cafe Microservices

API microserwisów

Distributed transactions

• Write-of

• Retry

• Compensation

A

B C D

Page 35: Tech cafe Microservices

Dostępne frameworki

Page 36: Tech cafe Microservices

Spring Boot – czym jest?

• Automatyczna (domyślna) konfiguracja

• Convention over configuration

• Metryki

• Startery

• No XML Config

• Standalone Apps

Page 37: Tech cafe Microservices

Spring Boot - przykład

dependencies { compile("org.springframework.boot:spring-boot-starter-web")}

package hello;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.context.annotation.ComponentScan;

@ComponentScan@EnableAutoConfigurationpublic 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;@RestControllerpublic class HelloController { @RequestMapping("/") public String index() { return "Greetings from Spring Boot!"; }}

build.gradle

Application.java

HelloController.java

Page 38: Tech cafe Microservices

Spring Boot - przykład

gradle buildjava -jar java -jar build/libs/gs-rest-service-0.1.0.jarcurl localhost:8080

Co siedzi w środku?

• spring-core• spring-web• jackson• embedded-tomcat• Log4j• ...

Build & Run

Czego nie ma w środku?

• web.xml• beans.xml• ...

Page 39: Tech cafe Microservices

Spring Boot – więcej przykładów

• 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

Przewodniki od spring.io

Page 40: Tech cafe Microservices

Spring Boot Starters

• Rozwijane przez community

• Obejmują większość popularnych technologii używanych ze Springiem

• Przykłady: jpa, web, test, tomcat, jetty, jdbc, batch, amqp, security...

Spring Boot starters

Page 41: Tech cafe Microservices

Production ready

spring-boot-actuator

monitoring oraz zdalny dostęp poprzez:

• jmx

• ssh

endpointy:

• /info

• /health

• /beans

• /env

• /dump

• /metrics

• /trace

• /autoconfigurationreport

• /shutdown

Page 42: Tech cafe Microservices

Spring Boot vs Spring Roo

find . ­type f | xargs cat | wc ­l

find . ­type f | wc ­l

Spring Roo

• 1130 linii kodu

• 26 plików

Spring Boot

• 87 linii kodu

• 4 pliki

Page 43: Tech cafe Microservices

Ź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/

Page 44: Tech cafe Microservices

Dziękujemy za uwagę