Что такое распределенная система?
Обзор распределенных систем и микросервисных архитектур
Кев Зеттлер
Специалист по комплексной веб-разработке
Распределенная система — это набор компьютерных программ, использующих вычислительные ресурсы нескольких отдельных вычислительных узлов для достижения одной общей цели. Распределенные системы направлены на устранение узких мест или единых точек отказа в системе.
Что происходит, когда вы создаете приложение как единый развертываемый модуль? Сначала он работает хорошо, но со временем его размер и сложность растут. Часто его становится сложно поддерживать, скорость разработки падает, а опасность отказа увеличивается. В таком случае по законам развития, этот монолит должен превратиться в распределенную систему, обычно с микросервисной архитектурой.
Попробуйте Compass бесплатно
Повышайте удовлетворенность разработчиков, каталогизируйте все сервисы и улучшайте работоспособность программного обеспечения.
Что такое распределенная система?
Распределенная система — это набор компьютерных программ, использующих вычислительные ресурсы нескольких отдельных вычислительных узлов для достижения одной общей цели. Ее также называют распределенными вычислениями или распределенной базой данных. Распределенная система основывается на отдельных узлах, которые обмениваются данными и выполняют синхронизацию в общей сети. Обычно узлы представляют собой отдельные физические аппаратные устройства, но это могут быть и отдельные программные процессы или другие рекурсивные инкапсулированные системы. Распределенные системы направлены на устранение узких мест или единых точек отказа в системе.
Распределенные вычислительные системы обладают следующими характеристиками.
Совместное использование ресурсов: в распределенной системе могут совместно использоваться оборудование, программное обеспечение или данные.
Параллельная обработка: одну и ту же функцию могут одновременно обрабатывать несколько машин.
Масштабируемость: вычислительная мощность и производительность могут масштабироваться по мере необходимости при добавлении дополнительных машин.
Обнаружение ошибок: упрощается обнаружение отказов.
Прозрачность: узел может обращаться к другим узлам в системе и обмениваться с ними данными.
Связанные материалы
Сравнение микросервисной и монолитной архитектур
СМ. РЕШЕНИЕ
Улучшите процесс разработки с помощью Compass
В чем разница между централизованной и распределенной системами?
В централизованной вычислительной системе все вычисления выполняются на одном компьютере и в одном месте. Основное различие между централизованными и распределенными системами заключается в модели взаимодействия между узлами системы. Состояние централизованной системы хранится в центральном узле, к которому индивидуально обращаются клиенты. Поскольку все узлы централизованной системы обращаются к центральному узлу, это может привести к перегрузке сети и замедлить ее работу. Централизованная система имеет единую точку отказа, тогда как в распределенной системе такой точки нет.
Отличаются ли распределенные системы от микросервисов?
Микросервисная архитектура — это лишь один из типов распределенных систем. В ней приложение разбивается на отдельные компоненты, или «сервисы». К примеру, микросервисная архитектура может иметь сервисы, соответствующие бизнес-функциям (платежи, пользователи, продукты и др.), и каждый компонент будет обрабатывать бизнес-логику в своей сфере ответственности. В этом случае в системе будет несколько резервных копий сервисов, и у сервисов не будет единой точки отказа.
Что такое распределенная трассировка?
Распределенная трассировка — это способ профилирования или мониторинга результата запроса, который выполняется в распределенной системе. Мониторинг распределенной системы может оказаться непростой задачей, поскольку каждый отдельный узел имеет собственный, отдельный поток журналов и показателей. Чтобы получить точное представление о распределенной системе, необходимо свести показатели отдельных узлов в единую картину.
Запросы к распределенным системам обычно затрагивают не весь набор узлов в системе, а лишь его часть, или путь через узлы. Распределенная трассировка выявляет часто используемые пути в распределенной системе и позволяет командам анализировать и контролировать их. Распределенная трассировка ведется в каждом узле системы, поэтому команды могут запрашивать у системы информацию о работоспособности узлов и выполнении запросов.
Преимущества, недостатки и риски распределенных систем
Распределенные системы часто помогают повысить надежность и производительность системы. Надежность повышается за счет устранения единых точек отказа и узких мест. Узлы распределенной системы обеспечивают избыточность, поэтому при отказе любого узла его могут заменить другие. Производительность повышается благодаря тому, что узлы можно легко масштабировать по горизонтали и вертикали. В случае большой нагрузки на систему можно добавить дополнительные узлы, которые помогут с ней справиться. Для обработки большой нагрузки можно также повысить производительность отдельных узлов.
Однако обратной стороной этих преимуществ может стать разрастание системы, когда система становится слишком сложной и ее техническое обслуживание затрудняется. По мере усложнения системы у команды могут возникать трудности с эффективным управлением, организацией и совершенствованием системы. В частности, может возникнуть проблема с пониманием того, как связаны между собой различные компоненты и кто является владельцем конкретного программного компонента. Бывает трудно понять, как внести изменения в компоненты, чтобы максимально повысить работоспособность и при этом избежать негативного воздействия на зависимые компоненты и клиентов. Если в распределенной системе имеется несколько репозиториев, для упорядочивания кода и управления им могут потребоваться специальные инструменты, такие как Atlassian Compass.
Архитектура распределенных систем
Существует множество типов распределенных систем. Перечислим наиболее распространенные из них.
Клиент-сервер
В клиент-серверной архитектуре ответственность делится на две части. Клиент отвечает за представление (интерфейс пользователя) и поддерживает связь с сервером по сети. Сервер отвечает за обработку бизнес-логики и управление состоянием. Клиент-серверную архитектуру можно легко превратить в централизованную, если у сервера отсутствует избыточность. По-настоящему распределенная клиент-серверная модель должна иметь несколько серверных узлов для распределения клиентских подключений. Большинство современных клиент-серверных архитектур — это клиенты, которые подключаются к инкапсулированной распределенной системе на сервере.
Многоуровневая
Многоуровневая архитектура является расширением клиент-серверной архитектуры. Сервер в многоуровневой архитектуре разбивается на более мелкие узлы, которые выполняют дополнительные обязанности внутреннего сервера, такие как обработка данных и управление данными. Эти дополнительные узлы используются для асинхронного выполнения длительных заданий, высвобождая остальные серверные узлы для обработки запросов клиентов и взаимодействия с хранилищем данных.
Одноранговая
Каждый узел одноранговой распределенной системы содержит полный экземпляр приложения. Отсутствует разделение на узлы представления и узлы обработки данных. Узел содержит уровень представления и уровни обработки данных. Одноранговые узлы могут содержать полные данные о состоянии всей системы.
Преимуществом одноранговой системы является ее огромная избыточность. После инициализации и подключения однорангового узла к сети он находит другие одноранговые узлы, устанавливает с ними связь и синхронизирует свое локальное состояние с состоянием всей системы. Эта особенность означает, что отказ одного узла в одноранговой системе не нарушит работу других узлов. Одноранговая система продолжит работать.
Сервис-ориентированная архитектура
Сервис-ориентированная архитектура (SOA) является предшественницей микросервисной. Основное различие между SOA и микросервисной архитектурой заключается в области действия узлов: область действия микросервисных узлов относится к уровню функций. В микросервисной архитектуре узел инкапсулирует бизнес-логику для выполнения определенного набора функций, например обработки платежей. Микросервисная архитектура имеет несколько различных узлов бизнес-логики, которые взаимодействуют с независимыми узлами баз данных. Для сравнения, узлы SOA инкапсулируют целое приложение или подразделение компании. Границы сервиса для узлов SOA обычно охватывают всю систему баз данных в узле.
Микросервисная архитектура стала более популярной альтернативой SOA благодаря своим преимуществам. Микросервисы проще компоновать, поэтому команды могут многократно использовать функциональные возможности, предоставляемые небольшими сервисными узлами. Микросервисная архитектура более устойчива и допускает динамическое вертикальное и горизонтальное масштабирование.
Примеры использования распределенных систем
Сегодня распределенные системы используются многими приложениями. Мобильные и веб-приложения с интенсивным трафиком являются распределенными системами. Пользователи подключаются по принципу «клиент-сервер», где клиентом является веб-браузер или мобильное приложение. В этом случае сервер представляет собой распределенную систему. Современные веб-серверы следуют модели многоуровневой системы. Для делегирования запросов множеству серверных логических узлов, которые взаимодействуют через системы очередей сообщений, используется балансировщик нагрузки.
Популярным инструментом для работы с распределенными системами является платформа Kubernetes, которая позволяет создать распределенную систему из набора контейнеров. Контейнеры образуют узлы распределенной системы, а Kubernetes оркеструет сетевое взаимодействие между узлами и выполняет динамическое горизонтальное и вертикальное масштабирование узлов в системе.
Другой хороший пример распределенных систем — криптовалюты, такие как биткоин или эфириум, которые являются одноранговыми распределенными системами. Каждый узел в криптовалютной сети представляет собой полную копию всей истории реестра валюты. Когда валютный узел подключают к сети, он выполняет начальную загрузку. Для этого он устанавливает связь с другими узлами и загружает полную копию реестра. Кроме того, у криптовалют есть клиенты, или «кошельки», которые подключаются к узлам реестра через протокол JSON RPC.
Заключение
Распределенные системы получили широкое распространение и используются в большинстве современных программных интерфейсов. Приложения для социальных сетей, сервисы потокового видео, сайты электронной коммерции и многие другие продукты работают на базе распределенных систем. Централизованные системы естественным образом преобразуются в распределенные, чтобы получить возможность масштабирования. Микросервисы — это популярная и широко распространенная модель построения распределенных систем.
Распределенные системы более сложно создавать и обслуживать, но Atlassian Compass решает эту проблему. Это платформа для разработчиков, которая помогает ориентироваться в распределенной архитектуре. Она объединяет разрозненные сведения о результатах разработки и совместной работе команд в едином центре с возможностью поиска.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.