Концепция идемпотентности RabbitMQ и основные решения в отрасли

RabbitMQ

1. Что такое идемпотентность

Вы можете обратиться к механизму оптимистической блокировки базы данных, например, выполнить оператор SQL для обновления инвентаризации.В параллельном сценарии для повышения производительности и надежности данных версия на момент запроса будет добавлена ​​во время обновления, а информация о версии будет обновлено. Может быть, вы хотите оперировать чем-то одним, эта операция может выполняться сотни или тысячи раз, но результат операции один и тот же, это идемпотентность.

2. Гарантия идемпотентности на стороне потребителя

В пиковый период бизнеса, вызванного массовыми заказами, производственная сторона может иметь повторяющиеся сообщения.В это время потребительская сторона должна достичь идемпотентности, что означает, что наши сообщения никогда не будут потребляться несколько раз, даже если мы их получим. сообщение.

Основная идемпотентность в отрасли имеет две операции:
1.唯一 ID + 指纹码 机制,利用数据库主键去重

2.利用redis的原子性去实现

3. Механизм уникального идентификатора + кода отпечатка пальца

Уникальный ID должен понимать каждый, поэтому больше говорить не буду, зачем вообще нужен дактилоскопический код? Это необходимо для мгновенного выполнения частых операций пользователей. Этот код отпечатка пальца может быть единственным информационным кодом, предоставляемым некоторыми нашими правилами или временными метками, а также другими службами. Он не обязательно генерируется нашей системой. Бизнес-правила объединены вместе, но должна быть гарантирована уникальность, а затем оператор запроса используется для определения того, существует ли идентификатор в базе данных.

Преимущество в том, что реализация проста, просто сплайсинг, а затем запрос, чтобы определить, повторяется ли он.

Недостатком является то, что при высоком уровне параллелизма, если это одна база данных, возникнет узкое место в производительности записи.

решение: Подбаза данных и подтаблица на основе идентификатора, выполнение алгоритмической маршрутизации по идентификатору и попадание в конкретную базу данных, а затем, когда этот идентификатор придет во второй раз, он вернется к этой базе данных, на этот раз то же самое, что и когда я проверил дублирующую базу данных. Алгоритмическая маршрутизация используется для преобразования идемпотентности одной базы данных в идемпотентность нескольких баз данных, чтобы разделить давление трафика данных и повысить производительность.

В-четвертых, используйте атомарность Redis для достижения

Я полагаю, что все знают атомарную операцию Redis, поэтому мне не нужно слишком подробно о ней рассказывать.

Есть два момента, которые следует учитывать при использовании атомарности Redis.

Во-первых, следует ли сбрасывать данные в базу данных. Синхронизация между базой данных и кешем должна быть операцией записи.Сначала писать redis или сначала писать в базу данных — это вопрос, который включает в себя проблему обновления и устранения кеша.

Во-вторых, если он не хранится в библиотеке, он будет храниться в кеше.Как задать стратегию синхронизации таймингов? Если оно не хранится в библиотеке, для обеспечения копии сообщения можно использовать такие стратегии, как двойное кэширование.Для конкретной синхронизации можно использовать инструмент синхронизации, такой как шина данных.