【Problémaleírás】 Amikor a felhasználók az APP-ot használják, az oldal nagyon elakad, és véletlenszerűen kattint, mert a felület nem végez ismétlődő beküldéseket, több azonos kérés történik, a szolgáltatási rétegben az egyik szál nem kerül be, hogy befejezett, a másik pedig üres lesz. Ezért behelyeztem egyet is. Eredetileg mindenkinek volt egy, de egy értékesítőnek három, ami üzleti logikai hibákhoz vezetett. A rosszindulatú beküldések feldolgozása a front-end részben is megvalósítható, és a háttérben is lehetnek érett megoldások.
【Megoldás】1. Használjunk egyediségi korlátokat a tranzakciók idempotencia-problémájának megoldására, állítsunk be egyediségi korlátokat, és ha ismétlődő commit-ek közül adódik elő, az egyediségi korlátozások kivételei az adatbázis szintjén kerülnek elő, és az üzleti logika nem pusztul meg. Több mező összetételére vonatkozó egyediségi korlátok is elfogadhatók.
A hiperlink bejelentkezés látható.
A fentiek az adatbázis szintjén duplikátum elleni beállításokat hoznak létre.
2. Valósítsd meg a duplikációellenes beállításokat a kód szintjén. Sokszor mondják, hogy az adatbázis egyediségkorlátozása befolyásolja az adatbehelyezés hatékonyságát, mivel minden beillesztéshez adatbázis szinten ítélkezés szükséges. Ezért, a kódszint alapján a kód szintjén a szokásos gyakorlat, hogy először kiválasztják, majd beillesztenek, de ha magas a párhuzamosság esetén, akkor is ismétlődő commit-ek lesznek. Szinkronizált logikai kódot adhatsz hozzá, így magas egyidejű állapotban először válassz, majd beilleszteni, akkor lép életbe. De a hatékonyság nem magas, és a párhuzam sorozatossá válik. Használható a DCL zármechanizmus. (Tapasztaltad már, hogy egyetlen objektum létrehozásának módja a másolási eset módban nagyon hasonló, először ítéld meg, hogy létezik-e az objektum, ha nem létezik, hozd létre, vagy egyébként ne hozd létre), a természetes DCL zármechanizmus hatékonyabb.
#分布式锁 A probléma megoldására elosztott zárak is használhatók, amelyeket gyakran használnak a Redis és a Zookeeper. Ez a rész elmagyarázza, hogyan lehet elosztott zárokat implementálni Redis segítségével. A Redisben van egy setNx parancsművelet, ha nem létezik, akkor egy halmazérték, és az 1 visszatér. Ha létezik, nem állít be, és 0-t ad vissza. A Redis egyszálas funkcióját kihasználva a magas párhuzamos jelenet az üzenetsoron keresztül sorozatossá alakul. Azonban vannak buktatói a szétosztott zárakban, ezért figyelned kell.
A hiperlink bejelentkezés látható. 3. MVCC mechanizmus?
3.1 Mi az MVCC mechanizmus? Az MVCC egy többverziós egyidejű vezérlő mechanizmus.
3.2 Milyen problémákat lehet megoldani? A zárolási mechanizmus képes az egyidejű műveleteket irányítani, de a rendszer túlterhelése nagy, és az MVCC a legtöbb esetben helyettesítheti a sorszintű záratokat, ami csökkentheti a rendszer túlterhelését és javíthatja a teljesítményt.
A hiperlink bejelentkezés látható.
4. Az üzenetekben is fennáll az idempotencia problémája
Például, hogyan lehet megakadályozni az ismétlődő üzenetfogyasztást?
Az MQ üzenetközmű szoftverében ezeket meg kell érteni és érteni.
|