На пути к распределенной системе

Современные приложения часто представляют собой непростую топологию разрозненных сервисов, объединенных неумолимым конвейером бизнес процессов. С одной стороны это дает определённые преимущества, но в то же время накладывает весьма серьезные ограничения на применяемые архитектурные подходы и инженерные решения при проектировании подобных приложений.

Как и любая подобная история, эта история начинается с приложения…

ВСЕ НОВЫЕ ПРИЛОЖЕНИЯ ВОСХИТИТЕЛЬНЫ ОДИНАКОВО, КАЖДОЕ СТАРОЕ ПРИЛОЖЕНИЕ УРОДЛИВО ПО-СВОЕМУ…

О чем разговор?

  1. Еще раз о микросервисах
  2. Чеклист для ORM
  3. Простые решения для непростых ситуаций

● удобство эксплуатации ● простота ● возможность развития

Что делать?

И, главное, как?

спойлер: переехать на микросервисы ;)…

Наивное проектирование...

● Крис Ричардсон. Микросервисы. Паттерны разработки и рефакторинга ● Георг Хопе. Паттерны интеграции корпоративных приложений

Основная гипотеза

= SHARED DB =

РЕЦЕПТ

“Это зависит от удачи. Все зависит от удачи…”

Ингредиенты...

● КАНОНИЧЕСКАЯ МОДЕЛЬ?! ● EventSoursing?! ● CQRS?! ● Saga

Каноническая модель данных

Event Sourcing

CQRS

Простые трудности...

Чек-лист пользователя ORM

Vlad Mihalcea

По умолчанию используйте Lazy Fetching

Никогда не используйте Table Generator!

Используйте генераторы “последнего поколения”

Сконфигурируйте Batching

● hibernate.jdbc.batch_size=30 ● hibernate.order_inserts=true ● hibernate.order_updates=true

Для отладки используйте механизмы логирования ORM и Proxy DataSource/Driver

P6Spy

Что делать, если приложение “тормозит”?

Используйте JMX!

Майкл Нейгард. Release it! Проектирование и дизайн ПО для тех, кому не все равно

Timeouts

Bulkhead

Circuitbreaker

Resilience4j

ИТОГО

● Удобные для вас решения - обычно правильные ● Data First ● Следите за пулами соединений и потоков ● Тестируйте самые худшие сценарии ● Не пренебрегайте специализированными инструментами

References

● Gregor Hohpe. Enterprise Integration Patterns ● Chris Richardson. Microservices Patterns ● Sebastian Daschner. Architecting Modern Java EE Applications ● Martin Kleppmann. Designing Data-Intensive Applications ● Николай Голов. Целостность данных в микросервисной архитектуре

Критика приветствуется, но не является обязательной ;)