Ikhasi eliphendula ngama-200 ms ku-Redis yasendaweni lithatha imizuzwana emine lapho iklayenti lingemuva kwe-VPN, kuyilapho izibali zeseva zingasebenzi. I-Slow Log ayibonisi lutho olungaphezu kwe-millisecond eyodwa, igrafu ye-CPU icaba, futhi i-instance isebenzela amanye amaklayenti ngaphandle kwesikhalazo. Okwashintshayo ibanga, futhi okwandisa ibanga inani lezikhathi ikhodi yakho ema khona ilinde. Hamba indlela yesicelo usuka eklayentini uye ngaphandle futhi ukulungisa cishe njalo kungukulinda okulandelanayo okumbalwa, hhayi iseva esheshayo.

Qala eklayentini, hhayi kumamethrikhi eseva

Buka inqubo yeklayenti phakathi komyalo wokuqala nowokugcina. Uma umkhondo ukhombisa impendulo, ukuma, bese kuba umyalo olandelayo, ukhokha i-round trip ephelele ngomyalo ngamunye futhi akukho ukulungiswa kweseva okuzokushintsha lokho. I-Slow Log iyithuluzi elingalungile lapha, ngoba irekhoda isikhathi sokusebenza futhi ngamabomu ayikufaki i-I/O yokuxhumana. I-Slow Log ehlanzekile eduze kwe-endpoint enensayo iwuphawu lwenkinga yama-round trip.

Kala indlela uqobo ngaphambi kokuthinta ikhodi. redis-cli -h redis.example.internal --latency ithumela ama-PING aphindaphindiwe futhi iphrinta isikhathi esimaphakathi sesicelo nempendulo, okuyindleko yakho ngokushintshana ngakunye. Phinda lokho ngenani lemibhalo elandelanayo esenzweni esisodwa somsebenzisi bese uthola inani eliphansi le-endpoint.

Bala ama-round trip adingwa ngasempela yisenso eyodwa yomsebenzisi

Thatha i-endpoint eyodwa bese ubhala phansi yonke ikholi ye-Redis ngokulandelana, kuhlanganise lezo ezicashe ngaphakathi kwe-ORM, i-session middleware noma ukusesha kwe-feature flag. Ama-endpoint amaningi anensayo enza amakholi angamashumi amabili noma amathathu lapho amathathu ayenele khona, futhi lawo acashile ngokuvamile ayiningi.

Uchungechunge lokuncika alunakugoqwa: uma umyalo wesibili udinga ukhiye obuyiswe ngowokuqala, ukulinda kungokoqobo futhi izinketho kuphela imodeli yedatha ehlukile noma umsebenzi ohlangothini lweseva oveza sonke isinyathelo ngasikhathi sinye. Ukufunda okuzimele kuyisimo esihlukile, ngoba akukho okukuphoqa ukuthi ulinde impendulo yokuqala ngaphambi kokuthumela eyesibili. Maka ikholi ngayinye njengencikile noma ezimele ngaphambi kokuhlela noma yini, futhi isimo sokulungisa sizoba sobala.

Inombolo ebalulekile ukulinda okulandelanayo, hhayi imibhalo iyonke. Imibhalo engamashumi amathathu ku-batch eyodwa isabiza ukulinda okukodwa.

Yenza i-batch kuphela imibhalo engancikile kwenye

I-pipeline ilungiselela imibhalo ezimele emgqeni futhi iqoqa izimpendulo ngokulandelana, iguqula ukulinda okungu-N kube kukodwa. Amaklayenti amaningi ayiveza njengebhlokhi, i-callback noma i-context manager hhayi imodi ehlukile yokuxhumana, ngakho hlola i-API enikezwa inguqulo yakho efakiwe. Inzuzo ikhula ngesikhathi se-round trip, yingakho ibalulekile ku-VPN futhi ingabonakali ku-localhost.

import redis

r = redis.Redis(host="redis.example.internal", port=6379, socket_timeout=2)
pipe = r.pipeline(transaction=False)
for key in ("user:1001", "user:1002", "user:1003"):
    pipe.get(key)
