- BrainTools - https://www.braintools.ru -
Параллельные и распределённые вычисления часто ставят рядом, но это далеко не одно и то же. В новом переводе от команды Spring АйО [1] разберем, как устроены обе модели, чем отличаются их архитектура, способы обмена данными, масштабируемость и отказоустойчивость. Статья подойдет тем, кто хочет понять, когда достаточно ресурсов одной машины, а когда без сети из нескольких узлов уже не обойтись.
В постоянно расширяющемся мире вычислений стремление к более быстрому и эффективному выполнению задач привело к разработке сложных методов. Два заметных подхода, которые получили широкое распространение, — параллельные вычисления и распределённые вычисления. Хотя оба нацелены на использование совокупной мощности нескольких вычислительных узлов, они существенно различаются по архитектуре и сфере применения.
В этом руководстве мы дадим всестороннее введение в параллельные и распределённые вычисления, рассмотрев, чем они отличаются друг от друга по ряду аспектов.
Параллельная обработка — это вычислительная техника, при которой несколько операций или задач выполняются одновременно, а не последовательно. Она предполагает разбиение задачи на более мелкие части и одновременное выполнение этих частей на нескольких вычислительных блоках или ядрах. Такой подход призван повысить скорость и эффективность вычислений за счёт использования мощности нескольких вычислительных ресурсов.
Далее мы рассмотрим различные типы архитектур параллельной обработки.
В этом подходе разные задачи выполняются одновременно. Каждая задача может быть независимой или зависеть от других, но при этом может выполняться параллельно.
Здесь одна и та же операция одновременно выполняется над несколькими фрагментами данных. Это часто используется в таких приложениях, как обработка изображений, где одну и ту же операцию нужно применять к каждому пикселю независимо. На рисунке ниже показан типичный процесс, который включает и параллелизм по задачам, и параллелизм по данным:

Параллелизм на уровне инструкций предполагает одновременное выполнение нескольких инструкций из одного потока инструкций. Современные процессоры часто используют такие методы, как конвейеризация и суперскалярное исполнение, чтобы добиться этого.
Параллелизм на уровне битов — это одновременная обработка нескольких битов, или двоичных разрядов, в машинном слове компьютера.
Параллельная обработка может быть реализована различными способами, включая многоядерные процессоры, многопроцессорные системы, компьютерные кластеры и специализированные аппаратные ускорители, такие как GPU (графические процессоры) и TPU (тензорные процессоры). Она широко применяется в высокопроизводительных вычислениях (HPC), научном моделировании, аналитике данных, машинном обучении [2] и во многих других задачах, требующих значительной вычислительной мощности.
Распределённые вычисления — это модель, при которой вычисления распределяются между несколькими взаимосвязанными компьютерами для достижения общей цели. В отличие от традиционных централизованных вычислений, где одна мощная машина выполняет все задачи, распределённые вычисления децентрализуют нагрузку, распределяя её между несколькими узлами или машинами, которые обмениваются данными и совместно работают по сети.
Распределённые вычисления развивают концепцию параллельной обработки на шаг дальше. Они задействуют несколько независимых компьютеров, часто географически распределённых и соединённых сетью, чтобы совместно решать одну крупную задачу. В отличие от параллельных вычислений, ориентированных на одну машину с тесно связанной группой процессоров, распределённые вычисления имеют дело со слабо связанными автономными машинами.
Важно понимать, что параллельные и распределенные вычисления – это не всегда взаимоисключающие подходы. На практике современные системы очень часто сочетают оба: внутри одного узла активно используется параллелизм (пулы потоков, SIMD, GPU, многопоточность), а между узлами – распределенная обработка по сети. Например, Spark, Kubernetes-based ML pipelines или распределенные БД почти всегда одновременно используют и межузловое распределение нагрузки, и локальный параллелизм внутри каждой машины. Поэтому корректнее воспринимать эти модели не как “или/или”, а как два уровня организации вычислений.
Распределённые вычисления могут принимать разные формы. Далее мы рассмотрим возможные формы распределённых вычислений.
Клиенты запрашивают услуги или ресурсы у централизованных серверов. Эта модель широко используется в веб-приложениях, где клиенты (например, веб-браузеры) взаимодействуют с удалёнными серверами (например, веб-серверами) через Интернет.

В P2P-сетях узлы выступают одновременно в роли клиентов и серверов, напрямую обмениваясь ресурсами и данными друг с другом без необходимости централизованной координации:

Грид-вычисления объединяют географически распределённые ресурсы для выполнения крупномасштабных вычислений. Обычно это предполагает объединение ресурсов нескольких организаций или учреждений для решения сложных задач:

Кластерные вычисления предполагают соединение нескольких компьютеров (узлов) в пределах одной площадки, чтобы они совместно работали как единая система:

