Сообщите о мошенничестве, если избиратель попытается проголосовать дважды - PullRequest
0 голосов
/ 08 марта 2019

У меня есть список {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).

...