2. О себе
Андрей Титарь – andrii.tytar@sigma.software, @abfaust
- Senior Software Developer @ Sigma Software - Node.js, Ruby, DevOps
- Previously:
- Practice Microservices @ Avid Cloud, GlobalLogic – Node.js, SM
- ~8 years experience in development
- CI/CD evangelist
- XP practitioner
- Audiophile, DJ
7. Bounded Context
Ограниченный контекст – пределы
применимости той или иной модели, для
четкого понимания где нужно поддерживать
единообразие и согласованность, и как
соотносить это с другими контекстами.
-- Eric Evans, Domain-Driven Design
8. Основные принципы
- легковесный и дешевый
- сфокусирован на одной задаче и делает это
хорошо
- понятен и может поддерживаться одним
человеком, небольшой командой
- легковесный протокол
- быстро деплоится и масштабироваться
- устойчивый к сбоям
9. Макилрой: Четверть века UNIX
Ken Thompson and Dennis Ritchie, key proponents of
the Unix philosophy
Философия UNIX гласит:
- Пишите программы, которые делают что-то одно и
делают это хорошо.
- Пишите программы, которые бы работали вместе.
- Пишите программы, которые бы поддерживали
текстовые потоки, поскольку это универсальный
интерфейс.
10. Достоинства
Независимая масштабируемость
При размещении модулей на
отдельных серверных узлах мы можем
масштабировать их независимо от
других модулей.
Независимый технический стек
Благодаря распределению модулей
по разным серверным узлам и
независимому языку взаимодействия
мы можем использовать совершенно
разные языки программирования, и
инструменты
Сохранение модульности
И единая, и микросервисная архитектуры
позволяют сохранять модульность и
инкапсуляцию. Однако это может быть
довольно трудной задачей, на решение
которой уйдут десятилетия, несмотря на
правила SOLID. Зато микросервисы
позволяют обеспечивать логическое
разделение приложения на модули за счёт
явного физического разделения по
серверам. Физическая изолированность
защищает от нарушения пределов
ограниченных контекстов.
Независимая эволюция
подсистем
Микросервис может
развиваться и ломать
обратную совместимость, не
обременяя себя поддержкой
старых версий, так как всегда
можно оставить старую
версию микросервиса
работающей необходимое
время.
11. Недостатки
Распределенность
Распределенные системы сложнее
программировать, так как удаленные
вызовы работают медленно и невозможно
исключить риск сбоя.
Согласованность в конечном счете
Для распределенной системы сложно
поддерживать строгую согласованность.
Поэтому каждый обеспечивает ее
самостоятельно.
Сложность эксплуатации
Для управления микросервисами, которые регулярно
переразвертываются, требуется зрелая группа
эксплуатации/поддержки.
15. Культура
- Продукт, а не проект
- Гетерогенность (использование разных языков
программирования)
- Самоорганизованные и самодостаточные команды
- Умные эндпойнты и глупые каналы
- Децентрализованное управление
- Автоматизация инфраструктуры
- Страховка от сбоев
- Архитектура с эволюционным развитием
- Ты создал, тебе и запускать
- Обильное тестирование
16. Continues Integration
“Continuous Integration doesn’t get rid of bugs, but it does make
them dramatically easier to find and remove.”
— Martin Fowler, Chief Scientist, ThoughtWorks
18. Где и когда применять
- Монолит в первую очередь
- Разделение монолита при необходимости
- Создание прототипов или временных сервисов
- Совместное использование с монолитом