Кластеры часто используются в научных исследованиях, анализе данных и задачах высокопроизводительных вычислений (HPC).
Основное преимущество распределённых вычислений заключается в их способности к масштабированию. За счёт добавления большего числа компьютеров в сеть вычислительную мощность и объём хранилища можно существенно увеличить. Это делает их идеальным решением для обработки огромных вычислительных задач, которые были бы неподъёмны для одного компьютера. Распределённые вычисления обеспечивают масштабируемые, отказоустойчивые и экономически эффективные решения для работы с большими объёмами данных и выполнения вычислительно интенсивных задач. Они широко применяются в различных областях, включая облачные вычисления, обработку больших данных, распределённые базы данных и распределённый искусственный интеллект [3].
Хотя параллельные и распределённые вычисления имеют сходство в одновременном выполнении задач, они различаются по архитектуре, коммуникации, координации, масштабируемости, отказоустойчивости и развёртыванию. Ниже приведена таблица, суммирующая ключевые различия между параллельными и распределёнными вычислениями:
|
Аспект |
Параллельные вычисления |
Распределённые вычисления |
|
Архитектура |
Как правило, задействует несколько процессоров или ядер в пределах одной машины. |
Предполагает несколько машин или узлов, соединённых по сети. |
|
Коммуникация |
Обмен данными между процессами обычно осуществляется через общую память [4] или механизмы межпроцессного взаимодействия внутри одной машины. |
Обмен данными между узлами происходит по сети, часто с использованием передачи сообщений или механизмов удалённого вызова процедур (RPC). |
|
Координация |
Координацией между параллельными задачами обычно управляет один управляющий процесс или поток. |
Координация между распределёнными узлами требует более сложных механизмов из-за распределённой природы системы. |
|
Масштабируемость |
Масштабируемость ограничена конечным числом процессоров или ядер в одной машине. |
Обеспечивает более высокий потенциал масштабирования за счёт добавления новых узлов в распределённую систему. |
|
Отказоустойчивость |
Как правило, не имеет встроенных механизмов отказоустойчивости, кроме резервирования на уровне аппаратуры или ПО. |
Часто включает механизмы отказоустойчивости — такие как резервирование, репликация и обнаружение ошибок — для обработки отказов узлов или проблем сети. |
|
Развёртывание |
Подходит для задач, выигрывающих от параллельного выполнения в рамках одной машины, например на многоядерных процессорах. |
Подходит для задач, требующих кооперации нескольких машин или узлов, например для крупномасштабной обработки данных или распределённых систем. |
|
Примеры |
Научные симуляции, обработка изображений на многоядерных CPU, вычисления на GPU. |
Облачные вычисления, распределённые базы данных, одноранговые сети, грид-вычисления. |
Выбор между параллельными и распределёнными вычислениями зависит от конкретных потребностей [5] вычислительной задачи. Ниже приведены ключевые факторы, которые стоит учитывать:
На практике главный критерий выбора часто упирается не в “размер задачи” сам по себе, а в стоимость координации и обмена данными. Если подзадачи тесно связаны, часто синхронизируются и обмениваются большим объемом промежуточных данных, распределенная архитектура может дать худший результат из-за сетевых задержек, сериализации, ретраев и сложности обеспечения консистентности. И наоборот, если задачу можно разбить на крупные, относительно независимые части, распределенный подход масштабируется значительно лучше. Поэтому при проектировании системы всегда полезно отдельно оценивать: сколько стоит вычисление, сколько стоит коммуникация, и сколько стоит сбой одного узла.
Размер и сложность задачи: если задача велика и её можно естественным образом разделить на независимые подзадачи, параллельные вычисления могут быть хорошим выбором. Для чрезвычайно больших или сложных задач, требующих значительных ресурсов, распределённые вычисления предлагают более масштабируемое решение.
Доступное оборудование: параллельные вычисления используют одну машину с несколькими ядрами, тогда как распределённые вычисления могут задействовать сеть уже существующих компьютеров.
Накладные расходы на обмен данными: обмен данными между процессорами или компьютерами может создавать накладные расходы в обоих подходах. Однако стоимость передачи сообщений в распределённых системах может быть выше по сравнению с внутренними коммуникациями внутри одной машины при параллельных вычислениях.
Сложность программирования: разработка параллельных приложений может быть сложной из-за необходимости синхронизации и управления доступом к общей памяти. Распределённые системы также требуют дополнительных усилий программирования для организации обмена данными и обеспечения отказоустойчивости.
В статье мы всесторонне представили параллельные и распределённые вычисления и выявили различия между этими двумя парадигмами.
В итоге параллельные и распределённые вычисления — это мощные методы, позволяющие задействовать совокупную мощность множества вычислительных блоков. Понимание их сильных и слабых сторон, а также ключевых отличий важно для выбора подходящего инструмента под конкретную задачу и раскрытия их реального потенциала.

Присоединяйтесь [1] к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО [1], чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
Автор: spring_aio
Источник [6]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/26965
URLs in this post:
[1] Spring АйО: https://t.me/+acrI2N6q080wZjM6
[2] обучении: http://www.braintools.ru/article/5125
[3] интеллект: http://www.braintools.ru/article/7605
[4] память: http://www.braintools.ru/article/4140
[5] потребностей: http://www.braintools.ru/article/9534
[6] Источник: https://habr.com/ru/companies/spring_aio/articles/1008990/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1008990
Нажмите здесь для печати.