[Перевод] Заметки об основах программной архитектуры
Это вводное руководство для архитекторов программного обеспечения. В настоящее время звание «архитектор» очень популярно во всем мире, но не существует настоящего руководства, как стать архитектором программного обеспечения.
1. Общая концепция архитектуры программного обеспечения
2. Архитектурные стили
3. Технология
4. Софт скиллз (принятие архитектурных решений, методы анализа рисков, навыки подачи материала, отношения с командой менеджеров, ведение переговоров, планирование карьеры архитектора)
5. Принципы проектирования
В реальном мире не существует одного определенного решения для конкретной проблемы. Когда мы изучаем архитектурные дисциплины в теории или на практике, мы должны понимать, что многие архитектурны решения принимаются, исходя из реальной ситуации.
Архитектурные стили — это типология архитектурных подходов, реализуемых в системе, например, микросервисы, иерархические подходы или микроядра. Ниже показаны несколько примеров:
Архитектурные решения определяют правила построения системы. Например, архитектор может решить, что только бизнес-уровень и сервисный уровень могут обращаться к базе данных, и ограничить уровень представления от прямого обращения к базе данных. Архитектурные решения формируют ограничения системы и помогают разработчикам сориентироваться, что разрешено, а что нет.
Принципы проектирования — это руководство, а не жёсткие правила. Принципы проектирования служат лишь указаниями по предпочтительному методу, поскольку архитектурное решение никогда не может охватить все условия и варианты связи между сервисами (позволяют разработчикам выбрать более подходящий протокол связи в конкретной ситуации (например, REST или gRPC).
Принципы проектирования: меньшее зацепление, высокая связность, локальность, устранимость, модульность и небольшие компоненты.
Принципы SOLID
Принцип проектирования: класс проектирования
Принципы чистой архитектуры от Боба Мартина
Подробнее здесь.
Принцип проектирования: Связность
Принципы связности компонентов таковы:
• REP: Принцип эквивалентности повторного использования/выпуска
• CCP: Общий принцип закрытия
• CRP: Общий принцип повторного использования
Принципы упаковки
Высокоуровневая архитектура
1. Сохраняйте конфигурируемые данные на высоком уровне
2. Предпочитайте полиморфизм вместо If/else или switch/case
3. Не будьте непоследовательными
4. Разделяйте многопоточный код
5. Только 1 уровень абстракции на уровне
6. Поля не определяют состояние
7. Микрослои
8. Синглтоны / локатор сервисов
9. Базовые классы в зависимости от их производных
10. Завистливые функции
11. Неиспользуемое зацепление
12. Скрытое зацепление
13. Переходная навигация
Архитектурное мышление
• Относиться к взгляду на вещи с архитектурной позиции и точки зрения,
• Понимать разницу между архитектурой программного обеспечения и проектированием программного обеспечения, знать, как работать с командой разработчиков.
• Обладать техническим кругозором, поддерживать определенную техническую углубленность и видеть решения и возможности, которые не видят другие.
• Понимать, анализировать и согласовывать компромиссы между различными решениями и технологиями
• Понимать важность бизнес-требований и то, как перевести их в архитектуру.
• Архитектор анализирует бизнес-требования, извлекает и определяет архитектурные особенности, выбирает архитектурные стили, создает компоненты, а затем передает их команде разработчиков. Команда разработчиков создает классы и пользовательские интерфейсы для каждого компонента и тестирует исходный код.
Традиционный взгляд на архитектуру в сравнении с проектированием
В начале карьеры разработчика основное внимание уделяется расширению вершины пирамиды, накоплению опыта и знаний.
Архитекторы должны обладать широким техническим кругозором, чтобы осмыслить проблему.
• Серый уровень: технологии, фреймворки, языки и инструменты, используемые в повседневной работе
• Жёлтый уровень: то, что вы немного знаете, но не обладаете глубокими профессиональными знаниями.
• Красный уровень: «слепое пятно» каждого архитектора
Для хорошего разработчика наиболее важна верхняя треть.
Для архитекторов разумно пожертвовать некоторыми приобретенными знаниями и использовать это время для расширения кругозора. Это тоже компромисс.
Разработчики на протяжении всей карьеры оттачивают опыт, и переход на роль архитектора означает пересмотр приоритетов. Это сложно для многих людей и часто приводит к двум проблемам:
• Попытка сохранить профессионализм в каждой области, что приводит к неудачной работе в любой области, и выполнение работы очень грубо;
• Непонимание того, что свои устаревшие знания все еще являются передовыми, что часто встречается в крупных компаниях.
Разработчики, переходящие на роль архитектора, должны изменить свой взгляд на приобретение знаний. Баланс между глубиной и широтой знаний — это вопрос, который каждый разработчик должен рассматривать на протяжении всей своей карьеры.
В роли архитектора широта знаний важнее глубины. Потому что архитекторы должны принимать решения на основе тех идей, которые есть у них в голове.
Архитектура — это то, что вы не можете загуглить. Все в архитектуре — это компромисс.
• Потому что это действительно зависит от среды развертывания, бизнеса, культуры компании, бюджета, времени, квалификации разработчика и десятков других факторов.
• В архитектуре нет правильного или неправильного ответа, все может быть компромиссом.
Например, рассмотрим аукционную систему с двумя режимами потребления данных, именуемыми «публикация» и «подписка».
Преимущества модели «публикация-подписка»
• Если мы хотим добавить новую службу «история торгов», нам не нужно вносить никаких изменений в существующую систему;, а в модели очереди нам может понадобиться модифицировать производителя, чтобы добавить очередь.
• Уменьшение зацепления: производителю не нужно знать, какие сервисы используются и как использовать данные; в модели очереди производителю нужно знать, какого типа данные и кому.
• Мышление архитектора должно подсказывать преимущества и недостатки решения.
Преимущества модели с использованием очередей
• Любой может получить доступ к данным модели «публикация-подписка», при этом возникают вопросы доступа к данным и безопасности.
• Модель «публикация-подписка» может принимать данные только в одном и том же формате. Предполагается, что для новой службы «история торгов» требуется текущая цена продажи и торги, но другие службы изначально не имеют этой информации. В этом случае необходимо изменить формат данных, что отразится на пользователе. Все остальные сервисы данных. В модели очереди это будет отдельный канал и, следовательно, отдельный формат, не затрагивающий другие сервисы.
• Модель «публикация-подписка» не поддерживает мониторинг количества сообщений в теме, что приводит к отсутствию поддержки автоматического масштабирования. Легко узнать, в какой очереди находится большое количество сообщений, и ее можно автоматически масштабировать самостоятельно. Обратите внимание, что этот компромисс зависит от конкретной технологии, и Advanced Message Queuing Protocol (AMQP) может поддерживать балансировку нагрузки и мониторинг.
Инженерная практика
Архитектура программного обеспечения состоит из требований и всех других архитектурных особенностей.
Список архитектурных характеристик (неполный)
Характеристики операционной архитектуры
Характеристики операционной архитектуры в значительной степени пересекаются с проблемами операций и DevOps, образуя точку пересечения этих проблем во многих программных проектах.
Характеристики структурной архитектуры
Сквозные характеристики архитектуры
Высокоуровневое представление системной архитектуры
Подробнее по теме предлагаем вам ознакомиться со следующими книгами:
Фундаментальный подход к программной архитектуре:
паттерны, свойства, проверенные методы
Марк Ричардс, Нил Форд
» Оглавление
» Отрывок
⠀
Современный подход к программной архитектуре: сложные компромиссы
Нил Форд, Марк Ричардс, Прамод Садаладж, Жамак Дехгани
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Заметки
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
P.S.
Также обращаем ваше внимание на то, что у нас на сайте проходит распродажа.