I understand that with the distribution of event-based systems, we can achieve the final consistency, in any case ... How not to let more places be booked than ours? Especially in terms of many concurrent requests?
All events are closed to the team executing them until the record book recognizes a successful record. Thus, we do not report events at all, and we do not report this to the caller, not knowing that our version of “what happened next” was adopted in the record book.
Recording events is similar to comparing and swapping the tail pointer in an aggregate story. If the other team changed the pointer to the tail during operation, our swap failed and we must reduce / redo / fail.
In practice, this is usually realized if the write-to-write command includes the expected position for writing. (Example: ES-ExpectedVersion in GES).
It is expected that the record book will reject the record if the expected position is in the wrong place. Think of a position as a unique key in a table in a DBMS, and you have the right idea.
This means that in fact the recording in the event flow is really consistent - the recording book only allows recording if the position you are writing is correct, which means that the position has not changed since the moment you copied the story that you downloaded.
It is typical for teams to read event streams directly from a write book, rather than ultimately consistent reading models.
It may happen that n-AggregateRoots will be filled with the same number of reserved seats, which means that checking in the backup method will not help. Then n-AggregateRoots throws a successful reservation event.
Each status bit must be controlled by one cumulative root. You can have n different copies of this root, which all compete to write in the same story, but the comparison and swap operation allows only one winner, which ensures that the “population” has a single internally consistent history.