joker 2015. wild microservices
TRANSCRIPT
WILD microSERVICES
18+
@tolkv
@aatarasoff
WILD microSERVICES
18+
DISCLAIMER
Наше мнение может не совпадать с официальной позицией банка, начальника, коллег или других специалистов. Мы не претендуем на роль последней инстанции в вопросах использования той или иной технологии. Все представленные решения вы можете использовать на свой страх и риск. За все ваши действия ответственность несёте только вы сами.
Для начала вопросы
● Кто использует микросервисы в продакшене?
Для начала вопросы
● Кто использует микросервисы в продакшене?
● Кто использует Docker в продакшене?
Выбери любые три
Гибкость
ПоддерживаемостьСкорость
Demo
Demo -> Deploy Time
Service Discovery
Demo -> Time to Discover
Где мой порт?
Demo -> Gateway Time
Demo -> FBI Time
+-------------------------------------------+
| Server |
| (single-threaded, event-driven etc) |
+-------------------------------------------+
| Processor |
| (compiler generated) |
+-------------------------------------------+
| Protocol |
| (JSON, compact, binary etc) |
+-------------------------------------------+
| Transport |
| (raw TCP, HTTP etc) |
+-------------------------------------------+
● Просто*
● Гибко*
● Безопасно*
Demo -> RPC Time
Thrift API Gatewayservice InternalTestService {
SomeReturnData getSomeData(
1: UserData userData,
2: RequestData requestData
) throws (1: SomeException e);
}
Thrift API Gatewayservice 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);
}
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));
Springway@SpringBootApplication@EnableThriftGatewaypublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}
Demo -> Thrift the Ripper
Типичная микросервисная архитектура
Выводы
И чё?
Гибкость
ПоддерживаемостьСкорость
● Микросервисы это непросто
○ orchestration
○ discovery
○ fallback
И чё?
● В Spring-е нет:
○ @ThriftHandler
○ @ThriftClient
○ @EnableThriftGateway
● Consul Cloud -> 1.0.0.M1
Ссылки
Оригинальное исполнениеhttps://github.com/bsideup/thrift-spring-boot-starter
Крутой плагин для Gradlehttps://github.com/bsideup/GradleThrift
@bsideup
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/microservices-mastering
Спасибо! Ваши вопросы
@tolkv
@aatarasoff