Вопрос или проблема
Контекст
В программной инженерии существуют шаблоны проектирования программного обеспечения (например, GoF), которые описывают решения для общих проблем кодирования — обычно на уровне кода; аналогично, существуют архитектурные паттерны (например, Fowler), которые касаются архитектуры систем в целом (хотя они рассматривают аспекты, выходящие за рамки чистого кода, они часто, кажется, сосредотачиваются больше на вопросах программной инженерии, чем на вопросах инфраструктуры).
Я также заметил, что такие провайдеры платформ, как Microsoft, выпускают “шаблоны проектирования в облаке“.
Инфраструктура как код (IoC) представляет собой дальнейшую усложняющую ситуацию, где аспекты программного обеспечения/кодирования начинают становиться актуальными.
Конкретный вопрос(ы)
В области инфраструктуры существуют ли инфраструктурные шаблоны? Если да, есть ли какая-либо относительно окончательная коллекция таких шаблонов, которая широко понятна сообществу инфраструктуры? Или вы просто «заимствуете» архитектурные шаблоны систем?
Помимо этого, предполагая, что ответ на вышеуказанный вопрос в целом “да”, рассматриваются ли шаблоны облачной инфраструктуры как часть или дополнение к этим шаблонам — или рассматриваются как отдельная коллекция?
Для справки
Я архитектор решений, который приходит из сферы разработки программного обеспечения, а не инфраструктуры. Когда я говорю “инфраструктура”, я имею в виду такие вещи, как сеть, физические и виртуальные серверы и их архитектура развертывания, планирование емкости и объема, безопасность серверов и сетей и так далее – в основном всё, на что может полагаться “программный” архитектор, но не обязательно архитектурно разрабатывать сам.
Ответ или решение
Дизайн и архитектурные паттерны в инфраструктуре: существуют ли они?
В мире программной инженерии паттерны проектирования (например, паттерны "Gang of Four") знакомы каждому разработчику. Они предоставляют решения для распространенных проблем, возникающих на уровне кода. Наряду с этим существуют архитектурные паттерны (такие как работы Мартина Фаулера), которые описывают служебные структуры, но часто сосредотачиваются на программных аспектах, оставляя вопросы инфраструктуры на второй план. Это поднимает важный вопрос: существуют ли инфраструктурные паттерны, ориентированные именно на физическую и виртуальную инфраструктуру?
Паттерны в области инфраструктуры: реальность или миф?
Существуют ли инфраструктурные паттерны?
Безусловно, инфраструктурные паттерны существуют и представляют собой значимый аспект архитектурного проектирования системы. В отличие от паттернов проектирования программного обеспечения, которые касаются исключительно вопросов кода, инфраструктурные паттерны фокусируются на целостной архитектуре систем, включая такие компоненты, как сети, серверы, обеспечение безопасности и развертывание.
Определенные паттерны в инфраструктуре:
-
Дизайн виртуальных сетей (VPC): Используется для создания изолированных сетей в облачных средах, позволяя архитекторам безопасно управлять ресурсами.
-
Микросервисная архитектура: Включает в себя подходы к развертыванию и взаимодействию между множеством мелких сервисов, что требует глубокой связи с сетевыми и серверными требованиями.
-
Шаблон активной/пассивной резервной капли: Обеспечивает высокую доступность и отказоустойчивость систем через эффективное проектирование инфраструктуры.
-
Система контейнеризации: Глубоко связанная с концепциями DevOps и IaC (Infrastructure as Code), предоставляет возможность автоматизации развертывания и управления ресурсами.
Инфраструктура как код (IaC) и её влияние
Понятие IaC добавляет дополнительный уровень сложности и возможностей при разработке инфраструктурных паттернов. Оно подразумевает использование кода для управления и автоматизации инфраструктуры, что в свою очередь приводит к более строгой связи между разработкой и операциями. Здесь важным является использование инструментов типа Terraform или Ansible, где паттерны проектирования могут перекликаться с практиками, использующимися для написания кода.
Облако и его паттерны
Что касается паттернов облачной инфраструктуры, они могут рассматриваться как расширение существующих инфраструктурных паттернов. Однако облачные паттерны, такие как «Сервис без сервера» или «Исходя из жесткого уровня обслуживания», требуют специфического подхода к проектированию и реализации, учитывающего нюансы облачных сервисов и политик.
Таким образом, облачные паттерны можно считать отдельной, но взаимосвязанной коллекцией, обогащающей общий набор инфраструктурных практик.
Заключение
Итак, инфраструктурные паттерны действительно существуют и играют важную роль в разработке современного программного обеспечения. Их понимание и применение имеет решающее значение как для разработчиков, так и для архитекторов, обеспечивающих строение устойчивых, безопасных и масштабируемых систем.
Таким образом, в дальнейшем взаимодействии между программной и инфраструктурной архитектурой важно учитывать существующие паттерны и их адаптацию к новым требованиям среды, что позволит создавать более эффективные и целостные решения.