Последовательная и многопоточная обработка учетных событий.

Мы работаем над механизмом учета событий, и до сих пор все делаем последовательно / последовательно.

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

Есть ли безопасный способ реализовать механизм учета обработки многопоточных событий, не беспокоясь о целостности и согласованности финансовых данных?

Или просто лучше не рисковать и использовать последовательный / последовательный подход?

3 ответа

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

Вам уже удалось создать механизм учета, который удовлетворяет вашим требованиям к целостности и согласованности финансовых данных. При этом должно быть возможным распараллелить обработку.

Вам нужно

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

Обычно компонент агрегатора становится узким местом в вашей параллельной архитектуре.

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

Практически все телекоммуникационные биллинговые системы масштабируются путем многопоточности или многопроцессорности, так что это определенно разумный путь вперед.

Вы можете использовать несколько одновременных транзакций, если вы следуете правилам

проверять, выписываться
en.wikipedia.org/wiki/Atomicity_(database_systems)
en.wikipedia.org/wiki/ACID
en.wikipedia.org/wiki/Record_locking

или прочитайте все соответствующие статьи в этом разделе
http://en.wikipedia.org/wiki/Category:Transaction_processing

с правильным уровнем блокировки для того, что вы делаете

Другие вопросы по тегам