print(pipe.execute())

Dlulisela transaction=False lapho ufuna i-batching kuphela. Ngokwezinto ezizenzakalelayo iklayenti lisonga i-batch ku-MULTI naku-EXEC, okwenza ibe i-atomic futhi kushintsha lokho amanye amaklayenti angakubona phakathi nokuhamba. I-atomicity isinqumo sokulunga, hhayi isibonelo sokusebenza, futhi i-pipeline ayiyona i-transaction ngenxa nje yokuthi zombili zinciphisa ama-round trip.

Funda yonke impendulo hhayi ukuthunyelwa kwe-batch kuphela. Umyalo osemgqeni ungabuyisela iphutha ngenkathi i-batch iyonke iqeda, futhi iklayenti elilahla uhlu lwezimpendulo liguqula ukubhala okuhlulekile kube okuthule. Qhathanisa ubude bohlu lwezimpendulo nenani lemibhalo oyifake emgqeni.

Gcina ukuxhumana kuphila phakathi kwezenzo

Ukuxhumana ngakunye okusha kukhokhela ukuxazululwa kwegama, i-TCP handshake, i-TLS handshake ne-AUTH, futhi phezu kwe-VPN ngakunye kwalokho kuyi-round trip ongeke uyibatch. Dala iklayenti kanye ngohlelo bese ulisebenzisa kabusha, noma sebenzisa i-pool enikezwa yilabhulali yakho enosayizi oboshiwe. Ukuxhumana kabusha ngesicelo ngasinye kuyimbangela yesibili evamile yalesi simptomu ngemva kokulinda umyalo ngamunye.

Gcina i-hostname eyimfihlo ekulungiseleleni hhayi njengekheli elingokoqobo. Ukuqinisekiswa kwesitifiketi nobunikazi besevisi kusasebenza kunethiwekhi eyimfihlo, futhi ukupina i-IP kuphuka ngaso leso sikhathi lapho umhlinzeki ephinda enombola i-subnet. Uma ukuxazululwa kwegama kuyingxenye enensayo, lungisa indlela ye-resolver hhayi intambo yokuxhumana.

Setha i-socket timeout ecacile ukuze umhubhe obambekile uhluleke ngokushesha hhayi ukulenga i-worker. Bese uqinisekisa ukuthi i-pool isetshenziswa kabusha ngempela ngokuloga ukudalwa kokuxhumana eklayentini.

Linganisa i-batch ngaphambi kokuba ibe inkinga yememori

I-Redis igcina izimpendulo ezisemgqeni isikhathi sonke se-batch, futhi iklayenti ligcina umphumela ohlaziyiwe ngemva kwalokho. I-pipeline yezinkulungwane eziyishumi zamanani amakhulu ishintsha ukulinda konethiwekhi ngokugxuma kwememori nokuma okude kuzo zombili iziphetho.

Khetha usayizi we-batch ngokwesisindo sezimpendulo hhayi ngenani lemibhalo. Amakhulu ambalwa emibhalo emincane ku-batch eyodwa ngokuvamile akhululekile, kuyilapho ikhulu lama-payload amakhilobhayithi amaningi kungenjalo. Hlukanisa ngama-byte nangenani, futhi gcina i-batch ngayinye ngaphakathi kwesabelomali sokulibaziseka i-endpoint enaso ngempela.

Kala kusuka ekuqaleni kuze kube sekupheleni ngemva koshintsho: redis-cli -h redis.example.internal --latency-history kukhombisa ukuthi indlela uqobo izinzile yini, futhi isibali sakho sesicelo sikhombisa ukuthi i-endpoint ithuthukile yini. Uma i-endpoint isanensayo kuyilapho umlando wokulibaziseka ucaba, izindleko ezisele umsebenzi ohlangothini lweseva noma i-serialization yakho, futhi isinyathelo esilandelayo iphrofayili ye-handler hhayi olunye ushintsho lwe-batch.

Izihloko ezihlobene