Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring...

52
20.12.2017 Karol Buler Jak stworzyć system oparty o mikroserwisy

Transcript of Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring...

Page 1: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

20.12.2017

Karol Buler

Jak stworzyć system oparty o

mikroserwisy

Page 2: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

O czym będzie?

➢ Architektura oparta o mikroserwisy

➢ Problemy z monolitem

➢ Tworzenie mikroserwisu od zera

➢ Przejście z monolitu na mikroserwisy

➢ Architektura monolityczna

➢ SpringBoot – live demo

➢ Zuul

➢ Problemy(?) z mikroserwisami

Page 3: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

To nie jest…

…jedyne słuszne rozwiązanie

…wszystko

Page 4: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Architektura monolityczna

Page 5: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Serwis idealny

➢ Działa we własnym procesie, sam, jeden, niezależnie

➢ Zbudowany, wdrożony sam, jeden, niezależny

➢ Posiada swoje dane, które może zmieniać tylko on sam,jeden, niezależnie

➢ SRP – Single Responsibility Principle

➢ Jest lekki, łatwy we wdrożeniu oraz łatwo z niego korzystać

➢ OCP – Open/closed principle

Page 6: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Architektura monolityczna

Service 1 Service 2 Service 3

API View

Page 7: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit

Page 8: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit - problemy

➢ Skalowanie „wielkiego klocka”

➢ Wszystko działa w jednym procesie, jest „ciężkie”, długo siębuduje.

➢ Nawet dzieląc wszystko na logiczne części i tak znajdzie się„ninja”, który dobierze się do nieswojego zasobu.

➢ Tracimy dużo czasu, żeby przetestować mały fragmentimplementacji.

➢ Najczęściej system zastany (legacy), archaiczną wiedzę o nimposiadają tylko nieliczni wodzowie plemienia „StarszychProgramistów”

Page 9: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit - nietykalny

Page 10: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit a serwis idealny

➢ Działa we własnym procesie, sam, jeden, niezależnie

➢ Zbudowany, wdrożony sam, jeden, niezależny

➢ Posiada swoje dane, które może zmieniać tylko on sam,jeden, niezależnie

➢ SRP – Single Responsibility Principle

➢ Jest lekki, łatwy we wdrożeniu oraz łatwo z niego korzystać

➢ OCP – Open/closed principle

Page 11: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Page 12: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Page 13: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Page 14: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Service 1

API

Page 15: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Service 1

API

Service 2

API

Page 16: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Service 1

API

Service 2

API

Service 3

API

Page 17: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Service 1

API

Service 2

API

Service 3

API

Page 18: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy

Service 1

Service 2

Service 3

API View

Service 1

API

Service 2

API

Service 3

API

Page 19: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Problemy monolitu a mikroserwisy

➢ Skalowanie „wielkiego klocka”

➢ Wszystko działa w jednym procesie, jest „ciężkie”, długo siębuduje.

➢ Nawet dzieląc wszystko na logiczne części i tak znajdzie się„ninja”, który dobierze się do nieswojego zasobu.

➢ Tracimy dużo czasu, żeby przetestować mały fragmentimplementacji.

➢ Najczęściej system zastany (legacy), archaiczną wiedzę o nimposiadają tylko nieliczni wodzowie plemienia „StarszychProgramistów”

Page 20: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

(Mikro)Serwis idealny

➢ Działa we własnym procesie, sam, jeden, niezależnie

➢ Zbudowany, wdrożony sam, jeden, niezależny

➢ Posiada swoje dane, które może zmieniać tylko on sam,jeden, niezależnie

➢ SRP – Single Responsibility Principle

➢ Jest lekki, łatwy we wdrożeniu oraz łatwo z niego korzystać

➢ OCP – Open/closed principle

Page 21: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwis od zera

Page 22: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Koncepcja

Duży problem biznesowy

Page 23: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Koncepcja

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Page 24: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Koncepcja

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Service 1

API

Service 2

API

Service 3

API

Page 25: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Koncepcja

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Service 1

API

Service 2

API

Service 3

API

Service 4

API

Service 5

API

Service 6

API

Page 26: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Koncepcja

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Mały problem biznesowy

Service 1

API

Service 2

API

Service 3

API

Service 4

API

Service 5

API

Service 6

API

Page 27: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 28: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 29: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 30: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 31: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 32: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 33: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 34: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dzielenie problemu

Opis systemu IPTV (Internet Protocol Television):

Użytkownik ma możliwość oglądania telewizji udostępnianej poprzez sieć szerokopasmową obsługującą protokół IP. W trakcie oglądania telewizji użytkownik może przeglądać EPG (Electronic Program Guide) oraz katalogi VoD (Video on Demand), ustawiać przypomnienia na konkretne Programy, kupować wybrane filmy lub dodawać je do listy ulubionych. Programy również mogą zostać dodane do listy ulubionych.

Page 35: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Mikroserwisy z monolitu

Page 36: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Why??? How???

Page 37: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit -> Mikroserwisy (powolutku)

Service 1

Service 2

Service 3

API View

Page 38: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit -> Mikroserwisy (powolutku)

Service 1

Service 2

Service 3

API View

Page 39: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit -> Mikroserwisy (powolutku)

Service 1

API

Service 1

Service 2

Service 3

API View

Page 40: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit -> Mikroserwisy (powolutku)

Service 1

API

Service 1

Service 2

Service 3

API View

Page 41: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit -> Mikroserwisy (powolutku)

Service 1

API

Service 1

Service 2

Service 3

API View

Page 42: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Monolit -> Mikroserwisy (powolutku)

Service 1

API

Service 1

Service 2

Service 3

API View

Page 43: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Problemy?

Page 44: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Problemy(?) z mikroserwisami

1. Deployment całego systemu2. Testowanie3. (teoretycznie) znalezienie błędu w systemie4. Development a zależności między modułami

Page 45: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Problemy(?) z mikroserwisami

1. Deployment całego systemu2. Testowanie3. (teoretycznie) znalezienie błędu w systemie4. Development a zależności między modułami

1. Docker + docker compose2. Testy integracyjne (spring integration tests)3. Zipkin4. Docker + docker compose

Page 46: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

SpringBoot

Page 47: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

SpringBoot?

Page 48: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Zuul – API Gateway

Page 49: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Zuul – API Gateway

zuul:routes:users:path: /users/**url: http://users.adbglobal.com/api

epg:path: /epg/**url: http://epg.adbglobal.com/api

vod:path: /vod/**url: http://vod.adbglobal.com/api

Page 50: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Zuul – API Gateway

zuul:routes:users:path: /users/**url: http://users.adbglobal.com/api

epg:path: /epg/**url: http://epg.adbglobal.com/api

vod:path: /vod/**url: http://vod.adbglobal.com/api

Page 51: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Zuul – API Gateway

zuul:routes:users:path: /users/**url: http://users.adbglobal.com/api

epg:path: /epg/**url: http://epg.adbglobal.com/api

vod:path: /vod/**url: http://vod.adbglobal.com/api

Page 52: Jak stworzyć system oparty o 20.12.2017 mikroserwisy ...€¦ · 2.Testy integracyjne (spring integration tests) 3.Zipkin 4.Docker + docker compose. SpringBoot. SpringBoot? Zuul

Dziękuję!