【Опис проблеми】 Коли користувачі користуються додатком, сторінка дуже застрягає, і вони клікають випадково, оскільки інтерфейс не робить повторні надсилання, у сервісному рівні буде кілька однакових запитів: один потік не вставляється як завершений, а інший — порожній. Тож я також вставив одну. Спочатку у всіх була одна, але у продавця було три, що призводило до помилок бізнес-логіки. Для обробки шкідливих подань це може здійснюватися на фронтенді, а також існують зрілі рішення у бек-енді.
【Solution】1. Використовуйте обмеження на унікальність для розв'язання проблеми ідемпотентності транзакцій, встановлюйте обмеження унікальності, і якщо існує сценарій повторних комітів, винятки з обмежень унікальності будуть кинуті на рівні бази даних, і бізнес-логіка не буде знищена. Обмеження на унікальність композиції кількох полів також є прийнятними.
Вхід за гіперпосиланням видно.
Вищезазначене призначене для створення налаштувань проти дублювання на рівні бази даних.
2. Реалізувати налаштування проти дублювання на рівні коду. Часто кажуть, що обмеження на унікальність бази даних впливає на ефективність вставки даних, оскільки кожна вставка вимагає оцінки на рівні бази даних. Отже, судячи з рівня коду, на рівні коду загальна практика — спочатку вибирати, а потім вставляти, але якщо є сценарій високої паралелності, повторювані коміти все одно відбуваються. Ви можете додати синхронізоване до логічного коду, щоб у сценаріях з високим рівнем часу спочатку вибрати, а потім вставити — діяти. Але ефективність не висока, і паралель стає послідовною. Можна використовувати механізм замка DCL. (Чи помітили ви, що метод створення одного об'єкта в режимі копіювання дуже схожий — спочатку оцінюйте, чи існує об'єкт, якщо його немає — створіть його, інакше не створюйте), природний механізм блокування DCL є ефективнішим.
#分布式锁 Для вирішення проблеми також можна використовувати розподілені замки, які часто застосовують Redis та Zookeeper. У цьому розділі пояснюється, як реалізувати розподілені блокування за допомогою Redis. У Redis є операція setNx: якщо її немає, це встановлене значення, і повертається 1. Якщо він існує, він не встановлюється і повертає 0. Використовуючи функцію однопоточності Redis, сцена з високою паралелізацією перетворюється на серіал через чергу повідомлень. Однак у розподілених замках є свої недоліки, тому потрібно бути уважним.
Вхід за гіперпосиланням видно. 3. Механізм MVCC?
3.1 Що таке механізм MVCC? MVCC — це багатоверсійний механізм керування конкурентністю.
3.2 Які проблеми можна вирішити? Механізм блокування може керувати одночасними операціями, але накладні витрати на систему значні, і MVCC у більшості випадків може замінити блокування рівня рядів, що зменшує накладні витрати системи та покращує продуктивність.
Вхід за гіперпосиланням видно.
4. Існує також проблема ідемпотентності у повідомленнях
Наприклад, як запобігти повторному споживанню повідомлень?
У повідомленому проміжному програмному забезпеченні в MQ це потрібно розуміти і розуміти.
|