【Описание задачи】 Когда пользователи используют приложение, страница сильно застревает, и они кликают случайным образом, потому что интерфейс не выполняет повторные отправки, на уровне сервиса один поток не вставляется как завершённый, а другой проверяет — пустой. Поэтому я тоже вставил одного. Изначально у всех была одна, но у продавца было три, что приводило к ошибкам в бизнес-логике. Обработка вредоносных заявок может осуществляться на фронтенде, а также существуют зрелые решения в бэкенде.
【Solution】1. Использовать ограничения уникальности для решения задачи идемпотентности транзакций, устанавливать ограничения уникальности, и если существует сценарий повторных коммитов, исключения из ограничений уникальности будут использоваться на уровне базы данных, и бизнес-логика не будет уничтожена. Ограничения на уникальность композиции нескольких полей также допустимы.
Вход по гиперссылке виден.
Вышеописанное предназначено для создания настроек против дублирования на уровне базы данных.
2. Реализовать настройки против дублирования на уровне кода. Часто говорят, что ограничение уникальности базы данных влияет на эффективность вставки данных, поскольку каждая вставка требует оценки на уровне базы данных. Поэтому, судя по уровню кода, распространённая практика на уровне кода — сначала выбирать, а затем вставлять, но при высокой параллелности повторяются повторные коммиты. Можно добавить синхронизированное в логический код, чтобы в условиях высокой параллелности сначала выбрать, а затем вступить в силу вставку. Но эффективность невысока, и параллель становится последовательной. Может использоваться механизм замка DCL. (Вы заметили, что способ создания одного объекта в режиме копирования очень похож — сначала судите, существует ли объект, если нет — создайте, иначе не создавайте), естественный механизм блокировки DCL более эффективен.
#分布式锁 Распределённые замки также могут решать проблему, что часто применяется в Redis и Zookeeper. В этом разделе объясняется, как реализовать распределённые блокировки с помощью Redis. В Redis есть операция команды setNx: если её нет, это значение множества, и возвращается 1. Если он существует, он не устанавливается и возвращает 0. Используя функцию однопоточности Redis, сцена высокой параллелности превращается в последовательный через очередь сообщений. Однако в распределенных замках есть свои подводные камни, поэтому нужно внимательно следить.
Вход по гиперссылке виден. 3. Механизм MVCC?
3.1 Что такое механизм MVCC? MVCC — это многовариантный механизм управления параллелизмом.
3.2 Какие проблемы можно решить? Механизм блокировки может управлять параллельными операциями, но накладные расходы системы значительны, и MVCC в большинстве случаев может заменить блокировки на уровне рядов, что снижает накладные расходы системы и повышает производительность.
Вход по гиперссылке виден.
4. Существует также проблема идемпотентности в сообщениях
Например, как предотвратить повторное потребление сообщений?
В промежуточном программном обеспечении сообщений в MQ это необходимо понимать и понимать.
|