Какие элементы необходимы для реализации удаленной системы, управляемой событиями?- необходим обзор - PullRequest
3 голосов
/ 27 января 2011

Я пытаюсь разработать систему, управляемую событиями, в которой элементы системы обмениваются данными, генерируя события, на которые отвечают другие компоненты системы.Предполагается, что компоненты будут независимы друг от друга - или настолько независимы, насколько я могу их сделать.Система изначально будет реализована в Windows 7 и пишется на Delphi.Сгенерированные события будут сгенерированы кодом Delphi.Я понимаю, как реализовать систему типа, описанного на одной машине.

Я хочу спроектировать систему так, чтобы ее можно было легко развернуть на разных архитектурах компьютеров, в частности, с различными компонентами, работающими на распределенной архитектуре,которая может отличаться от Windows 7. Система не требует взаимодействия с какими-либо внешними по отношению к ней системами.

Я попытался исследовать архитектуру, которую мне нужно рассмотреть, и рассмотрел вопросы, упомянутые ниже.,Похоже, что они указывают на использование именованных каналов в качестве механизма для связи между аппаратными средствами.В результате этих исследований я набросал следующее, чтобы описать свою систему: первая часть диаграммы - это система, в которой я ее разрабатываю;вторая часть, которую я вывел, мне понадобится для возможных будущих реализаций.Design sketch

Это приводит к следующим моментам:

  1. Можно ли передавать события через именованные каналы?
  2. Является ли это подходящей и разумной структурой для решения этой проблемы?
  3. Есть ли лучшие альтернативы?
  4. Что я забыл (на этом уровне детализации)?

Как реализовано программирование на основе событий? Как отправить строку из одного экземпляра моей программы Delphi в другой?

РЕДАКТИРОВАТЬ:

Я не дал баллывытекающих из ответа "Я даю дерьмо" достаточно внимания.Мои первоначальные ответы на его вопросы:

  1. Синхронный v Асинхронный - в основном асинхронный
  2. События всегда будут в очереди FIFO.
  3. Потеря соединения - не страшноважно - я могу позволить себе справиться с этим неукоснительно.
  4. Неограниченные очереди - отличный способ справиться с пройденными событиями (если они могут быть) - не стоит ожидать большого объема генерации событий.

Ответы [ 4 ]

3 голосов
/ 27 января 2011

Для максимальной гибкости развертывания (независимо от операционной системы) я рекомендую взглянуть на популярных брокеров сообщений с открытым исходным кодом, которые работают на платформе Java. Использование стандартных протоколов. они хорошо интегрируются с Delphi и другими языками программирования, могут использоваться с веб-приложениями и имеют большую установленную базу пользователей и активное сообщество.

Они довольно просты в установке и настройке за несколько минут, доступны бесплатные / коммерческие клиенты для Delphi.

Некоторые примеры:

Я также рекомендую книгу Мартина Фаулера "Шаблоны корпоративной интеграции" в качестве обзора и введения со множеством простых рецептов для решения конкретных проблем.


Обратите внимание, что я являюсь разработчиком коммерческих клиентов Delphi для корпоративных систем обмена сообщениями, таких как xmlBlaster , RabbitMQ, Amazon Simple Queue Service и три брокера, упомянутых выше.

2 голосов
/ 27 января 2011

Я могу ответить только за ваш пункт 4: Вы еще не решили, является ли событие синхронным или асинхронным. В асинхронном случае вы должны решить, что делать, когда приходят сообщения. У вас есть очередь? Насколько велика очередь? Можно ли брать произвольные элементы в очереди или это строго FIFO. Что произойдет, если сообщение будет потеряно (кто-то подключит сетевой кабель)?

В варианте синхронизации преимущество заключается в том, что вы получаете гарантии доставки, но что тогда вы делаете, когда соединения внезапно теряются?

Потеря соединения будет проблемой. Чем больше у вас машин, тем больше вероятность их появления. Решите, как вы с этим справитесь.

Другая проблема может заключаться в том, что вы делаете, если у вас большое событие и несколько маленьких. Порядок перевода FIFO или самый маленький-первый? Можно ли изменить события? Какие здесь предположения?


Кроме того, я часто взламываю Эрланга. В Erlang вся обработка событий уже решена, но это также означает, что для вас выбрана конкретная модель (асинхронная, неограниченные очереди, не гарантированная доставка, но обнаружение потери соединения).

1 голос
/ 27 января 2011

Предлагаю посмотреть на RabbitMQ, http://www.rabbitmq.com/. У него есть сервер и клиент.Просто нужно несколько оберточных кодов в Delphi, и вы готовы построить свою бизнес-логику

Cheers

0 голосов
/ 27 января 2011

Вероятно, это просто приложение для очереди сообщений.

http://msdn.microsoft.com/en-us/library/ms632590(v=vs.85).aspx

...