У меня есть список {candidId, voterId} в качестве входящего запроса к " backendService ".
Этот бэкэнд-сервис проверяет, не существует ли уже voterIDпроголосовали за любой из кандидатов, если это так, он будет увеличивать число кандидатов в кэше, как показано ниже:
|CandidateId |считать |
|ABC |5 |
|XYZ |10 |
|МНО |100 |
Проблема с вышеуказанным подходом заключается в том, что мы увеличиваем "backendService" до 3 - 4 экземпляров, и тот же voterID пытается голосовать за многих кандидатов, как показано ниже входящего запроса, и все нижеприведенное происходит в ОДНОМ ВРЕМЯ:
{ candidateId : 1, voterId : "ABC"}
{ candidateId : 2, voterId : "ABC"}
{ candidateId : 3, voterId : "ABC"}
Каждый из «backendService» выберет один из вышеупомянутых запросов для обработки.
В этом случае все 3 экземпляра проверяют, что VoterID еще не проголосовал ни за одного кандидата в кэше. в то же время (где хранится идентификатор избирателя, который уже проголосовал там), и тогда все 3 экземпляра службы будут одновременно обновлять счет для всех 3 кандидатов, которые были брошеныпо тому же voterID в кеше, что неверно.
Я ищу решение о том, как избежать таких случаев.
В настоящее время все детали хранятся в распределенном кеше (REDIS).