次の事実を考慮して、クラスター環境でイベントの再現可能な順序付けを可能にするアルゴリズムを実装する既存のオープンソース Java API (おそらく、より優れた製品の一部として) はありますか?
1) There are N sources of events, each with a unique ID.
2) Each event produced has an ID/timestamp, which, together with
its source ID, makes it uniquely identifiable.
3) The ids can be used to sort the events.
4) There are M application servers receiving those events.
M is normally 3.
5) The events can arrive at any one or more of the application
servers, in no specific order.
6) The events are processed in batches.
7) The servers have to agree for each batch on the list of events
to process.
8) The event each have earliest and latest batch ID in which they
must be processed.
9) They must not be processed earlier, and are "failed" if they
cannot be processed before the deadline.
10) The batches are based on the real clock time. For example,
one batch per second.
11) The events of a batch are processed when 2 of the 3 servers
agree on the list of events to process for that batch (quorum).
12) The "third" server then has to wait until it possesses all the
required events before it can process that batch too.
13) Once an event was processed or failed, the source has to be
informed.
14) [EDIT] Events from one source must be processed (or failed) in
the order of their ID/timestamp, but there is no causality
between different sources.
あまり形式的ではありませんが、イベントを受信するサーバーがあります。それらは同じ初期状態から始まり、どのイベントをどの順序で処理するかについて合意することで同期を保つ必要があります。幸いなことに、イベントはできるだけ早く処理するのではなく、「少しずつ」処理する必要があるため、締め切り前にサーバーに同意してもらう時間があります。しかし、それが実際にアルゴリズムに実際の違いをもたらすかどうかはわかりません. また、すべてのサーバーがすべてのバッチに同意する場合、それらは常に同期されるため、照会時に一貫したビューが表示されます。
私は Java API に最も満足していますが、Java から呼び出すことができれば別のものを受け入れます。また、オープンソース API がなくても明確なアルゴリズムがある場合は、それを答えとして自分で実装しようとします。