【Probleemi kirjeldus】 Kui kasutajad kasutavad APP-i, jääb leht väga kinni ja nad klikkivad juhuslikult, sest liides ei tee korduvaid esitamisi, tekib mitu identset päringut, teenusekihis ei lisa üks lõim täielikuks ja teine lõim kontrollib tühi. Nii et panin ka ühe sisse. Alguses oli kõigil üks, kuid müüjal oli kolm, mis põhjustas ärilisi loogikavigu. Pahatahtlike esituste töötlemiseks saab seda teha front-end osas ning ka küpseid lahendusi tagapool.
【Lahendus】1. Kasuta unikaalsuspiiranguid tehingute idempotentsuse probleemi lahendamiseks, sea unikaalsuspiirangud ning kui esineb korduvate commit'ide stsenaarium, siis erandid unikaalsuspiirangutele visatakse andmebaasi tasemele ning äriloogikat ei hävitata. Mitme välja koostamise unikaalsuspiirangud on samuti aktsepteeritavad.
Hüperlingi sisselogimine on nähtav.
Ülaltoodud meetod on mõeldud andmebaasi tasemel duplikaatide vastaste seadistuste loomiseks.
2. Rakenda dubleerimisvastased seaded kooditasemel. Sageli öeldakse, et andmebaasi unikaalsuse piirang mõjutab andmete sisestamise efektiivsust, sest iga lisamine nõuab hinnangut andmebaasi tasandil. Seega, kooditaseme järgi otsustades, on kooditasemel tavapärane praktika valida esmalt ja seejärel sisestada, kuid kui esineb kõrge samaaegsuse stsenaarium, esineb ikkagi korduvaid commit'e. Saad lisada loogikakoodile sünkroniseeritud, nii et kõrge samaaegsuse korral vali esmalt ja siis insert hakkab kehtima. Aga efektiivsus ei ole kõrge ja paralleel muutub seriaalseks. Võib kasutada DCL-lukumehhanismi. (Kas oled märganud, et ühe objekti loomise meetod kopeerimisjuhtumi režiimis on väga sarnane, esmalt otsusta, kas objekt eksisteerib, kui seda ei ole, loo see, muidu ära loo seda), loomulik DCL-lukustusmehhanism on tõhusam.
#分布式锁 Probleemi lahendamiseks saab kasutada ka hajutatud lukke, mida kasutavad sageli Redis ja Zookeeper. See osa selgitab, kuidas rakendada hajutatud lukke Redis'i abil. Redis'is on olemas setNx käsuoperatsioon, kui seda ei eksisteeri, on see seatud väärtus ja tagastatakse 1. Kui see eksisteerib, siis see ei määra ja tagastab väärtuse 0. Kasutades Redis'i ühe lõime funktsiooni, muudetakse kõrge paralleelsuse stseen sõnumijärjekorra kaudu jadamiseks. Kuid hajutatud lukkudes on lõkse, seega pead tähelepanelik olema.
Hüperlingi sisselogimine on nähtav. 3. MVCC mehhanism?
3.1 Mis on MVCC mehhanism? MVCC on mitme versiooniga samaaegsuse juhtimismehhanism.
3.2 Milliseid probleeme saab lahendada? Lukustusmehhanism suudab kontrollida samaaegseid operatsioone, kuid selle süsteemi üldkoormus on suur ning MVCC saab enamasti asendada reataseme lukke, mis vähendab süsteemi üldkoormust ja parandab jõudlust.
Hüperlingi sisselogimine on nähtav.
4. Sõnumites esineb ka idempotentsuse probleem
Näiteks, kuidas vältida sõnumite korduvat tarbimist?
MQ sõnumite vahendustarkvaras tuleb neid mõista ja mõista.
|