Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Любите ли вы велосипеды? Все разработчики любят свои ненаколеночныерешения велосипеды! И мы не исключение. В нашем докладе мы покажем как собирать, сколачивать, вылепливать собственный велосипед так, чтобы на нем потом могла ездить без слёз вся команда, компания, или может весь мир.

Что в докладе будет:
- много Spring Boot-а;
- live coding;
- создание собственного Spring Boot Starter-а;
- Apache Thrift в качестве подопытного кролика.

Чего не будет:
- бенчмарков и сравнений Thrift vs REST vs gRPC vs XXX.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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

  1. 1. Твой личный Spring Boot Starter
  2. 2. @tolkv 2
  3. 3. @aatarasoff 3
  4. 4. Твой личный Spring Boot Starter
  5. 5. План такой 1. Будем решать задачу 2. Будут сложности 3. Будем бороться с ними 4. Сделаем выводы 5. Ответим на вопросы 5
  6. 6. Простая задача. Кодовое имя: “Где Джош?” 6
  7. 7. 7
  8. 8. 8
  9. 9. Сайт конференции Сервис 9
  10. 10. Попытка №1 10
  11. 11. 11 К несчастью у нас целая куча сервисов
  12. 12. Слайд Боли ● Boilerplate-боль ○ бизнес-логика ○ куча непонятного, но нужного ● Конфигурация-боль ○ много настроек ○ сложная композировать настройки ● Имплементация-боль ○ не DRY 12
  13. 13. К чему это ведёт? ● Низкая скорость создания ● Высокий порог вхождения ● Нужно держать в голове детали 13
  14. 14. Spring Boot Starter Джош мог бы вам уже всё рассказать :) 14
  15. 15. Принципы ● композиция через аннотации ● согласованность технологий ● изменение поведения через конфигурацию 15
  16. 16. Простой пример @SpringBootApplication public class Application { @PostConstruct public void init(){ ..boilerplate... business logic ..boilerplate... } public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 16
  17. 17. Простой пример @SpringBootApplication @EnableThriftServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 17
  18. 18. Добавим пару аннотаций @EnableHystrix @EnableHystrixDashboard @SpringBootApplication @EnableThriftServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 18
  19. 19. Или не пару @EnableZuulProxy @EnableDiscoveryClient @EnableHystrix @EnableHystrixDashboard @SpringBootApplication @EnableThriftServer public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 19
  20. 20. Пишем свой... стартер 20
  21. 21. 7 простых шагов 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 21
  22. 22. 7 простых шагов 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 22
  23. 23. 23
  24. 24. 24 Схема работы автоконфигуратора
  25. 25. 25
  26. 26. 26
  27. 27. 7 простых шагов 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 27
  28. 28. 7 простых шагов 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 28
  29. 29. 7 простых шагов 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 29
  30. 30. 7 простых шагов 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 30
  31. 31. Зачем нужен spring.provides? 31
  32. 32. Зачем нужен spring.provides? 32
  33. 33. Что ещё нужно сделать Добавим метрики, обработку ошибок и логирование: 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
  34. 34. Что ещё можно улучшить @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
  35. 35. Как распространять? ● Не прячьте свой труд. Используйте GitHub. ● Делитесь своими разработками со всеми. Используйте Bintray и jcenter. 35
  36. 36. Парадокс (де)централизации микросервисов Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты Например: логирование, health-чеки, метрики, обработку программных ошибок 36
  37. 37. Парадокс (де)централизации микросервисов Чтобы эффективно работать с распределенными приложениями, нужно иметь очень хорошие централизованные библиотеки/инструменты Но: не выносите бизнес-логику или доменные объекты 37
  38. 38. 7 простых шагов к счастью 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 38
  39. 39. 7 простых шагов к счастью 1. Напиши “простой” тест. Разберись в технологии. 2. Напиши микросервис так, как если бы он был один 3. Создай автоконфигуратор и переведи сервис на него 4. Добавь точки расширения 5. Не забудь про конфигурацию по-умолчанию 6. Напиши тесты на автоконфигурацию 7. Создай и распространяй стартер 39 Зачем?
  40. 40. Ссылки Полная версия: https://github.com/aatarasoff/spring-thrift-starter Для grpc: https://github.com/lavcraft/grpc-spring-boot-starter 40
  41. 41. Спасибо! Готовы ответить на ваши вопросы @tolkv @aatarasoff 41

×