Redis permezz ta’ VPN iħossu bil-mod: inqas vjaġġi ’l hemm u ’l hawn għal kull talba
VPN ma tagħmilx sejħa Redis mill-bogħod waħda lokali. Ibbudġetta l-vjaġġi ’l hemm u ’l hawn għal kull talba, erġa’ uża l-konnessjonijiet u żomm il-pipelines ’il bogħod mit-tranżazzjonijiet.
Paġna li twieġeb fi 200 ms ma’ Redis lokali tieħu erba’ sekondi hekk kif il-klijent joqgħod wara VPN, filwaqt li l-kontaturi tas-server jibqgħu żejda. Il-log bil-mod ma juri xejn fuq millisekonda, il-graff tas-CPU huwa ċatt, u l-istanza taqdi klijenti oħra mingħajr ilment. Dak li nbidel huwa d-distanza, u dak li jimmultiplika d-distanza huwa l-għadd ta’ drabi li l-kodiċi tiegħek jieqaf u jistenna. Għaddi mill-passaġġ tat-talba mill-klijent ’il barra u s-soluzzjoni kważi dejjem hija inqas stennijiet sekwenzjali minflok server aktar mgħaġġel.
Ibda mill-klijent, mhux mill-metriċi tas-server
Osserva l-proċess tal-klijent bejn l-ewwel kmand u l-aħħar wieħed. Jekk it-traċċa turi tweġiba, waqfa, imbagħad il-kmand li jmiss, qed tħallas vjaġġ sħiħ għal kull kmand u l-ebda aġġustament tas-server mhu se jbiddel dan. Il-log bil-mod huwa l-għodda ħażina hawn, għax jirrekordja l-ħin tal-eżekuzzjoni u b’mod deliberat jeskludi l-I/O tal-komunikazzjoni. Log bil-mod nadif ħdejn punt tat-tmiem bil-mod hija l-firem ta’ problema ta’ vjaġġi ’l hemm u ’l hawn.
Kejjel il-passaġġ innifsu qabel ma tmiss il-kodiċi. redis-cli -h redis.example.internal --latency jibgħat PING ripetuti u jistampa l-ħin medju tat-talba u t-tweġiba, li huwa l-ispiża tiegħek għal kull skambju. Immoltiplika dan bl-għadd ta’ kmandi sekwenzjali f’azzjoni waħda tal-utent u jkollok limitu ta’ isfel għall-punt tat-tmiem.
Għodd il-vjaġġi ’l hemm u ’l hawn li azzjoni waħda tal-utent verament teħtieġ
Ħu punt tat-tmiem wieħed u ikteb kull sejħa Redis fl-ordni, inklużi dawk moħbija ġewwa ORM, middleware tas-sessjoni jew tfittxija ta’ feature flag. Il-biċċa l-kbira tal-punti tat-tmiem bil-mod jagħmlu għoxrin jew tletin sejħa fejn tlieta jkunu biżżejjed, u dawk moħbija normalment huma l-maġġoranza.
Katina ta’ dipendenzi ma tistax tinqabeż: jekk it-tieni kmand jeħtieġ iċ-ċavetta li jirritorna l-ewwel wieħed, l-istennija hija reali u l-uniċi għażliet huma mudell tad-dejta differenti jew operazzjoni fuq is-server li tesprimi l-pass kollu f’daqqa. Qari indipendenti huma każ ieħor, għax xejn ma jġiegħlek tistenna l-ewwel tweġiba qabel ma tibgħat it-tieni. Immarka kull sejħa bħala dipendenti jew indipendenti qabel ma tbiddel xi ħaġa, u l-forma tas-soluzzjoni ssir ovvja.
In-numru li jgħodd huwa stennijiet sekwenzjali, mhux kmandi totali. Tletin kmand f’lott wieħed xorta jiswew stennija waħda.
Aqsam f’lott biss il-kmandi li mhumiex dipendenti fuq xulxin
Pipeline tqiegħed kmandi indipendenti fil-kju u tiġbor it-tweġibiet fl-ordni, u tibdel N stennijiet f’waħda. Il-biċċa l-kbira tal-klijenti joffruh bħala blokk, callback jew maniġer tal-kuntest minflok mod ta’ konnessjoni separat, għalhekk iċċekkja l-API li tipprovdi l-verżjoni installata tiegħek. Il-benefiċċju jikber mal-ħin tal-vjaġġ, u proprju għalhekk huwa importanti fuq VPN u bilkemm jinħass fuq 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())
Għaddi transaction=False meta trid biss lottijiet. Bil-kwiet il-klijent ikebbeb il-lott f’MULTI u EXEC, li jagħmilha atomika u jbiddel x’jistgħu josservaw klijenti oħra waqt il-titjira. L-atomikità hija deċiżjoni ta’ korrettezza, mhux manija tal-prestazzjoni, u pipeline mhix tranżazzjoni biss għax it-tnejn inaqqsu l-vjaġġi ’l hemm u ’l hawn.
Aqra kull tweġiba minflok biss is-sottomissjoni tal-lott. Kmand fil-kju jista’ jirritorna żball waqt li l-lott jinġibed fix-xejn, u klijent li jarmi l-lista tat-tweġibiet ibiddel kitba falluta f’waħda siekta. Qabbel it-tul tal-lista tat-tweġibiet man-numru ta’ kmandi li qiegħed fil-kju.
Żomm il-konnessjoni ħajja bejn l-azzjonijiet
Kull konnessjoni ġdida tħallas għas-soluzzjoni tal-ismijiet, handshake TCP, handshake TLS u AUTH, u fuq VPN kull waħda minnhom hija vjaġġ li ma tistax taqsam f’lott. Oħloq il-klijent darba għal kull proċess u erġa’ użah, jew uża l-pool li tipprovdi l-librerija tiegħek b’daqs limitat. Erġa’ tgħaqqad għal kull talba hija t-tieni l-aktar kawża komuni ta’ dan is-sintomu wara l-istennijiet għal kull kmand.
Żomm l-isem tal-host privat fil-konfigurazzjoni minflok indirizz litterali. Il-validazzjoni taċ-ċertifikat u l-identità tas-servizz għadhom japplikaw fuq netwerk privat, u l-iffissar ta’ IP jinkiser fil-mument li l-fornitur jerġa’ jinnumera subnet. Jekk is-soluzzjoni tal-ismijiet hija l-parti bil-mod, sewwi l-passaġġ tas-solver u mhux is-string tal-konnessjoni.
Issettja timeout tas-socket espliċitu sabiex mina mwaħħla tfalli malajr minflok ma ddendel ħaddiem. Imbagħad ikkonferma li l-pool qed jiġi użat mill-ġdid billi tirrekordja l-ħolqien tal-konnessjonijiet fil-klijent.
Iddeċiedi d-daqs tal-lott qabel ma jsir problema tal-memorja
Redis iżomm it-tweġibiet fil-kju għat-tul kollu tal-lott, u l-klijent iżomm ir-riżultat analizzat warajh. Pipeline ta’ għaxart elef valur kbir ibiddel l-istennijiet tan-netwerk ma’ qabżiet tal-memorja u pawżi twal fiż-żewġt iċ-ċnies.
Agħżel id-daqs tal-lott skont il-volum tat-tweġibiet u mhux in-numru ta’ kmandi. Ftit mijiet ta’ kmandi żgħar f’lott wieħed normalment huma komdi, filwaqt li mitt tagħbija ta’ diversi kilobyte mhumiex. Aqsam bil-bytes kif ukoll bin-numru, u żomm kull lott fil-baġit tal-latenza li l-punt tat-tmiem verament għandu.
Kejjel mit-tarf għat-tarf wara l-bidla: redis-cli -h redis.example.internal --latency-history juri jekk il-passaġġ innifsu huwiex stabbli, u l-ħinatur tat-talbiet tiegħek stess juri jekk il-punt tat-tmiem imxiex għall-aħjar. Jekk il-punt tat-tmiem għadu bil-mod filwaqt li l-istorja tal-latenza hija ċatta, l-ispiża li fadal hija xogħol fuq is-server jew is-serjalizzazzjoni tiegħek stess, u l-pass li jmiss huwa profil tal-handler u mhux bidla oħra fil-lottijiet.