Paglabas ng Memcached 1.6.0 na may suporta para sa panlabas na storage na pinagana

naganap makabuluhang paglabas ng in-memory na data caching system Memcached 1.6.0, na nagpapatakbo sa data sa key/value format at madaling gamitin. Ang Memcached ay karaniwang ginagamit bilang isang magaan na solusyon upang mapabilis ang gawain ng mga site na may mataas na load sa pamamagitan ng pag-cache ng access sa DBMS at intermediate na data. Code naibigay sa ilalim ng lisensya ng BSD.

Pinapatatag ng bagong bersyon ang pagpapatupad ng storage "extstore", na binuo na ngayon bilang default (upang hindi paganahin sa script ng pag-configure, ang opsyon na "-disable-extstore" ay ibinigay), ngunit nangangailangan ng tahasang pag-activate sa pagsisimula (magpapatuloy na gagana ang mga lumang pag-install nang walang mga pagbabago pagkatapos ng pag-update). Bagama't karaniwang itinuturing na stable ang extstore, pinapayuhan ang pag-iingat kapag ipinapatupad ito sa napakalaking system.

Binibigyang-daan ka ng Extstore na gumamit ng SSD/Flash drive para palakihin ang laki ng cache. Tulad ng sa RAM, ang Flash storage ay hindi permanente at na-reset sa pag-restart. Ang saklaw ng bagong mode ay upang matiyak ang mahusay na pag-cache ng malalaking data. Kapag gumagamit ng "extstore", ang mga susi at metadata ay, tulad ng dati, ay nakaimbak lamang sa RAM, ngunit ang malaking data na nauugnay sa mga susi, na ang laki nito ay lumampas sa isang itinakdang threshold, ay nakaimbak sa panlabas na imbakan, at ang pointer lamang ang nananatili sa RAM.

Kung ang susi ay nauugnay sa maliit na data, gumagana ang Memcached gaya ng dati, pinapanatili ang data sa memorya at hindi ina-access ang panlabas na imbakan. Kung mayroong maraming libreng memorya, kung gayon ang pinakakailangan na data ay maaari ring ganap na matatagpuan sa cache sa RAM (halimbawa, maaari mong tukuyin na ang mga bagay lamang na mas malaki kaysa sa 1024 bytes na hindi pa na-access sa loob ng 3600 segundo ay na-reset sa Flash. ).

Ang pagpapatupad ay na-optimize upang matiyak ang maximum na pagganap at minimal na pag-load ng CPU, sa gastos ng kahusayan sa imbakan (mataas na antas ng pagkapira-piraso). Upang pahabain ang buhay ng mga Flash drive, ang data ay bina-buffer at ini-flush sa storage nang sunud-sunod. Upang i-save ang katayuan ng cache sa pagitan ng mga pag-restart, maaari mong gamitin ang kakayahang lumitaw sa release 1.5.18 upang i-dump ang cache dump sa isang file. Sa susunod na startup, maaari mong ibalik ang cache mula sa file na ito upang maalis ang mga peak sa load sa mga content processor dahil sa cache na walang laman (ang cache ay agad na nagiging "mainit").

Ang pangalawang mahalagang pagbabago sa Memcached 1.6 ay ang muling paggawa ng code ng komunikasyon sa network, na inangkop upang awtomatikong iproseso ang mga kahilingan sa batch sa loob ng isang tawag sa system. Dati, kapag nagpapadala ng maramihang mga utos ng GET sa isang TCP packet, ipapadala ng memcached ang mga resulta na may hiwalay na mga tawag sa system. Sa Memcached 1.6, ang mga tugon ay pinagsama-sama at ibinabalik sa pamamagitan ng pagpapadala ng isang tawag sa system. Bilang resulta, mayroon na ngayong average na 1.5 key sa bawat system call, na sa mga pagsubok ay nagpapakita ng pagbawas sa load ng CPU na hanggang 25% at pagbaba ng latency ng ilang porsyento.

Ang muling pagdidisenyo ng network subsystem ay naging posible din na lumipat sa dynamic na alokasyon ng mga buffer kung kinakailangan, sa halip na statically magtalaga ng mga buffer. Binawasan ng pag-optimize na ito ang pagkonsumo ng memorya habang naghihintay ng mga bagong utos sa pamamagitan ng koneksyong itinatag ng kliyente mula 4.5 KB hanggang 400-500 bytes, at naging posible rin na maalis ang maraming tawag sa malloc, realloc at libre, na humahantong sa hindi kinakailangang pagkapira-piraso ng memorya sa mga system na may malaking bilang ng mga koneksyon. Ang bawat thread ng manggagawa ay humahawak na ngayon ng sarili nitong pool ng read at write buffer para sa mga aktibong koneksyon ng kliyente. Upang ayusin ang laki ng mga buffer na ito
ang mga opsyon na β€œ-o resp_obj_mem_limit=N” at β€œ-o read_buf_mem_limt=N” ay ibinigay.

Inihayag din ng Branch 1.6 ang pagtigil sa paggamit ng binary protocol pakikipag-ugnayan sa server. Ang pagpapanatili ng binary protocol at pag-aayos ng bug ay magpapatuloy, ngunit ang mga bagong feature at update sa mga kasalukuyang feature ay hindi ipo-port. Text protocol ay patuloy na uunlad nang walang pagbabago. Ang binary protocol ay pinalitan ng isang bagong protocol meta (isang tekstong bersyon ng protocol na may mga compact na meta-command), na nagpapakita ng pinakamainam na kumbinasyon ng pagganap at pagiging maaasahan. Ang bagong protocol ay sumasaklaw sa lahat ng mga operasyon na dating magagamit sa pamamagitan ng text at binary protocol.

Pinagmulan: opennet.ru

Magdagdag ng komento