Memcached je univerzální systém ukládání do mezipaměti. To znamená, že je navržen tak, aby ukládal (nebo do mezipaměti) odpovědi na otázky, jejichž výpočet nebo načítání trvá dlouho a pravděpodobně budete požádáni znovu . Běžným případem použití je urychlení používání databáze:pokud například očekáváme, že budeme opakovaně potřebovat seznam „jmén všech lidí, kteří jsou v týmu X“, můžeme tato data vložit do Memcached místo spuštění SQL dotazu. pokaždé. (Poznámka:Memcached se občas označuje jako „memcache“. V tomto článku se budeme držet celého názvu.)
Mezipaměti jsou užitečné při vytváření škálovatelných aplikací a infrastruktury, což je jádrem práce inženýra spolehlivosti webu (SRE). Tento článek se zabývá tím, co je potřeba k efektivnímu provozu Memcached.
Doporučení paměti a démonizace Memcached
Memcached funguje nejlépe, když je omezen na velikost paměti, kterou má systém k dispozici: vystěhuje se data, když zabírají více místa, než je limit paměti. Nějaký paměťový prostor bude potřeba pro to, co můžeme nazvat „režie“ – paměť potřebná pro administrativní operace Memcached, operační systém a pomocné procesy.
Další skvělý obsah
- Bezplatný online kurz:technický přehled RHEL
- Naučte se pokročilé příkazy Linuxu
- Stáhněte si cheaty
- Najděte alternativu s otevřeným zdrojovým kódem
- Přečtěte si hlavní obsah Linux
- Podívejte se na zdroje s otevřeným zdrojovým kódem
To se nastavuje pomocí -m příznak příkazového řádku, což je pravděpodobně jediný příznak, který budete ke spuštění Memcached potřebovat. -d příznak (daemonize) obvykle není užitečný:na moderních operačních systémech založených na systemd by se Memcached neměl démonizovat sám. Podobně, pokud jej spustíte pod Dockerem, také by se neměl démonizovat.
Spuštění Memcached v kontejneru je v pořádku, ale je důležité zvážit, co ještě běží na hostiteli, a pečlivě vyladit požadavky na paměť.
Prohlížení dat Memcached se statistikami
Když používáte Memcached, je často dobré se přímo připojit a hrát si, abyste viděli, co se děje. Je to přiměřeně bezpečné, dokonce i s produkčními instancemi, pokud budete trochu opatrní.
Nejbezpečnější příkaz ke spuštění je stats . Způsobí to, že Memcached vyplivne velké množství statistik a podrobností, které jsou často užitečné:
$ echo statistiky | nc localhost 11211
...
STAT uptime 1346
...
STAT max_connections 1024
STAT curr_connections 2
STAT total_connections 6
STAT zamítnuté_připojení 4
...
STAT get_hits 0
STAT get_misses 0
STAT get_expired 0
...
END
Nejzajímavější statistiky jsou obvykle „úspěšné“, „nevynechané“ a „vypršené“. Ty mohou často vyprávět zajímavý příběh o tom, jak efektivní je keš. Pokud se účinnost sníží, je to důvod k obavám, protože by to mohlo snížit výkon aplikace.
Jedna o něco méně bezpečná věc, kterou můžete vyzkoušet, je uložení a vyzvednutí. Je to dobrý způsob, jak „nakopnout pneumatiky“ a naučit se, jak to funguje:
$ echo statistiky | nc localhost 11211
nastavit můj_klíč 0 0 8
moje_hodnota^M
STORED
získat můj_klíč
VALUE můj_klíč 0 8
moje_hodnota
ENDPo zadání moje_hodnota , musíte odeslat konec řádku ve stylu DOS:return a nový řádek. To se provádí v konzole Linux pomocí Ctrl+V a poté stiskněte Enter , která vydá návrat znak (ASCII 13) a poté stiskněte Enter jako obvykle vypíše nový řádek znak (ASCII 10).
První 0 je pro „metadata“ a předává se v 0 znamená, že neexistují žádná zajímavá metadata. Je považováno za bitovou masku, takže 0 má všechny bity vypnuté. Druhá 0 je po dobu platnosti. Znamená to „nevyprší“. Obecně je to pro testování v pořádku. Ve výrobním nastavení je dobré nastavit dobu expirace klíčů.
Pokud se jedná o důležitou instanci, je třeba dbát na to, abyste nepřepsali důležitý klíč. Schopnost rychlého ukládání a načítání prostřednictvím příkazového řádku však umožňuje ujistit se, že Memcached běží správně.
Sdílení Memcached jako služby
Všimněte si, že v moderním nastavení mikroslužeb bude mnoho služeb chtít ukládat data do Memcache a stojí za to přijít se strategií, jak to spravovat. Jednou z možností je spustit Memcache nebo cluster pro každou službu. To je však často komplikované a náročné na údržbu. Často je správné, aby služby sdílely Memcache. V takovém případě je dobré zavést nějaké rozumné zásady; například nařizuje předponu názvu služby ke klíči. To umožňuje zkontrolovat, které služby využívají, kolik místa, pomocí cachedump příkaz:
$ echo 'stats items' | nc -w 1 localhost 11211|grep ':number '
STAT items:1:number 2Tento příkaz zobrazí všechna ID "desek". Memcache ukládá podobně velké klíče ve slabech; tento příklad má pouze jeden slab:
$ echo 'stats cachedump 1 1000' | nc -w 1 localhost 11211
ITEM můj_klíč [8 b; 0 s]
POLOŽKA foo [5 b; 0 s]
KONECZde jsou dva klíče:jeden s 8bajtovou hodnotou a druhý s 5bajtovou hodnotou.
V realističtějším scénáři s mnoha klíči možná budete chtít zpracovat tato data pomocí awk nebo skript a pomocí místní konvence zjistit, kolik místa jednotlivé služby využívají.
To lze integrovat do monitorovacího systému, jako je Prometheus, a sledovat chování v průběhu času.
Navíc, protože mnoho týmů sdílí stejnou službu, je užitečným vodítkem navrhnout, aby služby šifrovaly a ověřovaly data, která ukládají do mezipaměti. Symetrické šifrování na moderních CPU je výkonné, což umožňuje mnohem jednodušší modely zabezpečení. Jedním z příkladů knihovny, která toto podporuje, je kryptografický Fernet. (Pokud si o tom chcete přečíst více, dejte mi vědět v komentářích.)
Závěr
Memcached je běžná open source technologie, kterou SRE podporuje. V tomto článku jsem se podíval na to, jak se o tom dotazovat na běžné statistiky, nabídl jsem nějaké rady ohledně konfigurace a ukázal, jak pomoci více týmům sdílet jeden cluster Memcached snadno monitorovaným a bezpečným způsobem. Máte další otázky, jak spravovat Memcached? Zeptejte se v komentářích a já se rád podělím o další tipy.
Linux