Я разрабатываю мультитенантное приложение Azure Service Fabric, в котором мы будем хранить данные о событиях в больших двоичных объектах Azure, предназначенных только для добавления.
Будет два вида капель; объединить большие двоичные объекты (по одному на каждого клиента); и экземпляры больших двоичных объектов (по одному на каждый "объект", принадлежащий арендатору - их будет более 100 тыс. на каждого арендатора)
Для каждого экземпляра большого двоичного объекта будет один писатель. Этот модуль записи отслеживает позицию последнего записанного большого двоичного объекта и тем самым может гарантировать (с помощью условной записи), что ни один другой модуль записи не записал в этот большой двоичный объект с момента последней успешной записи. Это важный аспект, который мы будем использовать для обеспечения строгой согласованности для каждого экземпляра.
Однако все записи в экземплярный большой двоичный объект должны также в конечном итоге (но как можно скорее) достигать единственного (для каждого клиента) слияния blob.
При нормальной работе я бы хотел, чтобы эти записи слиянием происходили в течение ~ 100 мс.
У меня вопрос о том, как лучше всего реализовать эту функцию гарантированной двойной записи:
Реализация должна гарантировать, что данные, записанные в экземплярный большой двоичный объект, в конечном итоге также будут записаны в соответствующий слитный большой двоичный объект ровно один раз.
Следует избегать следующих несоответствий:
Данные успешно записываются в большой двоичный объект экземпляра, но никогда не записываются в соответствующий большой двоичный объект слияния.
Данные записываются в большой двоичный объект слияния более одного раза.