Understanding Distributed Architectures - The Patterns Approach (Рубрика Architecture)
Недавно на конференции YOW! 2024 выступил Unmesh Joshi, известный эксперт в области распределённых систем, который является Principal Consultant в ThoughtWorks с более чем 20-летним опытом работы в индустрии. Это выступление является кратким изложением его книги "Patterns of Distributed Systems", изданной в 2023 году в серии Мартина Фаулера (на сайте Мартина есть краткая версия каталога паттернов из этой книги). Понятно, что в 35 минутном выступлении рассказать все 30 паттернов из книги он не смог, но вот вот какие темы у него раскрыть получилось
- Введение в распределённые системы - современные системы включают облачные сервисы (cloud services), Kafka, Kubernetes и многие другие распределённые технологии.
- Самоподобие шаблонов - паттерны (patterns) применимы на разных уровнях абстракции и часто демонстрируют свойства самоподобия (self-similarity). Мне это напомнило фракталы:)
- Изучение открытого кода - для выявления шаблонов Unmesh использует "правило трёх реализаций", анализируя open source проекты распределенных систем (Kafka, K8s, Cassandra, ...)
- Каталог из 30 шаблонов - созданный автором каталог шаблонов помогает понять внутреннее устройство распределённых систем, с примерами из реальных продуктов.
- "Симпатия к платформе" - концепция, аналогичная "механической симпатии" (mechanical sympathy) в автогонках, помогающая эффективно использовать системы.
Mechanical sympathy is when you use a tool or system with an understanding of how it operates best. You don't have to be an engineer to be be a racing driver, but you do have to have Mechanical Sympathy. Jackie Stewart, racing driver.
- Важность практического опыта - реальный код устраняет двусмысленность и превращает абстрактные концепции в конкретные решения. У автора на Github есть репозитории с примерами распределенных систем для оркестрации контейнеров (аля K8s), messaging system (аля Kafka), nosql database (аля Cassandra)
- Структурирование через шаблоны - паттерны помогают организовать информацию и сделать код более понятным, устраняя неясности в документации. Я бы добавил, что они позволяют использовать инженерам общий язык при проектировании сложных систем
- Архитектура как последовательность паттернов - знание шаблонов упрощает понимание сложных архитектур, а также проектирование собственных систем
- Согласованное ядро и управление метаданными - пример паттерна, где небольшой кластер с высокой степенью согласованности (high consistency) управляет метаданными (metadata), что позволяет основному кластеру масштабироваться до тысяч узлов (nodes). По-факту, это стандартная концепция с разделением control plane и data plane.
- Применение шаблонов в реальных системах - у автора есть демонстрация реализации паттернов на примере мнииатюрных версий Kubernetes и Kafka для обучения (можно поискать на Github аккаунте автора, который я приводил выше)
Ну и финальная мысль выступления в том, что эти шаблоны помогают уменьшить случайную сложность (accidental complexity) и прояснить существенную сложность (essential complexity) распределённых систем (distributed systems), что помогает разобраться с таким сложной темой:)
#Software #Architecture #DistributedSystems #SystemDesign #Patterns #Sofware