【Ongelman kuvaus】 Kun käyttäjät käyttävät APP:ta, sivu jumittuu pahasti ja he klikkaavat satunnaisesti, koska käyttöliittymä ei tee toistuvia lähetyksiä, vaan palvelukerroksessa on useita identtisiä pyyntöjä, yksi säie ei täytä ja toinen säie tarkistaa tyhjänä. Joten laitoin myös yhden. Alun perin kaikilla oli yksi, mutta myyjällä oli kolme, mikä johti liiketoimintalogiikkavirheisiin. Haitallisten lähetysten käsittelyssä se voidaan tehdä front-endissä, ja myös kypsiä ratkaisuja voi olla back-endissä.
【Ratkaisu】1. Käytä ainutlaatuisuusrajoitteita ratkaistaksesi transaktioiden idempotenttiongelman, aseta uniikkisusrajoitteet, ja jos esiintyy toistuvia commit-skenaarioita, poikkeuksia yksilöllisyysrajoitteista heitetään tietokantatasolle, eikä liiketoimintalogiikkaa tuhota. Myös yksikäsitteellisyysrajoitteet useiden kenttien yhdistämiselle ovat hyväksyttäviä.
Hyperlinkin kirjautuminen on näkyvissä.
Yllä oleva on tarkoitettu kaksoiskappaleiden estämiseen tarkoitetut asetukset tietokantatasolla.
2. Toteuta kopioinnineston asetukset kooditasolla. Monesti sanotaan, että tietokannan ainutlaatuisuusrajoite vaikuttaa datan syöttämisen tehokkuuteen, koska jokainen lisäys vaatii tietokantatason arvion. Siksi, kooditason perusteella, yleinen käytäntö kooditasolla on valita ensin ja sitten lisätä, mutta jos on korkea samanaikaisuus, sitoutumiset toistuvat edelleen. Voit lisätä synkronoidun logiikkakoodiin, jolloin korkean samanaikaisuuden tilanteissa valitse ensin ja sitten insert astuu voimaan. Mutta hyötysuhde ei ole korkea, ja rinnakkaisuudesta tulee sarjallinen. DCL-lukitusmekanismia voidaan käyttää. (Oletko huomannut, että yksittäisen objektin luomismenetelmä kopiointitapaustilassa on hyvin samanlainen, ensin arvioi, onko objekti olemassa, jos sitä ei ole, luo se, muuten älä luo sitä), luonnollinen DCL-lukitusmekanismi on tehokkaampi.
#分布式锁 Hajautettuja lukkoja voidaan myös käyttää ongelman ratkaisemiseen, joita käyttävät yleisesti Redis ja Zookeeper. Tässä osiossa selitetään, miten hajautettuja lukkoja toteutetaan Redisillä. Redisissä on setNx-komentotoiminto, jos sitä ei ole, se on asetettu arvo, ja arvo 1 palautuu. Jos se on olemassa, se ei asetu ja palauttaa 0. Hyödyntäen Redisin yksisäikeisyysominaisuutta, korkean samanaikaisuuden kohtaus muutetaan sarjaksi viestijonon kautta. Kuitenkin hajautuneissa lukkoissa on sudenkuoppia, joten sinun täytyy kiinnittää huomiota.
Hyperlinkin kirjautuminen on näkyvissä. 3. MVCC-mekanismi?
3.1 Mikä on MVCC-mekanismi? MVCC on moniversioinen rinnakkaisohjausmekanismi.
3.2 Mitä ongelmia voidaan ratkaista? Lukitusmekanismi voi ohjata samanaikaisia toimintoja, mutta sen järjestelmän ylikuorma on suuri, ja MVCC voi useimmissa tapauksissa korvata rivitason lukit, mikä voi vähentää järjestelmän ylikuormitusta ja parantaa suorituskykyä.
Hyperlinkin kirjautuminen on näkyvissä.
4. Viesteissä on myös idempotenssiongelma
Esimerkiksi, miten estää viestien toistuva kulutus?
MQ:n viestiväliohjelmistossa nämä täytyy ymmärtää ja ymmärtää.
|