Utgivelse av Memcached 1.6.0 med støtte for ekstern lagring aktivert

fant sted betydelig utgivelse av databufringssystemet i minnet Memmebufret 1.6.0, som opererer på data i nøkkel/verdi-format og er enkel å bruke. Memcached brukes vanligvis som en lettvektsløsning for å fremskynde arbeidet til høybelastningssider ved å bufre tilgang til DBMS og mellomliggende data. Kode medfølgende under BSD-lisens.

Den nye versjonen stabiliserer implementeringen av lagringen "extstore", som nå er bygget som standard (for å deaktivere i konfigureringsskriptet, er alternativet "-disable-extstore" gitt), men krever eksplisitt aktivering ved oppstart (gamle installasjoner vil fortsette å fungere uten endringer etter oppdateringen). Selv om extstore generelt anses for å være stabil, anbefales det å være forsiktig når du implementerer det på svært store systemer.

Extstore lar deg bruke SSD/Flash-stasjoner for å utvide cachestørrelsen. Som med RAM, er ikke Flash-lagring permanent og tilbakestilles ved omstart. Omfanget av den nye modusen er å sikre effektiv caching av store data. Ved bruk av «extstore» lagres nøkler og metadata, som før, kun i RAM, men store data knyttet til nøkler, hvis størrelse overstiger en fastsatt terskel, lagres i eksternt lager, og kun pekeren forblir i RAM.

Hvis nøkkelen er knyttet til små data, fungerer Memcached som vanlig, holder dataene i minnet og får ikke tilgang til ekstern lagring. Hvis det er mye ledig minne, kan de mest nødvendige dataene i tillegg være fullstendig plassert i hurtigbufferen i RAM (du kan for eksempel spesifisere at bare objekter større enn 1024 byte som ikke har blitt åpnet på 3600 sekunder, tilbakestilles til Flash ).

Implementeringen er optimalisert for å sikre maksimal ytelse og minimal CPU-belastning, på bekostning av lagringseffektivitet (høyt nivå av fragmentering). For å forlenge levetiden til Flash-stasjoner, bufres data og skylles til lagring sekvensielt. For å lagre hurtigbuffertilstanden mellom omstart, kan du bruke muligheten som dukket opp i versjon 1.5.18 til å dumpe en hurtigbufferdump til en fil. Ved neste oppstart kan du gjenopprette cachen fra denne filen for å eliminere topper i belastningen på innholdsprosessorer på grunn av at cachen er tom (cachen blir umiddelbart "varm").

Den andre viktige endringen i Memcached 1.6 var omarbeidingen av nettverkskommunikasjonskoden, som er tilpasset for automatisk å behandle batchforespørsler innenfor et enkelt systemanrop. Tidligere, når du sendte flere GET-kommandoer i en enkelt TCP-pakke, ville memcached sende resultatene med separate systemanrop. I Memcached 1.6 blir svar samlet og returnert ved å sende et enkelt systemanrop. Som et resultat er det nå et gjennomsnitt på 1.5 nøkler per systemanrop, som i tester viser en reduksjon i CPU-belastning på opptil 25 % og en reduksjon i latens med flere prosent.

Redesignet av nettverksundersystemet gjorde det også mulig å gå over til dynamisk tildeling av buffere etter behov, i stedet for statisk tildeling av buffere. Denne optimeringen reduserte minneforbruket mens man ventet på nye kommandoer gjennom en klientetablert tilkobling fra 4.5 KB til 400-500 byte, og gjorde det også mulig å kvitte seg med mange anrop til malloc, realloc og gratis, som førte til unødvendig minnefragmentering på systemer med et stort antall forbindelser. Hver arbeidertråd håndterer nå sin egen pool av lese- og skrivebuffere for aktive klienttilkoblinger. For å justere størrelsen på disse bufferne
alternativene "-o resp_obj_mem_limit=N" og "-o read_buf_mem_limt=N" er gitt.

Branch 1.6 kunngjorde også avskrivning av binær protokoll interaksjon med serveren. Binær protokollvedlikehold og feilrettinger vil fortsette, men nye funksjoner og oppdateringer til eksisterende funksjoner vil ikke bli portert. Tekstprotokoll vil fortsette å utvikle seg uten endringer. Den binære protokollen er erstattet av en ny protokoll meta (en tekstversjon av protokollen med kompakte metakommandoer), som demonstrerer den optimale kombinasjonen av ytelse og pålitelighet. Den nye protokollen dekker alle operasjoner som tidligere var tilgjengelig gjennom tekst- og binære protokoller.

Kilde: opennet.ru

Legg til en kommentar