Как масштабировать агрегаты?
Каждый фрагмент информации в системе имеет единый логический авторитет.Множество прав доступа к одному фрагменту данных приводит вас к конфликту.Вы масштабируете записи, создавая меньшие непересекающиеся границы - каждый орган имеет меньшую область ответственности
To borrow from your example, an example of smaller responsibilities would
be to shift from one aggregate for all ORDERS to one aggregate for _each_
ORDER.
It's analogous to the difference between having a key value store with
all ORDERS stored in a document under one key, vs each ORDER being stored
using its own key.
Чтения безопасны, вы можете масштабировать их с несколькими копиями.Однако эти копии только в конечном итоге согласуются.Это означает, что если вы спросите "какова цена предложения FCOJ сейчас ?"Вы можете получить разные ответы от каждой копии.В качестве альтернативы, если вы спросите "какова была цена предложения FCOJ в 10:09:02?"тогда каждая копия либо даст вам один ответ, либо скажет «я еще не знаю».
Но если гранулярность уже составляет одну команду на агрегат, то, на мой взгляд, это не очень часто возможно, а у вас действительно много одновременных обращений, как это решить?Как распределить нагрузку и максимально остаться без конфликта?
Грубый набросок - каждый агрегат сохраняется с помощью ключа, который может быть вычислен из содержимого командного сообщения.Обновление агрегата достигается с помощью операции сравнения и замены с использованием этого ключа.
Acquire a message
Compute the storage key
Load a versioned representation from storage
Compute a new versioned representation
Store.compare and swap the new representation for the old
Чтобы обеспечить дополнительную пропускную способность трафика, вы добавляете больше вычислений без сохранения состояния.
Чтобы обеспечить пропускную способность хранилища,Вы распределяете ключи по нескольким устройствам хранения.
Для группировки сообщений можно использовать уровень маршрутизации - маршрутизаторы используют те же вычисления ключей хранения, что и раньше, но используют их для выбора места в вычислительной ферме для пересылкисообщение.Затем компьютер может проверить каждую партию сообщений, которую он получает, на наличие дублирующих ключей, и обрабатывать эти сообщения вместе (торгуя дополнительными вычислениями, чтобы уменьшить количество сравнений и обменов).
Протоколы здравых сообщений важны;см. Марка де Грауу. Никому не нужен надежный обмен сообщениями .