【Problēmas apraksts】 Kad lietotāji izmanto APP, lapa ir ļoti iestrēgusi, un viņi noklikšķinās nejauši, jo saskarne neveic atkārtotus iesniegumus, pakalpojuma slānī būs vairāki identiski pieprasījumi, viens pavediens netiek ievietots pilnīgs, bet otrs pavediens tiek pārbaudīts, tukšs. Tāpēc es arī ievietoju vienu. Sākotnēji visiem bija viens, bet pārdevējam bija trīs, kā rezultātā radās biznesa loģikas kļūdas. Ļaunprātīgu iesniegumu apstrādei to var izdarīt priekšgalā, un aizmugurējā daļā var būt arī nobrieduši risinājumi.
【Risinājums】1. Izmantojiet unikalitātes ierobežojumus, lai atrisinātu darījumu idempotences problēmu, iestatiet unikalitātes ierobežojumus, un, ja ir atkārtotu saistību scenārijs, datu bāzes līmenī tiks izmesti unikalitātes ierobežojumu izņēmumi, un biznesa loģika netiks iznīcināta. Ir pieļaujami arī unikalitātes ierobežojumi vairāku lauku sastāvam.
Hipersaites pieteikšanās ir redzama.
Iepriekš minētais ir veikt anti-dublikātu iestatījumus datu bāzes līmenī.
2. Realizējiet dublēšanas novēršanas iestatījumus koda līmenī. Daudzas reizes tiek teikts, ka datu bāzes unikalitātes ierobežojums ietekmēs datu ievietošanas efektivitāti, jo katrai ievietošanai ir nepieciešams spriedums datu bāzes līmenī. Tāpēc, spriežot pēc koda līmeņa, parastā prakse koda līmenī ir vispirms atlasīt un pēc tam ievietot, bet, ja ir augsts vienlaicīguma scenārijs, joprojām būs atkārtotas saistības. Loģiskajam kodam var pievienot sinhronizētu, lai augstas vienlaicīgības scenārijos vispirms atlasītu un pēc tam stātos spēkā ievietošana. Bet efektivitāte nav augsta, un paralēle kļūst sērijveida. Var izmantot DCL bloķēšanas mehānismu. (Vai esat atklājis, ka viena objekta izveides metode kopēšanas lietas režīmā ir ļoti līdzīga, vispirms spriediet, vai objekts pastāv, ja tas nepastāv, izveidojiet to, pretējā gadījumā neveidojiet to), dabiskais DCL bloķēšanas mehānisms ir efektīvāks.
#分布式锁 Problēmas risināšanai var izmantot arī izkliedētas slēdzenes, ko parasti izmanto Redis un Zookeeper. Šajā sadaļā ir paskaidrots, kā ieviest sadalītās slēdzenes, izmantojot Redis. Redis ir komandas operācija setNx, ja tā nepastāv, tā ir iestatīta vērtība, un tiek atgriezts 1. Ja tas pastāv, tas netiek iestatīts un atgriež 0. Izmantojot Redis viena pavediena funkciju, augstas vienlaicīgības aina tiek pārvērsta par sēriju, izmantojot ziņojumu rindu. Tomēr sadalītajās slēdzenēs ir nepilnības, tāpēc jums jāpievērš uzmanība.
Hipersaites pieteikšanās ir redzama. 3. MVCC mehānisms?
3.1 Kas ir MVCC mehānisms? MVCC ir vairāku versiju vienlaicīguma kontroles mehānisms.
3.2 Kādas problēmas var atrisināt? Bloķēšanas mehānisms var kontrolēt vienlaicīgas darbības, taču tā sistēmas pieskaitāmās izmaksas ir lielas, un MVCC vairumā gadījumu var aizstāt rindas līmeņa slēdzenes, kas var samazināt sistēmas pieskaitāmās izmaksas un uzlabot veiktspēju.
Hipersaites pieteikšanās ir redzama.
4. Ziņojumos ir arī idempotences problēma
Piemēram, kā novērst atkārtotu ziņojumu patēriņu?
MQ ziņojuma starpprogrammatūrā tie ir jāsaprot un jāsaprot.
|