4. Classic Way vs Micro
Way
James Hughes, „Micro Service Architecture”
5. Aplikacje
monolityczne
Warstwa prezentacji: specjaliści UI
Warstwa logiki: specjaliści Java
Warstwa persystencji: specjaliści DB
Martin Fowler, „Microservices”, 25 March 2014
6. 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
7. Aplikacje
monolityczne
Charakterystyka
monolitów
• Architektura wielowarstwowa
• Wiele (100+ tysięcy) linii
kodu
• Oparte o z góry określony
stack technologiczny
8. Aplikacje
monolityczne
Typowe problemy
• Zamknięcie na zmiany
nieprzewidziane na etapie
projektowania
• Zamknięty stack
technologiczny
• Bardzo długi cykl życia
9. Aplikacje
monolityczne
Typowe problemy
• Skalowalność
• Długi proces wprowadzania
zmian
• Ryzyko związane z
wdrażaniem nowej wersji
• Wydajność, wspólne wątki
23. The Micro Way
Wyzwania:
• Narzut na zdalną
komunikację
• Przenoszenie
odpowiedzialności pomiędzy
systemami jest trudniejsze
niż pomiędzy bibliotekami
24. 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
25. 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)
26. 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)
27. 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
28. The micro way -
porady
Cascade failures
• Definiuj timeouty
• Używaj komunikacji
asynchronicznej (jeśli możliwe)
1
2 3
4 5 6
29. 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
30. 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="UTF8"
?>
<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>
31. 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="UTF8"
?>
<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>
32. 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>
33. 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>
36. Spring Boot – czym
jest?
• Automatyczna (domyślna)
konfiguracja
• Convention over
configuration
• Metryki
• Startery
• No XML Config
• Standalone Apps
37. 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
@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!";
}
}
build.gradle
Application.java
HelloController.java
38. Spring Boot -
przykład
Build & Run
gradle build
java -jar java -jar build/libs/gs-rest-service-0.1.0.jar
curl localhost:8080
Co siedzi w środku?
• spring-core
• spring-web
• jackson
• embedded-tomcat
• Log4j
• ...
Czego nie ma w
środku?
• web.xml
• beans.xml
• ...
39. 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
40. Spring Boot Starters
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...
42. 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
43. Ź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/