Кажется, вы неправильно понимаете концепцию сегментирования кластера Akka, позвольте мне объяснить на примере.
Допустим, ваша служба отвечает за ответы с профилями пользователей на запросы. А чтобы получить чрезвычайно низкую задержку, вы решаете использовать акторов Akka для кэширования профилей пользователей в памяти вместо того, чтобы запрашивать БД по запросу. KB, вы можете без проблем хранить все 10 пользовательских профилей в одном актере, и вам точно не понадобится сегментирование кластера. Однако, если у вас 10 миллионов пользователей, вероятно, 10 миллионов пользовательских профилей не поместятся в память одного актора, также это будет дорого, если актор выйдет из строя, поскольку это означает, что вам понадобится большой запрос к БД, чтобы вернуть эти данные. от настойчивости.
В этом сценарии сегментирование кластера подходит. У вас будет 10 миллионов акторов Akka, распределенных по вашему кластеру, и каждый актор хранит только 1 профиль пользователя. Таким образом, GetUserProfile(userProfileId = 123)
не даст вам другого ответа - он всегда будет перенаправлен к действующему субъекту, который содержит профиль пользователя для пользователя 123, поэтому ответ всегда будет одинаковым.
Как работает маршрутизация? Отметьте extractShardId
и extractEntityId
в do c