Обзор книги “Software Architecture: The Hard Parts” — Part 4

Reuse Patterns

Авторы рассматривают четыре варианта повторного использования, которые изображены на рисунке ниже. Для каждого варианта есть описание что это за зверь + перечень преимуществ (зеленые стикеры) и недостатков (розовые стикеры).

Рис.1 “Reuse patterns”

Code replication

Code replication — это самый простой способ повторного использования, которому учатся начинающие программисты, раньше он назывался copy-paste, а теперь stackoverflow-development, когда разработчики просто копируют понравившийся им код в свои сервисы:) Подход имеет очевидные преимущества и недостатки.

Shared library

Следующий вариант shared library — самый популярный и заслуженный:) Звучит достаточно просто, но имеет сложности с гранулярностью и версионированием. Авторы кратко рассматривают эти проблемы, но мне больше нравится часть книги Дядюшки Боба “Clean Architecture”, которая посвящена принципы дизайна модулей и разделения по компонентам. Я делал на эту часть краткое саммари, ну а здесь напомню основные компромиссы при дизайне этих общих компонентов. Сначала надо вспомнить про основные принципы component cohesion principles.

Рис.2 “Component Cohesion Principles”
Рис.3 “Cohesion principles tension diagram”

Shared service

В гетерогенной среде, где сервисы написаны на разных языках, иногда появляется идея вынести общую логику в отдельный сервис. Клиенты будут вызывать этот сервис, что фактически конвертирует статическую часть на этапе build, на динамическую связь в рамках runtime. В общем, у этого метода есть значительные компромиссы в областях, которые указаны на рисунке ниже.

Рис.4 “Tradeoffs of using shared service”

Sidecars and Service Mesh

На самом деле этот способ повторного использования стал популярным с появлением платформы Kubernetes. На самом деле про этот подход очень хорошо рассказывается в книге “Kubernetes Patterns”, на которую я делал краткий обзор. И в контексте текущего обсуждения нас интересуют часть про структурные паттерны (structural patterns) с картинки.

Рис.5 “Kubernetes Patterns”
Рис.6 “Aspects of reuse”

Data Ownership and Distributed Transactions

Вообще владение данными — это достаточно сложная тема. Для ее упрощения авторы пользуются стратегией “разделяй и властвуй” (divide and conquer на английском или divide et impera на латинском) и рассматривают возможные сценарии, которые приведены на рисунке ниже.

Рис.7 “Data Ownership Scenarios”

Distributed transactions

Это очень интересная тема и если у вас в реальной системе есть распределенные транзакции, то вы уже скорее всего почувствовали всю ее интересность:)

Рис.8 “ACID”
Рис.9 “BASE”
Рис.10 “Eventual Consistency Patterns”

P.S.

Запись обсуждения этой части книги в нашем книжном клубе Code of Architecture представлена ниже. А продолжения можно прочитать в других статьях 5, 6.

--

--

Director of digital ecosystem development department at Tinkoff. Bachelor at applied math, Master at system analysis, Postgraduate studies at economics.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alexander Polomodov

Alexander Polomodov

Director of digital ecosystem development department at Tinkoff. Bachelor at applied math, Master at system analysis, Postgraduate studies at economics.