Joker 2015. WILD microSERVICES

Preview:

Citation preview

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