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

More Related Content

What's hot

Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокDotNetConf
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETDev2Dev
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программированиеDotNetConf
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET CoreDotNetConf
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxDotNetConf
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Кирилл Толкачёв
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Ontico
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETDev2Dev
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Yulia Tsisyk
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныRoman Dvornov
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Кирилл Толкачёв
 
Сергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проектеСергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проектеYandex
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Fwdays
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Oleg Poludnenko
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиDotNetConf
 

What's hot (20)

Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бок
 
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NETЧто нам стоит DAL построить? Акуляков Артём D2D Just.NET
Что нам стоит DAL построить? Акуляков Артём D2D Just.NET
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016Эволюционный дизайн. Joker Students Day 2016
Эволюционный дизайн. Joker Students Day 2016
 
Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?Gradle in Enterprise, Is it possible?
Gradle in Enterprise, Is it possible?
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
Распределенные системы в Одноклассниках / Олег Анастасьев (Одноклассники)
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline Jenkins Imperative Pipeline vs Declarative Pipeline
Jenkins Imperative Pipeline vs Declarative Pipeline
 
Сергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проектеСергей Сергеев — Maintainer кода в большом проекте
Сергей Сергеев — Maintainer кода в большом проекте
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
 
Многопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметкиМногопоточное программирование на C#, путевые заметки
Многопоточное программирование на C#, путевые заметки
 

Viewers also liked

Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургКирилл Толкачёв
 
WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)Aleksandr Tarasov
 
Service Discovery. Spring Cloud Internals
Service Discovery. Spring Cloud InternalsService Discovery. Spring Cloud Internals
Service Discovery. Spring Cloud InternalsAleksandr Tarasov
 
A Research Study into DevOps Bottlenecks
A Research Study into DevOps BottlenecksA Research Study into DevOps Bottlenecks
A Research Study into DevOps BottlenecksBaruch Sadogursky
 

Viewers also liked (6)

CD with Jenkins. Lessons Learned
CD with Jenkins. Lessons LearnedCD with Jenkins. Lessons Learned
CD with Jenkins. Lessons Learned
 
Дикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG ЕкатеринбургДикие микросервисы на JUG Екатеринбург
Дикие микросервисы на JUG Екатеринбург
 
WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)WILD microSERVICES v2 (JEEConf Edition)
WILD microSERVICES v2 (JEEConf Edition)
 
Docker In Bank Unrated
Docker In Bank UnratedDocker In Bank Unrated
Docker In Bank Unrated
 
Service Discovery. Spring Cloud Internals
Service Discovery. Spring Cloud InternalsService Discovery. Spring Cloud Internals
Service Discovery. Spring Cloud Internals
 
A Research Study into DevOps Bottlenecks
A Research Study into DevOps BottlenecksA Research Study into DevOps Bottlenecks
A Research Study into DevOps Bottlenecks
 

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

C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenchesGleb Rybalko
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаYandex
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++Andrey Karpov
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven developmentTestableapple
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontendDenis Kolesnikov
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)Andrey Gordienkov
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAndrey Gordienkov
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 

Similar to Jbreak 2016: Твой личный Spring Boot Starter (20)

C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья ШишковC++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишков
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложений
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
MockServer-driven development
MockServer-driven developmentMockServer-driven development
MockServer-driven development
 
Software Analytics in frontend
Software Analytics in frontendSoftware Analytics in frontend
Software Analytics in frontend
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
 
AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)AOP and Design Patterns (GoF)
AOP and Design Patterns (GoF)
 
Aspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design PatternsAspect Oriented Programming and Design Patterns
Aspect Oriented Programming and Design Patterns
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Tdd php
Tdd phpTdd php
Tdd php
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 

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

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