Распределенные системы с большим количеством разных видов работ - PullRequest
0 голосов
/ 25 мая 2019

Я хочу создать распределенную систему, которая может поддерживать около 10 000 различных типов заданий. На одной машине может размещаться только 500 таких заданий, поскольку для каждого задания необходимо предварительно загрузить некоторые данные в память, которые нельзя сохранить в кеше. Каждая работа должна иметь избыточность для доступности.

Я исследовал библиотеки с открытым исходным кодом, такие как zookeeper, hadoop, но ни одна из них не решает мою проблему. Самое простое решение, о котором я могу подумать, - это сохранить карту типа работы с ее размещенной машиной. Но как я могу поддерживать динамическое распределение типов работ в моем автопарке? Как обрабатывать сбои машины, чтобы гарантировать, что каждый тип задания должен быть доступен по крайней мере на 1 машине, в любой момент времени.

1 Ответ

0 голосов
/ 27 мая 2019

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

  1. Получать входные данные от пользователей и помещать их в распределенную очередь сообщений.Это означает, что вы должны настроить очередь сообщений (например, ActiveMQ или RabbitMQ ) на нескольких серверах.Эта технология MQ помогает реплицировать входные запросы для проблем отказоустойчивости.Он также предоставляет полную сквозную асинхронную систему.
  2. После подготовки этого слоя MQ вы можете настроить уровни своих вычислительных серверов.Это означает, что некоторые вычислительные серверы (~ 20 серверов в вашем случае) будут читать запросы из очереди сообщений и запускать задание на основе запроса.Поскольку этот MQ распределен, вы можете быть уверены, что на ваших вычислительных серверах может произойти хороший уровень распределения нагрузки.Кроме того, каждый сервер способен выполнять столько заданий, сколько вы хотите (~ 500 в вашем случае) на основе запросов, которые он читает из MQ.
  3. Что касается сбоев, вычислительные серверы могут выскочить из MQ только в том случае, если задание завершено.Если происходит сбой одного сервера, задание все еще находится в MQ, и другой сервер может работать на нем.Если задание где-то сохраняет состояние или что-то обновляет, вам следует управлять его дублированием.

Хорошая особенность этого подхода в том, что он очень продаваемый.Это означает, что если в будущем вам придется обрабатывать больше заданий, добавив вычислительный сервер и подключив его к MQ, вы сможете обрабатывать больше запросов на серверах без каких-либо изменений в системе.Кроме того, некоторые полезные функции в MQ, такие как организация очередей на основе приоритетов, помогают определять приоритеты запросов и обрабатывать их в зависимости от типа задания.

ps Ваш Q не предоставляет никаких сведений о типе и параметрах системы.Это черновик решения, который я могу предложить.Если вы предоставите более подробную информацию, возможно, сообщество может помочь вам больше.

...