Микросервисы, кто-то только слышал о них, кто-то пытался делать, кто-то уже использует в продакшене. Идеи, заложенные в концепцию микросервисов, не новы и основные постулаты уже звучали раньше. Так почему же в последнее время мы всё чаще слышим о микросервисах? Что такое микросервисы для нас и чем они отличаются от старого доброго подхода SOA? Как теперь разрабатывать enterprise-приложения с микросервисным подходом на нашем любимом языке программирования Java?
На эти и некоторые другие вопросы постараемся ответить во время встречи. Наши гости, Кирилл Толкачёв и Александр Тарасов, в режиме live coding попытаются создать небольшой стартап, попутно использовав новомодные подходы и инструменты.
На пути к релизу стартапа будут затронуты основные проблемы выбранных подходов в целом и технологий в частности:
Микросервис — что это, для чего и как с этим дальше жить. Где теория брат? ;)
На чём писать API: REST или RPC, и почему Thrift имеет право на жизнь в эпоху тотального распространения JSON-а. Упрощай и превозмогай с помощью Spring boot starter;
Какой стек выбрать для разработки, что выбрали мы и почему. Небольшое сравнение легковесных и не очень java фреймворков а так же сопутствующих инструментов;
Способы упаковки, дистрибуции и разворачивания микросервисов, как Spring Boot и Docker помогают нам в решении этих непростых для разработчика проблемах;
Как микросервисам найти друг друга, как готовить Spring Cloud и как обойти существующие проблемы и ограничения. Не доверяйте технологиям, доверяйте только себе;
API Gateway. Предохраняй и сохраняй свои микросервисы.
Так же речь пойдет о других распространенных проблемах распределенных систем и их решениях.
5. DISCLAIMER
Наше мнение может не совпадать с официальной
позицией банка, начальника, коллег или других
специалистов. Мы не претендуем на роль
последней инстанции в вопросах использования
той или иной технологии. Все представленные
решения вы можете использовать на свой страх и
риск. За все ваши действия ответственность несёте
только вы сами.
5
18. Как это выглядит? “Сейчас”
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")
23. Никто не любит “некрасивые” технологии
поэтому они умирают
24. А что с людьми?
● Что волновало людей тогда?
● Их волновало то, как не использовать
технологию
● Сейчас эта книга до сих пор продается. 20$
Ничто не не вечно :)
2004 год
24
30. 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
32. Размер имеет значение?
● Method/Function = Microservice?
● 10-300 LOC = Microservice?
● 1 week = Microservice?
● 1 developer = Microservice?
32
33. Размер не имеет значения*
● 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
35. Пример
Микросервис платежей
- принимает платеж и проводит его
- но платежей много типов
- а если внешние системы?
- а если каждый тип разный для разных
групп пользователей?
35
45. Trade-off
- N языков программирования
- M в среднем фреймворков на язык
- L типов источников данных
complexity = N * M * L
45
46. Пример
- три языка программирования
- два в среднем фреймворка на язык
- семь типов источников данных
- legacy WS
- mongo db
- реляционная БД (oracle)
- хранимые процедуры
- JDBC templates/ORM
- elasticsearch
- neo4j/orient db
- мишкина база
complexity = 3 * 2 * 7 = 42 (!)
46
54. Почему Spring Boot/Spring Cloud?
● Развитая экосистема
● Неограниченные возможности кастомизации и
интеграции новых фреймворков
● Не только REST/HTTP
● Великолепные возможности мониторинга
54
64. Netflix Eureka
64
● Как работает heartbeat?
● Как работает healthcheck?
eureka.instance.leaseRenewalIntervalInSeconds: 3
eureka.instance.leaseExpirationDurationInSeconds: 3
77. 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
134. Выводы. Микросервисы...
134
1. должны работать как единая система для
предоставления законченной функциональности
2. дают вам опции, как тестировать и где тестировать
ваш код
3. дают возможность закладывать нужные оси
вариативности в вашу архитектуру (да да,
подготавливаемся вставлять костыли на любых
уровнях!)
4. предполагают, что вы готовы вникать в вещи, не
связанные непосредственно с кодом продукта (а это
80% времени)
5. принесут вам радость, только если налажен CD,
иначе только боль
137. 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-core
https://github.com/aatarasoff/spring-thrift-api-gateway
Примеры сегодняшнего дня
https://github.com/lavcraft/jug-samples
137
138. Высокие теории
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