Top Banner
Твой личный Spring Boot Starter
41

Jbreak 2016: Твой личный Spring Boot Starter

Apr 15, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Jbreak 2016: Твой личный Spring Boot Starter

Твой личный Spring Boot Starter

Page 2: Jbreak 2016: Твой личный Spring Boot Starter

@tolkv

2

2

Page 3: Jbreak 2016: Твой личный Spring Boot Starter

@aatarasoff

3

3

Page 4: Jbreak 2016: Твой личный Spring Boot Starter

Твой личный Spring Boot Starter

Page 5: Jbreak 2016: Твой личный Spring Boot Starter

План такой1. Будем решать задачу2. Будут сложности3. Будем бороться с ними4. Сделаем выводы5. Ответим на вопросы

5

Page 6: Jbreak 2016: Твой личный Spring Boot Starter

Простая задача.Кодовое имя:“Где Джош?”

6

Page 7: Jbreak 2016: Твой личный Spring Boot Starter

7

Page 8: Jbreak 2016: Твой личный Spring Boot Starter

8

Page 9: Jbreak 2016: Твой личный Spring Boot Starter

Сайт конференции

Сервис

9

Page 10: Jbreak 2016: Твой личный Spring Boot Starter

Попытка №1

10

Page 11: Jbreak 2016: Твой личный Spring Boot Starter

11

К несчастью у нас целая куча сервисов

Page 12: Jbreak 2016: Твой личный Spring Boot Starter

Слайд Боли● Boilerplate-боль

○ бизнес-логика

○ куча непонятного, но нужного

● Конфигурация-боль

○ много настроек

○ сложная композировать настройки

● Имплементация-боль

○ не DRY

12

Page 13: Jbreak 2016: Твой личный Spring Boot Starter

К чему это ведёт?

● Низкая скорость создания

● Высокий порог вхождения

● Нужно держать в голове детали

13

Page 14: Jbreak 2016: Твой личный Spring Boot Starter

Spring Boot Starter

Джош мог бы вам уже всё рассказать :)

14

Page 15: Jbreak 2016: Твой личный Spring Boot Starter

Принципы

● композиция через аннотации

● согласованность технологий

● изменение поведения через конфигурацию

15

Page 16: Jbreak 2016: Твой личный Spring Boot Starter

Простой пример@SpringBootApplication

public class Application {

@PostConstruct

public void init(){

..boilerplate...

business logic

..boilerplate...

}

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

} 16

Page 17: Jbreak 2016: Твой личный Spring Boot Starter

Простой пример

@SpringBootApplication

@EnableThriftServer

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

17

Page 18: Jbreak 2016: Твой личный Spring Boot Starter

Добавим пару аннотаций

@EnableHystrix

@EnableHystrixDashboard

@SpringBootApplication

@EnableThriftServer

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

18

Page 19: Jbreak 2016: Твой личный Spring Boot Starter

Или не пару@EnableZuulProxy

@EnableDiscoveryClient

@EnableHystrix

@EnableHystrixDashboard

@SpringBootApplication

@EnableThriftServer

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}19

Page 20: Jbreak 2016: Твой личный Spring Boot Starter

Пишем свой...

стартер

20

Page 21: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

21

Page 22: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

22

Page 23: Jbreak 2016: Твой личный Spring Boot Starter

23

Page 24: Jbreak 2016: Твой личный Spring Boot Starter

24

Схема работы автоконфигуратора

Page 25: Jbreak 2016: Твой личный Spring Boot Starter

25

Page 26: Jbreak 2016: Твой личный Spring Boot Starter

26

Page 27: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

27

Page 28: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

28

Page 29: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

29

Page 30: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

30

Page 31: Jbreak 2016: Твой личный Spring Boot Starter

Зачем нужен spring.provides?

31

Page 32: Jbreak 2016: Твой личный Spring Boot Starter

Зачем нужен spring.provides?

32

Page 33: Jbreak 2016: Твой личный Spring Boot Starter

Что ещё нужно сделатьДобавим метрики, обработку ошибок и логирование:

proxyFactory.addAdvice(new MetricsThriftMethodInterceptor(gaugeService))

proxyFactory.addAdvice(new ExceptionsThriftMethodInterceptor())

proxyFactory.addAdvice(new LoggingThriftMethodInterceptor())

@Slf4j

public class LoggingThriftMethodInterceptor implements MethodBeforeAdvice, AfterReturningAdvice {

@Override

public void before(Method method, Object[] args, Object target) throws Throwable {

log.info("Thrift method {}.{}() is called with args: {}",

target.getClass().getSimpleName(), method.getName(), args

);

}

//afterReturning method is implemented here %)

}33

Page 34: Jbreak 2016: Твой личный Spring Boot Starter

Что ещё можно улучшить@ThriftClient(serviceId = "greeting-service", path = "/api")

TGreetingService.Client client;

greeting-service: #service name

endpoint: http://localhost:8080/api #direct endpoint

ribbon: #ribbon

listOfServers: localhost:8080 #hardcoded list

path: /service #general path

connectTimeout: 1000 #default=1000

readTimeout: 10000 #default=30000

34

Page 35: Jbreak 2016: Твой личный Spring Boot Starter

Как распространять?● Не прячьте свой труд. Используйте GitHub.

● Делитесь своими разработками со всеми. Используйте Bintray и jcenter.

35

Page 36: Jbreak 2016: Твой личный Spring Boot Starter

Парадокс (де)централизации микросервисов

Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты

Например: логирование, health-чеки, метрики, обработку программных ошибок

36

Page 37: Jbreak 2016: Твой личный Spring Boot Starter

Парадокс (де)централизации микросервисов

Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты

Но: не выносите бизнес-логику или доменные объекты

37

Page 38: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов к счастью

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

38

Page 39: Jbreak 2016: Твой личный Spring Boot Starter

7 простых шагов к счастью

1. Напиши “простой” тест. Разберись в технологии.2. Напиши микросервис так, как если бы он был один3. Создай автоконфигуратор и переведи сервис на него4. Добавь точки расширения5. Не забудь про конфигурацию по-умолчанию6. Напиши тесты на автоконфигурацию7. Создай и распространяй стартер

39

Зачем?

Page 40: Jbreak 2016: Твой личный Spring Boot Starter

СсылкиПолная версия: https://github.com/aatarasoff/spring-thrift-starter

Для grpc: https://github.com/lavcraft/grpc-spring-boot-starter

40

Page 41: Jbreak 2016: Твой личный Spring Boot Starter

Спасибо! Готовы ответить на ваши вопросы

@tolkv

@aatarasoff

41