микроСЕРВИСЫ: огонь, вода и медные трубы
TRANSCRIPT
![Page 1: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/1.jpg)
микроСЕРВИСЫ
огонь, вода, медные трубы
![Page 2: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/2.jpg)
@tolkv
2
![Page 3: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/3.jpg)
@aatarasoff
3
![Page 4: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/4.jpg)
микроСЕРВИСЫ
огонь, вода, медные трубы
![Page 5: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/5.jpg)
DISCLAIMER
Наше мнение может не совпадать с официальной позицией банка, начальника, коллег или других специалистов. Мы не претендуем на роль последней инстанции в вопросах использования той или иной технологии. Все представленные решения вы можете использовать на свой страх и риск. За все ваши действия ответственность несёте только вы сами.
5
![Page 6: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/6.jpg)
Agenda
1. Past
2. Present
3. Future
6
![Page 7: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/7.jpg)
Agenda
1. Past
2. Present
3. Future
7
![Page 8: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/8.jpg)
8
![Page 9: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/9.jpg)
9
![Page 10: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/10.jpg)
Ball of Mud
10
![Page 11: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/11.jpg)
11
![Page 12: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/12.jpg)
SOA Principles
● standardized service contract
● loose coupling
● encapsulation
● reusability
● autonomy
● statelessness
● discoverability
12
![Page 13: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/13.jpg)
13
![Page 14: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/14.jpg)
UDDI
● Никто не говорит и никто не знает ;)
● Но все же. Кто знает что это и зачем это?
● А кто внедрял ? :)
14
![Page 15: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/15.jpg)
Прекрасная технология
15
![Page 16: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/16.jpg)
Как это выглядит? “Тогда”
16
![Page 17: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/17.jpg)
Как это выглядит? “Сейчас”
Oracle SOA Governance
17
![Page 18: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/18.jpg)
Как это выглядит? “Сейчас”
18
@UDDIService( businessKey="uddi:myBusinessKey", serviceKey="uddi:myServiceKey", description = "Hello World test service")@UDDIServiceBinding( bindingKey="uddi:myServiceBindingKey", description="WSDL endpoint for the hello${department} Service. This service is used for testing the jUDDI annotation functionality", accessPointType="wsdlDeployment", accessPoint="http://localhost:8080/juddiv3-samples/services/helloworld?wsdl")
![Page 19: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/19.jpg)
Okay, перейдем по ссылке
19
![Page 20: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/20.jpg)
Никто не хочет UDDI
20
![Page 21: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/21.jpg)
<S:Envelope> <S:Header> ... <Security S:actor="null" S:mustUnderstand="..."> ... </Security> ... </S:Header> ...</S:Envelope>
…а реализация врозь
Не все реализации клиентов могут так сделать :(
21
![Page 22: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/22.jpg)
22
![Page 23: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/23.jpg)
Никто не любит “некрасивые” технологии
поэтому они умирают
![Page 24: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/24.jpg)
А что с людьми?● Что волновало людей тогда?● Их волновало то, как не использовать
технологию● Сейчас эта книга до сих пор продается. 20$
Ничто не не вечно :)
2004 год
24
![Page 25: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/25.jpg)
А что ещё?● REST (RESTful) services
○ operations -> resources
● JSON-Pure
○ https://mmikowski.github.io/json-pure/
● modern RPC
○ Apache Thrift
○ grpc
25
![Page 26: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/26.jpg)
Выводы
26
![Page 27: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/27.jpg)
Agenda
1. Past
2. Present
3. Future
27
![Page 28: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/28.jpg)
28
Про тренды
![Page 29: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/29.jpg)
29
![Page 30: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/30.jpg)
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
-- James Lewis and Martin Fowler
Что такое микросервисы?
30
![Page 31: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/31.jpg)
Определение
1. Набор маленьких сервисов
a. насколько маленьких?
31
![Page 32: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/32.jpg)
Размер имеет значение?
● Method/Function = Microservice?
● 10-300 LOC = Microservice?
● 1 week = Microservice?
● 1 developer = Microservice?
32
![Page 33: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/33.jpg)
Размер не имеет значения*
● Single Responsibility
● One capability
● Bounded context
“In your organization, you should be thinking not in terms of data that is shared, but about the capabilities those contexts provide the rest of the domain.”– Sam Newman, Building Microservices
*до разумных пределов конечно33
![Page 34: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/34.jpg)
Domain-Driven Development
34
![Page 35: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/35.jpg)
Пример
Микросервис платежей
- принимает платеж и проводит его
- но платежей много типов
- а если внешние системы?
- а если каждый тип разный для разных
групп пользователей?35
![Page 36: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/36.jpg)
Определение
1. Набор маленьких сервисов
a. насколько маленьких?
2. Изоляция и независимый деплой
36
![Page 37: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/37.jpg)
Process segregation
37
![Page 38: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/38.jpg)
Независимый деплой
build test38
![Page 39: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/39.jpg)
Trade-off
- name: copy nginx config sudo: yes template: src: "nginx.conf" dest: "{{nginx_config_dir}}/project1.conf" tags: copy_nginx_config
- name: copy nginx config sudo: yes template: src: "nginx.conf" dest: "{{nginx_config_dir}}/project2.conf" tags: copy_nginx_config
server {server_name {{ hostname }}.superproject;
}
server {server_name {{ hostname }}.superproject;
}
39
![Page 40: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/40.jpg)
Failed
40
![Page 41: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/41.jpg)
Определение
1. Набор маленьких сервисов
a. насколько маленьких?
2. Изоляция и независимый деплой
3. Децентрализация
41
![Page 42: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/42.jpg)
Language/technology segregation
42
![Page 43: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/43.jpg)
Data segregation
43
![Page 44: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/44.jpg)
Team segregation
44
![Page 45: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/45.jpg)
Trade-off
- N языков программирования- M в среднем фреймворков на язык- L типов источников данных
complexity = N * M * L
45
![Page 46: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/46.jpg)
Пример- три языка программирования- два в среднем фреймворка на язык- семь типов источников данных
- legacy WS- mongo db- реляционная БД (oracle)
- хранимые процедуры- JDBC templates/ORM
- elasticsearch- neo4j/orient db- мишкина база
complexity = 3 * 2 * 7 = 42 (!)46
![Page 47: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/47.jpg)
42!!!
47
![Page 48: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/48.jpg)
Ключевые характеристики
● Domain-Driven Design
● Single responsibility
● Independent DURS
○ deploy, update, replace, scale
● Lightweight contract and communication
● Segregation
○ people
○ technologies
48
![Page 49: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/49.jpg)
Ключевое приемущество
Вывод: микросервисы ради того, чтобы не
впихивать невпихуемое
49
![Page 50: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/50.jpg)
Так на чём писать микросервисы?
50
![Page 51: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/51.jpg)
min (N * M * L) -> max (L)
51
Закон трёх букв
![Page 52: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/52.jpg)
А что есть в мире Java?
● Java EE
● Spring Boot/Spring Cloud
● Ratpack
● Dropwizard
● Vert.x
● Restlet
● Spark52
![Page 53: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/53.jpg)
Почему Spring Boot/Spring Cloud?
53
![Page 54: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/54.jpg)
Почему Spring Boot/Spring Cloud?
● Развитая экосистема
● Неограниченные возможности кастомизации и
интеграции новых фреймворков
● Не только REST/HTTP
● Великолепные возможности мониторинга
54
![Page 55: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/55.jpg)
А теперь попробуем
55
![Page 56: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/56.jpg)
Demo
![Page 57: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/57.jpg)
![Page 58: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/58.jpg)
![Page 59: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/59.jpg)
Demo -> Deploy Time
![Page 60: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/60.jpg)
Service Discovery
60
![Page 61: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/61.jpg)
61
![Page 62: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/62.jpg)
62
![Page 63: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/63.jpg)
Service Registry
63
![Page 64: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/64.jpg)
Netflix Eureka
64
● Как работает heartbeat?● Как работает healthcheck?
eureka.instance.leaseRenewalIntervalInSeconds: 3eureka.instance.leaseExpirationDurationInSeconds: 3
![Page 65: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/65.jpg)
Boo
65
![Page 66: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/66.jpg)
Consul + Docker
https://github.com/docker/docker/issues/8795
docker run --net=host \ --privileged --rm \
cap10morgan/conntrack
production way! :)
66
![Page 67: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/67.jpg)
Boo
67
![Page 68: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/68.jpg)
Demo -> Time to Discover
![Page 69: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/69.jpg)
69
![Page 70: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/70.jpg)
Где мой порт?
70
![Page 71: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/71.jpg)
71
![Page 72: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/72.jpg)
Какие есть варианты?
● Nginx/Haproxy + consul template
● Haproxy + bamboo (need marathon)
● Netflix Zuul (Java way!!!)
● Custom Servlet <- все с этого начинают!
72
![Page 73: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/73.jpg)
Nginx + consul_template{{range services}}upstream {{.Name}} { least_conn; {{range service .Name}} server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1; {{else}}server localhost:60000;{{end}}}{{end}}
server { server_name localhost;
{{range services}} location /{{.Name}}/ { proxy_pass http://{{.Name}}/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } {{end}}}
73
![Page 74: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/74.jpg)
Nginx + consul_templateupstream hippoapi { least_conn; server server1:8080 max_fails=3 fail_timeout=60 weight=1; server server1:8081 max_fails=3 fail_timeout=60 weight=1; server server1:8082 max_fails=3 fail_timeout=60 weight=1;}
server { server_name localhost;
location /hippoapi/ { proxy_pass http://hippoapi/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}
74
![Page 75: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/75.jpg)
Bamboo + haproxy + marathon{ "Marathon": { "Endpoint": "{{bamboo_marathon_endpoint}}", "UseEventStream": true }, "Bamboo": { "Endpoint": "{{bamboo_endpoint}}", "Zookeeper": { "Host": "{{bamboo_zk_hosts}}", "Path": "/marathon-haproxy/state", "ReportingDelay": 5 }}, "HAProxy": { "TemplatePath": "config/haproxy_template.cfg", "OutputPath": "/etc/haproxy/haproxy.cfg", "ReloadCommand": "haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -sf $(cat /var/run/haproxy.pid)" }, "StatsD": { "Enabled": false, "Host": "localhost:8125", "Prefix": "{{bamboo_statsd_prefix}}" }}
Работает при наличии mesos+marathon :)75
![Page 76: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/76.jpg)
Netflix Zuul
76
![Page 77: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/77.jpg)
Netflix Zuul
77
POST /myservice?param1=1¶m2=2¶m3=3
BODY { “order_id”: 1234 }
Что тут может быть не так?
if(request.getMethod().equalsIgnoreCase("POST") && request.getQueryString() !=null) {
StringTokenizer st = new StringTokenizer(this.request.getQueryString(), "&");
while (st.hasMoreTokens()) {
String s = st.nextToken();
int i = s.indexOf("=");
if (i > 0 && s.length() > i + 1) {
String name = s.substring(0, i);
builder.remove(name);
}
}
}
POST /myservice?param1=1¶m2=2¶m3=3
Окау, добавим свой Zull pre filter
![Page 78: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/78.jpg)
Boo
78
![Page 79: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/79.jpg)
Demo -> Gateway Time
![Page 80: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/80.jpg)
![Page 81: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/81.jpg)
Demo -> FBI Time
![Page 82: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/82.jpg)
82
![Page 83: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/83.jpg)
+-------------------------------------------+
| Server |
| (single-threaded, event-driven etc) |
+-------------------------------------------+
| Processor |
| (compiler generated) |
+-------------------------------------------+
| Protocol |
| (JSON, compact, binary etc) |
+-------------------------------------------+
| Transport |
| (raw TCP, HTTP etc) |
+-------------------------------------------+
● Просто*
● Гибко*
● Безопасно*
*по нашему скромному мнению83
Apache Thrift
![Page 84: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/84.jpg)
namespace java info.developerblog.services
struct TUser { #это наш любимый пользователь
1: required i64 userId #а это его идентификатор
}
struct TFbiResponse { #результат вызова сервиса
1: required string lastFink #дата последнего стука ( да, это строка :) )
}
service TFbiService { #а это наш сервис
TFbiResponse fink( #метод “постучи в ФБР”
1: required TUser user,
2: required i32 hippoCount,
3: required i32 fee
)
}84
![Page 85: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/85.jpg)
Demo -> RPC Time
![Page 86: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/86.jpg)
Безопасность
86
![Page 87: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/87.jpg)
Защита на уровне сервиса
87
![Page 88: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/88.jpg)
Защита на уровне сервиса #2
88
![Page 89: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/89.jpg)
Опять этот gateway
89
![Page 90: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/90.jpg)
REST/HTTP
Authorization: Bearer <TOKEN>
ClientID: <ID>
90
![Page 91: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/91.jpg)
Thrift API Gateway
service InternalTestService {
SomeReturnData getSomeData(
1: UserData userData,
2: RequestData requestData
) throws (1: SomeException e);
}
91
![Page 92: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/92.jpg)
Thrift API Gateway
service InternalTestService {
SomeReturnData getSomeData(
1: UserData userData,
2: RequestData requestData
) throws (1: SomeException e);
}
service ExternalTestService {
SomeReturnData getSomeData(
1: AuthToken authData,
2: RequestData requestData
) throws (1: SomeException e,
99: UnauthorizedException ue);
}
92
![Page 93: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/93.jpg)
int startPosition = findStartPosition(protocol);
TBase userData = exchanger.process(
extractAuthToken(protocol,exchanger.createEmptyAuthToken())
);
int endPosition = findEndPosition(protocol);
return mergeArrays(
getSkippedPart(protocol, startPosition),
serializeUserData(protocolFactory, userData),
getAfterTokenPart(protocol, endPosition, thriftBody.length)
);
93
![Page 94: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/94.jpg)
94
![Page 95: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/95.jpg)
Springway
@SpringBootApplication@EnableThriftGatewaypublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
95
![Page 96: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/96.jpg)
Demo -> Thrift the Ripper
![Page 97: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/97.jpg)
![Page 98: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/98.jpg)
![Page 99: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/99.jpg)
Основные возможности
● Fallbacks
● Gracefull degradation
● Concurrency Execution
● Request Collapsing
● Caching
● Metrics polling99
![Page 100: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/100.jpg)
Demo -> Hystrix the Saviour
![Page 101: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/101.jpg)
![Page 102: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/102.jpg)
Boo
102
![Page 103: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/103.jpg)
Типичная микросервисная архитектура
103
![Page 104: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/104.jpg)
104
![Page 105: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/105.jpg)
А что в этих ваших интернетах?
![Page 106: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/106.jpg)
И чё?
Гибкость
Поддерживаемость
● Микросервисы это непросто
○ orchestration
○ discovery
○ fallbackСкорость
![Page 107: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/107.jpg)
И чё?
● В Spring-е нет:
○ @ThriftHandler
○ @ThriftClient
○ @EnableThriftGateway
● Consul Cloud -> 1.0.0.M3
![Page 108: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/108.jpg)
Помните SOAP ?
Микросервисы тоже не бесплатный обед
![Page 109: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/109.jpg)
Agenda
1. Past
2. Present
3. Future
109
![Page 110: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/110.jpg)
110
![Page 111: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/111.jpg)
Operational requirements
● Orchestration (DURS)
● Service discovery
● Monitoring
● Resiliency
● Culture
111
![Page 112: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/112.jpg)
112
https://xebialabs.com/periodic-table-of-devops-tools/
![Page 113: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/113.jpg)
Docker etc.
113
![Page 114: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/114.jpg)
Docker evolution
114
![Page 115: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/115.jpg)
Эра PAAS
● Mesos + Marathon framework
● Kubernetes
● Cloud foundry
● Other..
○ Heroku
○ Tutum
○ Mesosphere DCOS
○ ...115
![Page 116: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/116.jpg)
116
Network
![Page 117: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/117.jpg)
HTTP/2
● HTTP/2 Client (Java SE)
○ http://openjdk.java.net/jeps/110
● Servlet 4.0 (HTTP/2)
○ https://www.jcp.org/en/jsr/detail?id=369
117
![Page 118: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/118.jpg)
grpc.io
● http/2
● только async / netty
● protobuf 3
118
![Page 119: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/119.jpg)
Hello grpc world!
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
public static interface Greeter {
public void sayHello(HelloRequest request,
StreamObserver<HelloReply> responseObserver);
}
119
![Page 120: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/120.jpg)
Zuul 2.0
● websocket support
● migrate to netty
120
![Page 121: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/121.jpg)
Docker Network
http://developerblog.info/2015/11/16/splendors-and-miseries-of-docker-network/
● синтаксический сахар
○ docker network create --driver bridge mynet
● пока проблемы с multi-host сетями
○ несколько сетевых интерфейсов
○ рудиментарный DNS
○ плагины не работают/не на 100%
121
![Page 122: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/122.jpg)
Docker Network + Spring Consul Cloud
https://github.com/spring-cloud/spring-cloud-consul/issues/115
public static InetAddress getFirstNonLoopbackAddress() {
///
for (Enumeration<NetworkInterface> enumNic = NetworkInterface.getNetworkInterfaces();
enumNic.hasMoreElements(); ) {
///
}
///
}
eth0 - overlay
eth1 - bridge122
![Page 123: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/123.jpg)
Ooops
123
![Page 124: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/124.jpg)
Java SE 9
● Jigsaw
○ http://openjdk.java.net/jeps/200
● Java Reactive JEP 266 (не в 9ке видимо)
○ http://openjdk.java.net/jeps/266
124
![Page 125: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/125.jpg)
Eureka 2.0
● server group
● guaranted instance id uniqueness
● fast and simple replication
● write cluster/read cluster
125
![Page 126: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/126.jpg)
Event Sourcing / CQRS / SAGA
http://gotocon.com/dl/goto-chicago-2015/slides/CaitieMcCaffrey_ApplyingTheSagaPattern.pdf
126
![Page 127: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/127.jpg)
127
![Page 128: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/128.jpg)
128
![Page 129: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/129.jpg)
Saga guarantee
● T1 -> T2 -> T3 -> … -> Tn
● T1 -> T2 -> … Tn -> Cn … -> C2 -> C1
129
![Page 130: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/130.jpg)
130
![Page 131: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/131.jpg)
131
![Page 132: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/132.jpg)
132
![Page 133: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/133.jpg)
133
DDDD (4D)
![Page 134: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/134.jpg)
Выводы. Микросервисы...
134
1. должны работать как единая система для предоставления законченной функциональности
2. дают вам опции, как тестировать и где тестировать ваш код
3. дают возможность закладывать нужные оси вариативности в вашу архитектуру (да да, подготавливаемся вставлять костыли на любых уровнях!)
4. предполагают, что вы готовы вникать в вещи, не связанные непосредственно с кодом продукта (а это 80% времени)
5. принесут вам радость, только если налажен CD, иначе только боль
![Page 135: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/135.jpg)
135
![Page 136: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/136.jpg)
СсылкиОригинальное исполнениеhttps://github.com/bsideup/thrift-spring-boot-starter
Крутой плагин для Gradlehttps://github.com/bsideup/GradleThrift
Forward2Dockerhttps://github.com/bsideup/forward2docker/releases
136
@bsideup
![Page 137: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/137.jpg)
Code. Better. Together.
Spring Thrift Client (Proof of Concept)https://github.com/aatarasoff/spring-thrift-starter
Thrift API Gateway (Proof of Concept)https://github.com/aatarasoff/thrift-api-gateway-corehttps://github.com/aatarasoff/spring-thrift-api-gateway
Примеры сегодняшнего дняhttps://github.com/lavcraft/jug-samples
137
![Page 138: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/138.jpg)
Высокие теории
Sam Newman “Building Microservices”
Martin Fowler “Microservice TradeOff” “Microservices”
“The Twelwe-Factor App” http://12factor.net
Hystrix: managing failures in distributed systems - Tomasz Nurkiewicz https:
//www.youtube.com/watch?v=JadVts_prtA
138
![Page 139: микроСЕРВИСЫ: огонь, вода и медные трубы](https://reader034.vdocuments.site/reader034/viewer/2022051318/5872cd6a1a28ab74188b45e1/html5/thumbnails/139.jpg)
Спасибо! Ваши вопросы
@tolkv
@aatarasoff
139