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