Какой лучший питонический способ связи между распространенными сервисами / машинами Unix? - PullRequest
0 голосов
/ 10 марта 2011

Mornink!

Мне нужно спроектировать, написать и внедрить широкую систему, состоящую из нескольких серверов Unix, выполняющих разные роли и запускающих различные службы. Система должна быть пуленепробиваемой, надежной и быстрой. Да, знаю. ;) Поскольку я не знаю, как решить эту задачу, я решил спросить вас о вашем мнении, прежде чем покинуть этап проектирования. Вот как должен протекать рабочий процесс:

  • пользователи взаимодействуют с веб-сайтом, где они устанавливают требования к обслуживанию
  • это требование сохраняется (база данных?), И в центральную систему (кластеризовано) отправляется какое-то сообщение о новом требовании в базе данных / очереди
  • центральная система принимает запрос и отправляет сигналы в другие системы (кластеры) для выполнения своих обязанностей (части настройки требуемой услуги)
  • по завершении они отправляют в центральную систему или на веб-сайт сообщение о том, что услуга в настоящее время обслуживается

Теперь, каков современный, надежный, чистый и эффективный способ хранения этих запросов в какой-то очереди и их выполнения? Должен ли я посылать какие-либо сигналы, или я должен позволить всем подсистемам проверять очередь / БД любого рода для новых данных? Что это может быть за очередь, база данных? Как бороться с сообщениями? Я думал об открытии одного tcp-соединения и отправке данных по нему вместе с командами, запускающими действия / функции на другом конце, но при более внимательном рассмотрении должен быть другой, лучший способ. Так что я нашел Spring Python, который был раскритикован за то, что он 90-х годов.

Я знаю, что это очень широкий вопрос, но я действительно надеюсь, что вы можете помочь мне обернуть мою голову вокруг этого дизайна и не сделать что-то глупое здесь:)

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Существует ряд технологий очереди сообщений, которые дружественны к Python и могут быть достаточно хорошими.Лучшие два, о которых я знаю, это ActiveMQ и RabbitMQ , которые оба хорошо работают с Python, плюс я обнаружил это сравнение , которое утверждает, что ActiveMQ в настоящее время (по состоянию на18 месяцев назад!) Превосходит RabbitMQ.

0 голосов
/ 10 марта 2011

Некоторые общие идеи для вас: у вас может быть подход мастер-клиент.Запросы будут вставлены в мастер, хранятся в базе данных.Мастер знает состояние каждого клиента (тот же дБ).Всякий раз, когда есть запрос, мастер перенаправляет его на бесплатный клиент.Клиент сообщает о завершении задачи (включая ответы, если таковые имеются), что позволяет ему получать новую задачу от мастера (это устраняет необходимость в пуле).Связь может быть осуществлена ​​с использованием веб-сервисов.HTTP-запрос / пост должен решить все случаи.На самом деле нет необходимости опускаться до уровня TCP.

Просто общие идеи, надеюсь, они полезны.

...