2016-02-18 1 views
1

Мы пытаемся создать систему, которая получает список задач для выполнения из базы данных Cassandra, а затем через какой-то групповой консенсус создает план выполнения (предпочтительно на одном узле), который затем согласовывается и выполняется всем кластером серверов. Мы действительно не хотим добавлять какие-либо дополнительные компоненты программного обеспечения, такие как Redis или AMPQ, а скорее консенсус, построенный непосредственно на всех серверах, на которых выполняются задания. До сих пор мы нашли Skiff, реализацию алгоритма Raft, который выглядит так, как будто он может выполнить задачу, но мне было интересно, нашел ли кто-нибудь элегантное решение этой проблемы в чистом способе Node.js, не включающем внешние системы обмена сообщениями.Распределение запланированных задач в среде многоданных центров в Node.js с Cassandra

+0

Использование Паксоса Кассандры было решением, описанным ниже как @rystov. Что касается cron-системы планирования, построенной на вершине Кассандры, мы создали таблицу, в которой мы вводим числовой интервал/единицу (например, min, hour) и значение карты, содержащее задания. 'CREATE TABLE bakup.tasks_schd ( интервал INT, блок текста, рабочих мест на карте , PRIMARY KEY (интервал, блок) );' Тогда запрос на основе ли мы на определенный мин, час, день и т.д. и присоединиться к заданиям на сервере приложений. – somecallmemike

ответ

2

Cassandra поддерживает легкие транзакции, в основном это реализация Paxos, которая обеспечивает линеаризуемую согласованность и работу CAS (консенсус). Таким образом, вы можете использовать Cassandra для сериализации плана выполнения.

+0

Спасибо за комментарий, это именно то, что я преследую! Я тестирую его для выбора координатора задачи, на данный момент он отлично работает для выбора на основе интервала, если все серверы находятся в пределах нескольких миллисекунд друг от друга. Трюк теперь состоит в том, чтобы выяснить, как реплицировать механизм планирования, подобный cron, который использует Cassandra для хранения запланированных задач, позволяя приложению запрашивать на основе интервала для выполнения заданий. – somecallmemike