Кто-то дал мне задачу решить, и, поскольку я не уверен насчет того, правильный или нет мой ответ, я хотел бы, чтобы вы, ребята, дали мне обратную связь.
Задача: ГОЛОСОВАНИЕ ПРОБЛЕМА
![enter image description here](https://i.stack.imgur.com/F4NwL.png)
В приведенном выше примере демонстрируется инфраструктура, состоящая из сервера базы данных, 2 веб-хостов и 1 LoadBalancer, который поддерживает общенациональные выборы приложение, в котором пользователи могут голосовать за кандидатов через inte rnet.
Факты:
- Есть 5 кандидатов для голосования и в общей сложности 100000 голосующих пользователей.
- База данных может хранить только 1 запись одновременно и не поддерживает транзакции. Если это значение превышено, база данных немедленно отвечает кодом ошибки = 68282.
- Когда пользователь голосует, он должен получить немедленный ответ о том, что голос принят.
- Может быть 100 + пользователи голосуют одновременно.
Проблема:
Клиент жалуется, что его пользователи получают код ошибки = 68282 при попытке проголосовать. Разработайте подробное решение без изменения базовой базы данных, которая может выдержать требуемую нагрузку, не возвращая ошибки пользователям.
Мои решения:
- Я думал (не уверен, если возможно), если был Можно создать что-то вроде FIFO или очереди для базы данных, чтобы получать запросы, но обрабатывать ТОЛЬКО 1 за раз. Проблема здесь в том, что я не знаю, возможно ли такое.
- Создание эксклюзивных блокировок (X) для блокировки операций записи, и если какой-либо запрос приходит, и блокировка уже с другим запросом, он будет ждать, пока ресурс доступен для него.
- Использовать сериализацию с последовательным смещением, другими словами, обрабатывать запросы по одному.
Но, как я уже сказал, я не уверен, что мой ответ предложения правильные ... есть ли лучшие ответы на это? Я совершенно не прав?