Концентраторы событий Azure - пользовательский потребитель с контрольными точками SQL

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

Большинство процессоров записывают данные в базы данных SQL Server, и эти записи заключаются в транзакциях.

Концентраторы событий позиционируются как канал связи с возможностью однократного использования, поэтому следует ожидать дублирования сообщений. EventProcessorHost - рекомендуемый API на стороне чтения, который автоматизирует управление арендой и создание контрольных точек с помощью хранилища BLOB-объектов Azure.

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

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


person Mikhail Shilkov    schedule 16.04.2017    source источник


Ответы (2)


Хранилище Azure - это встроенное решение, но мы этим не ограничиваемся. Если большинство ваших процессоров записывают данные в базы данных SQL Server, и вы не хотите иметь контрольные точки хранилища EventProcessorHost в хранилище Azure (для чего требуется учетная запись хранения), на мой взгляд, сохранение контрольных точек в вашей базе данных SQL, что обеспечивает простой способ сделать обрабатывать события и управлять контрольными точками транзакционно, это было бы хорошим решением.

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

person Fei Han    schedule 17.04.2017
comment
Спасибо, Фред. Если я реализую этот интерфейс, смогу ли я повторно использовать другие части EventProcessorHost? Или в чем преимущество перед пользовательским кодом? Есть ли соответствующие образцы в Интернете? - person Mikhail Shilkov; 17.04.2017

По совету Фреда мы реализовали собственный диспетчер контрольных точек на основе таблицы в SQL Server. Вы можете найти образец кода здесь.

Эта реализация прекрасно сочетается с EventProcessorHost. Нам также пришлось реализовать ILeaseManager, потому что они сильно связаны в реализации по умолчанию.

В моем сообщении в блоге я описал свой мотивация для такой реализации на основе SQL и общий взгляд на решение в целом.

person Mikhail Shilkov    schedule 29.05.2017
comment
Отличное решение. Не могли бы вы рассказать подробнее о том, как вы реализовали ILeaseManager? Заботились ли вы о балансировке рабочей нагрузки в будущем (как это делают при первоначальном управлении арендой)? - person Kuba Wyrostek; 04.04.2018