Vyhledávání na webu

Nejlepší nástroje pro ukládání do mezipaměti s otevřeným zdrojovým kódem pro Linux v roce 2023


Spolehlivé distribuované výpočetní systémy a aplikace se staly základním kamenem předních podniků, zejména v oblasti automatizace a řízení kritických obchodních procesů a poskytování služeb zákazníkům.

Jako vývojáři a správci systémů těchto systémů a aplikací se od vás očekává, že budete poskytovat všechny druhy řešení informačních technologií (IT), která zajistí, že budete mít k dispozici ty nejefektivnější systémy.

To zahrnuje úkoly, jako je návrh, testování a implementace strategií pro výkon systému/aplikace, spolehlivost, dostupnost a škálovatelnost, aby koncoví uživatelé měli uspokojivou úroveň služeb.

Ukládání do mezipaměti je jednou z mnoha velmi základních, ale účinných technik poskytování aplikací, na které se můžete spolehnout. Než půjdeme dále, pojďme se krátce podívat na to, co je ukládání do mezipaměti, kde a/nebo jak jej lze použít a jaké jsou jeho výhody.

Co je ukládání do mezipaměti nebo ukládání obsahu do mezipaměti?

Ukládání do mezipaměti (neboli Ukládání obsahu do mezipaměti) je široce používaná technika ukládání kopií dat do dočasného úložiště (známého také jako mezipaměť) tak, aby byla data snadno a rychle dostupná, když jsou načtena z původního úložiště.

Data uložená v mezipaměti mohou zahrnovat soubory nebo fragmenty souborů (jako jsou soubory HTML, skripty, obrázky, dokumenty atd.), databázové operace nebo záznamy, volání API, záznamy DNS atd. v závislosti na typu a účelu ukládání do mezipaměti.

Cache může být ve formě hardwaru nebo softwaru. Softwarová mezipaměť (která je předmětem tohoto článku) může být implementována v různých vrstvách zásobníku aplikací.

Ukládání do mezipaměti lze použít na straně klienta (nebo na vrstvě prezentace aplikace), například ukládání do mezipaměti prohlížeče nebo mezipaměti aplikace (nebo offline režim). Většina moderních prohlížečů, ne-li všechny, se dodává s implementací mezipaměti HTTP.

Možná jste již slyšeli o oblíbené frázi „vymažte mezipaměť“ při přístupu k webové aplikaci, která vám umožní zobrazit nejnovější data nebo obsah na webu nebo v aplikaci, místo aby prohlížeč používal starou kopii obsah uložený lokálně.

Dalším příkladem ukládání do mezipaměti na straně klienta je Ukládání do mezipaměti DNS, ke kterému dochází na úrovni operačního systému (OS). Jde o dočasné úložiště informací o předchozích vyhledáváních DNS operačním systémem nebo webovým prohlížečem.

Ukládání do mezipaměti lze také implementovat na úrovni sítě, buď v LAN nebo WAN prostřednictvím proxy. Běžným příkladem tohoto typu ukládání do mezipaměti jsou CDN (Content Delivery Networks), což jsou globálně distribuované sítě webových proxy serverů.

Za třetí, můžete také implementovat ukládání do mezipaměti na zdrojovém nebo backendovém serveru (serverech). Existují různé formy ukládání do mezipaměti na úrovni serveru, mezi které patří:

  • Ukládání do mezipaměti webového serveru (pro ukládání obrázků, dokumentů, skriptů atd.).
  • ukládání do mezipaměti aplikace nebo memorování (používá se při čtení souborů z disku, dat z jiných služeb nebo procesů nebo vyžádání dat z rozhraní API atd.).
  • Ukládání do mezipaměti databáze (k poskytování přístupu v paměti k často používaným datům, jako jsou požadované řádky databáze, výsledky dotazů a další operace).

Upozorňujeme, že data mezipaměti mohou být uložena v jakémkoli úložném systému včetně databáze, souboru, systémové paměti atd., ale mělo by jít o rychlejší médium než primární zdroj. V tomto ohledu je ukládání do mezipaměti nejúčinnější a běžně používanou formou ukládání do mezipaměti.

Proč používat ukládání do mezipaměti?

Ukládání do mezipaměti nabízí řadu výhod, včetně následujících:

  • Na úrovni databáze zlepšuje výkon čtení dat uložených v mezipaměti na mikrosekundy. Ke zlepšení výkonu zápisu můžete také použít mezipaměť pro zpětný zápis, kde se data zapisují do paměti a později se zapisují na disk nebo hlavní úložiště v určených intervalech. Ale aspekt integrity dat může mít potenciálně katastrofální důsledky. Například když se systém zhroutí těsně předtím, než jsou data odeslána do hlavního úložiště.
  • Na aplikační úrovni může mezipaměť ukládat často čtená data v rámci samotného aplikačního procesu, čímž se zkracuje doba vyhledávání dat ze sekund na mikrosekundy, zejména v síti.
  • S ohledem na celkový výkon aplikací a serveru pomáhá ukládání do mezipaměti snížit zatížení serveru, latenci a šířku pásma sítě, protože data uložená v mezipaměti jsou předávána klientům, čímž se zlepšuje doba odezvy a rychlost doručování klientům.
  • Ukládání do mezipaměti také umožňuje dostupnost obsahu, zejména prostřednictvím sítí CDN, a mnoho dalších výhod.

V tomto článku se podíváme na některé z nejlepších open source (ukládání do mezipaměti aplikací/databází a ukládání proxy serverů do mezipaměti) pro implementaci na straně serveru ukládání do mezipaměti v Linuxu.

1. Redis

Redis (REmote DIctionary Server v plném znění) je bezplatný a open source, rychlý, vysoce výkonný a flexibilní distribuovaný in-memory výpočetní systém, který lze použít z většiny, ne-li ze všech programovacích jazyků.

Jedná se o úložiště datových struktur v paměti, které funguje jako modul mezipaměti, perzistentní databáze na disku v paměti a zprostředkovatel zpráv. Ačkoli je Redis vyvinut a testován na Linuxu (doporučená platforma pro nasazení) a OS X, funguje také v jiných systémech POSIX, jako je *BSD, bez jakýchkoli externích závislostí.

Redis podporuje četné datové struktury, jako jsou řetězce, hash, seznamy, sady, tříděné sady, bitmapy, streamy a další. To umožňuje programátorům použít specifickou datovou strukturu pro řešení konkrétního problému. Podporuje automatické operace s datovou strukturou, jako je připojení k řetězci, vkládání prvků do seznamu, zvyšování hodnoty hash, průnik výpočetní množiny a další.

Mezi jeho klíčové funkce patří replikace Redis master-slave (která je ve výchozím nastavení asynchronní), vysoká dostupnost a automatické převzetí služeb při selhání nabízené pomocí Redis Sentinel, cluster Redis (můžete horizontálně škálovat přidáním více uzlů clusteru) a dělení dat (distribuce dat mezi více Redis instance). Obsahuje také podporu pro transakce, skriptování Lua, řadu možností perzistence a šifrování komunikace klient-server.

Redis je databáze v paměti, ale trvalá na disku, a nabízí nejlepší výkon, když nejlépe funguje s datovou sadou v paměti. Můžete jej však použít s databází na disku, jako je MySQL, PostgreSQL a mnoho dalších. Například můžete v Redis vzít velmi náročná malá data a ponechat další kusy dat v databázi na disku.

Redis podporuje zabezpečení mnoha způsoby: jedním pomocí funkce „chráněný režim“ k zabezpečení instancí Redis před přístupem z externích sítí. Podporuje také ověřování klient-server (kde je heslo nakonfigurováno na serveru a poskytnuto v klientovi) a TLS na všech komunikačních kanálech, jako jsou připojení klientů, replikační linky, protokol sběrnice Redis Cluster a další.

Redis má velmi mnoho případů použití, které zahrnují ukládání do mezipaměti databáze, ukládání do mezipaměti celé stránky, správu dat uživatelských relací, ukládání odpovědí API, systém zasílání zpráv Publikování/Odběr, frontu zpráv a další. Ty lze použít ve hrách, aplikacích sociálních sítí, kanálech RSS, analýze dat v reálném čase, doporučeních uživatelů a tak dále.

2. Memcached

Memcached je bezplatný a open source, jednoduchý, ale výkonný systém pro ukládání do mezipaměti distribuovaných objektů paměti. Jedná se o úložiště párů klíč–hodnota v paměti pro malé kusy dat, jako jsou výsledky databázových volání, volání API nebo vykreslování stránek. Běží na operačních systémech podobných Unixu včetně Linuxu a OS X a také na Microsoft Windows.

Jako vývojářský nástroj je určen k použití při zvyšování rychlosti dynamických webových aplikací ukládáním obsahu do mezipaměti (ve výchozím nastavení mezipaměť Nejméně nedávno použité (LRU), čímž se snižuje zatížení databáze na disku – funguje jako krátkodobá paměť pro aplikace. Nabízí API pro nejpopulárnější programovací jazyky.

Memcached podporuje řetězce jako jediný datový typ. Má architekturu klient-server, kde polovina logiky probíhá na straně klienta a druhá polovina na straně serveru. Důležité je, že klienti chápou, jak si vybrat, na který server se má pro položku zapisovat nebo ze kterého číst. Klient také velmi dobře ví, co dělat v případě, že se nemůže připojit k serveru.

Přestože se jedná o distribuovaný systém ukládání do mezipaměti, podporuje tedy clustering, servery Memcached jsou od sebe odpojeny (tj. o sobě nevědí). To znamená, že neexistuje žádná podpora replikace jako v Redis. Rozumí také tomu, jak ukládat a získávat předměty, a řídit, kdy je třeba vyklidit nebo znovu použít paměť. Dostupnou paměť můžete zvýšit přidáním dalších serverů.

Podporuje ověřování a šifrování prostřednictvím TLS od verze Memcached 1.5.13, ale tato funkce je stále v experimentální fázi.

3. Apache Ignite

Apache Ignite je také bezplatný a open source, horizontálně škálovatelný distribuovaný úložiště klíč-hodnota v paměti, mezipaměť a multimodelový databázový systém, který poskytuje výkonná rozhraní API pro výpočet distribuovaných dat. Je to také datová mřížka v paměti, kterou lze použít buď v paměti, nebo s nativní perzistencí Ignite. Běží na systémech podobných UNIX, jako je Linux a také Windows.

Obsahuje vícevrstvé úložiště, kompletní podporu SQL a transakce ACID (Atomicity, Consistency, Isolation, Durability) (podporované pouze na úrovni API klíč-hodnota) napříč více uzly clusteru, společné zpracování, a strojové učení. Podporuje automatickou integraci s jakýmikoli databázemi třetích stran, včetně všech RDBMS (jako je MySQL, PostgreSQL, Oracle Database atd.) nebo NoSQL obchodů.

Je důležité poznamenat, že ačkoli Ignite funguje jako úložiště dat SQL, není to plně SQL databáze. Ve srovnání s tradičními databázemi zřetelně zpracovává omezení a indexy; podporuje primární a sekundární indexy, ale k vynucení jedinečnosti se používají pouze primární indexy. Kromě toho nemá podporu pro omezení cizích klíčů.

Ignite také podporuje zabezpečení tím, že vám umožňuje povolit ověřování na serveru a poskytovat klientům přihlašovací údaje. K dispozici je také podpora pro komunikaci soketu SSL, která zajišťuje bezpečné připojení mezi všemi uzly Ignite.

Ignite má mnoho případů použití, které zahrnují systémy ukládání do mezipaměti, zrychlení zátěže systému, zpracování dat v reálném čase a analýzy. Může být také použit jako graf-centrická platforma.

4. Server Couchbase

Couchbase Server je také open source, distribuovaná, na dokumenty orientovaná databáze zapojení NoSQL, která ukládá data jako položky ve formátu klíč–hodnota. Funguje na Linuxu a dalších operačních systémech, jako jsou Windows a Mac OS X. Používá na funkce bohatý, na dokumenty orientovaný dotazovací jazyk nazvaný N1QL, který poskytuje výkonné služby dotazování a indexování pro podporu operací s daty v řádu milisekund.

Jeho pozoruhodnými funkcemi jsou rychlé úložiště klíč-hodnota se spravovanou mezipamětí, účelové indexery, výkonný dotazovací stroj, škálovatelná architektura (multi-dimenzionální škálování), integrace velkých dat a SQL, zabezpečení plného zásobníku a vysoká dostupnost.

Couchbase Server přichází s nativní podporou clusterů s více instancemi, kde nástroj pro správu clusterů koordinuje všechny aktivity uzlů a klientům poskytuje jednoduše rozhraní pro celý cluster. Důležité je, že můžete přidávat, odebírat nebo nahrazovat uzly podle potřeby, bez prostojů. Podporuje také replikaci dat mezi uzly klastru a selektivní replikaci dat napříč datovými centry.

Implementuje zabezpečení prostřednictvím TLS pomocí vyhrazených portů serveru Couchbase, různých ověřovacích mechanismů (pomocí pověření nebo certifikátů), řízení přístupu na základě rolí (pro kontrolu každého ověřeného uživatele, zda má přiřazené role definované systémem), auditování, protokoly a relace. .

Mezi jeho případy použití patří jednotné programovací rozhraní, fulltextové vyhledávání, paralelní zpracování dotazů, správa dokumentů, indexování a mnoho dalšího. Je speciálně navržen tak, aby poskytoval správu dat s nízkou latencí pro rozsáhlé interaktivní webové, mobilní a IoT aplikace.

5. Hazelcast IMDG

Hazelcast IMDG (In-Memory Data Grid) je open-source, lehký, rychlý a rozšiřitelný middleware datové mřížky v paměti, který poskytuje elasticky škálovatelné distribuované výpočty v paměti. Hazelcast IMDG běží také na Linuxu, Windows, Mac OS X a jakékoli jiné platformě s nainstalovanou Javou. Podporuje širokou škálu flexibilních a jazykově nativních datových struktur, jako je Map, Set, List, MultiMap, RingBuffer a HyperLogLog.

Hazelcast je peer-to-peer a podporuje jednoduchou škálovatelnost, nastavení clusteru (s možnostmi shromažďovat statistiky, monitorovat pomocí protokolu JMX a spravovat cluster pomocí užitečných nástrojů), distribuované datové struktury a události, rozdělení dat a transakce. Je také nadbytečný, protože uchovává zálohu každého datového záznamu na více členech. Chcete-li škálovat svůj cluster, jednoduše spusťte další instanci, data a zálohy jsou automaticky a rovnoměrně vyváženy.

Poskytuje kolekci užitečných rozhraní API pro přístup k CPU ve vašem clusteru pro maximální rychlost zpracování. Nabízí také distribuované implementace velkého množství vývojářských rozhraní z Javy, jako je Map, Queue, ExecutorService, Lock a JCache.

Jeho bezpečnostní funkce zahrnují členy klastru a ověřování klientů a kontroly přístupu k operacím klientů prostřednictvím bezpečnostních funkcí založených na JAAS. Umožňuje také zachycení soketových připojení a vzdálených operací prováděných klienty, šifrování komunikace na úrovni soketu mezi členy klastru a povolení komunikace soketů SSL/TLS. Ale podle oficiální dokumentace je většina těchto bezpečnostních funkcí nabízena ve verzi Enterprise.

Jeho nejoblíbenějším případem použití je distribuované ukládání do mezipaměti a ukládání dat. Ale může být také nasazen pro shlukování webových relací, nahrazení NoSQL, paralelní zpracování, snadné zasílání zpráv a mnoho dalšího.

6. Mcrouter

Mcrouter je bezplatný router s otevřeným zdrojovým protokolem Memcached pro škálování nasazení Memcached, vyvinutý a spravovaný Facebookem. Obsahuje protokol Memcached ASCII, flexibilní směrování, podporu více clusterů, víceúrovňové mezipaměti, sdružování připojení, více schémat hašování, směrování předpon, replikované fondy, stínování produkčního provozu, online rekonfiguraci a monitorování stavu cíle/automatické převzetí služeb při selhání.

Kromě toho podporuje zahřívání studené mezipaměti, bohaté statistiky a příkazy ladění, spolehlivou kvalitu služby smazání streamu, velké hodnoty a operace vysílání a přichází s podporou IPv6 a SSL.

Používá se na Facebooku a Instagramu jako základní součást infrastruktury mezipaměti, která ve špičce zvládá téměř 5 miliard požadavků za sekundu.

7. Cache laku

Varnish Cache je open-source flexibilní, moderní a víceúčelový akcelerátor webových aplikací, který je umístěn mezi webovými klienty a zdrojovým serverem. Běží na všech moderních platformách Linux, FreeBSD a Solaris (pouze x86). Je to vynikající mezipaměťový modul a akcelerátor obsahu, který můžete nasadit před webový server, jako je NGINX, Apache a mnoho dalších, a naslouchat na výchozím portu HTTP, přijímat a předávat požadavky klientů na webový server a doručovat web. odpověď serverů klientovi.

Varnish Cache působí jako prostředník mezi klienty a původními servery a nabízí několik výhod, přičemž prvkem je ukládání webového obsahu do mezipaměti, aby se zmírnilo zatížení vašeho webového serveru a zlepšila se rychlost doručování klientům.

Po obdržení požadavku HTTP od klienta jej předá backendovému webovému serveru. Jakmile webový server odpoví, Varnish uloží obsah do paměti a doručí odpověď klientovi. Když klient požaduje stejný obsah, Varnish jej obslouží z odpovědi aplikace na posílení mezipaměti. Pokud nemůže obsloužit obsah z mezipaměti, požadavek se předá backendu a odpověď se uloží do mezipaměti a doručí se klientovi.

Funkce Varnish VCL (Varnish Configuration Language – flexibilní jazyk specifický pro doménu) sloužící ke konfiguraci způsobu zpracování požadavků a další, Varnish Moduly (VMODS), což jsou rozšíření pro Varnish Cache.

Pokud jde o zabezpečení, Varnish Cache podporuje protokolování, kontrolu požadavků, omezování, ověřování a autorizaci prostřednictvím VMODS, ale postrádá nativní podporu pro SSL/TLS. Můžete povolit HTTPS pro Varnish Cache pomocí SSL/TLS proxy, jako je Hitch nebo NGINX.

Varnish Cache můžete také použít jako firewall webových aplikací, obránce DDoS útoků, hotlinking protector, load balancer, integrační bod, bránu pro jednotné přihlášení, mechanismus autentizace a autorizace, rychlou opravu pro nestabilní backendy a směrovač požadavků HTTP.

8. Squid Caching Proxy

Dalším bezplatným a open source, vynikajícím a široce používaným řešením proxy a mezipaměti pro Linux je Squid. Jedná se o funkčně bohatý webový server proxy mezipaměti, který poskytuje služby proxy a mezipaměti pro oblíbené síťové protokoly včetně HTTP, HTTPS a FTP. Funguje také na jiných platformách UNIX a Windows.

Stejně jako Varnish Cache přijímá požadavky od klientů a předává je určeným backendovým serverům. Když backend server odpoví, uloží kopii obsahu do mezipaměti a předá ji klientovi. Budoucí požadavky na stejný obsah budou obsluhovány z mezipaměti, což povede k rychlejšímu doručení obsahu klientovi. Optimalizuje tedy datový tok mezi klientem a serverem pro zlepšení výkonu a ukládá často používaný obsah do mezipaměti, aby se snížil provoz v síti a ušetřila se šířka pásma.

Squid přichází s funkcemi, jako je rozložení zátěže přes vzájemně komunikující hierarchie proxy serverů, vytváření dat o vzorcích používání webu (např. statistiky o nejnavštěvovanějších stránkách), umožňuje vám analyzovat, zachytávat, blokovat, nahrazovat nebo upravovat zprávy přiváděné přes proxy.

Podporuje také funkce zabezpečení, jako je rozsáhlé řízení přístupu, autorizace a ověřování, podpora SSL/TLS a protokolování aktivit.

9. NGINX

NGINX (vyslovováno jako Engine-X) je open source, vysoce výkonné, plně vybavené a velmi oblíbené konsolidované řešení pro nastavení webové infrastruktury. Je to HTTP server, reverzní proxy server, poštovní proxy server a generický TCP/UDP proxy server.

NGINX nabízí základní možnosti ukládání do mezipaměti, kde je obsah uložený v mezipaměti uložen v trvalé mezipaměti na disku. Fascinující částí ukládání obsahu do mezipaměti v NGINX je to, že jej lze nakonfigurovat tak, aby doručoval zastaralý obsah z mezipaměti, když nemůže načíst nový obsah z původních serverů.

NGINX nabízí množství bezpečnostních funkcí pro zabezpečení vašich webových systémů, mezi ně patří ukončení SSL, omezení přístupu pomocí základní autentizace HTTP, autentizace na základě výsledku dílčího požadavku, autentizace JWT, omezení přístupu k proxy zdrojům HTTP, omezení přístupu podle geografické polohy, a mnohem víc.

Běžně se nasazuje jako reverzní proxy, vyvažovač zátěže, terminátor SSL/bezpečnostní brána, akcelerátor aplikace/mezipaměť obsahu a brána API v zásobníku aplikací. Používá se také pro streamování médií.

10. Apache Traffic Server

V neposlední řadě máme Apache Traffic Server, open-source, rychlý, škálovatelný a rozšiřitelný caching proxy server s podporou HTTP/1.1 a HTTP/2.0. Je navržen tak, aby zlepšil efektivitu a výkon sítě ukládáním často používaného obsahu do mezipaměti na okraji sítě pro podniky, poskytovatele internetových služeb (Internet Server Providers), poskytovatele páteřních sítí a další.

Podporuje dopředné i zpětné přesměrování HTTP/HTTPS provozu. Může být také nakonfigurován tak, aby běžel v jednom nebo obou režimech současně. Obsahuje trvalé ukládání do mezipaměti, plugin API; podpora pro ICP (Internet Cache Protocol), ESI (Edge Side Within); Keep-ALive a další.

Pokud jde o zabezpečení, Traffic Server podporuje řízení přístupu klientů tím, že vám umožňuje konfigurovat klienty, kteří mají povoleno používat mezipaměť proxy, ukončení SSL pro připojení mezi klienty a sebou samým a mezi ním a původním serverem. Podporuje také ověřování a základní autorizaci prostřednictvím pluginu, protokolování (každého přijatého požadavku a každé zjištěné chyby) a monitorování.

Traffic Server lze použít jako mezipaměť webového proxy, dopředný proxy, reverzní proxy, transparentní proxy, nástroj pro vyrovnávání zatížení nebo v hierarchii mezipaměti.

Závěrečné poznámky

Ukládání do mezipaměti je jednou z nejpřínosnějších a dlouhodobě zavedených technologií doručování webového obsahu, která je primárně navržena pro zvýšení rychlosti webových stránek nebo aplikací. Pomáhá snižovat zatížení serveru, latenci a šířku pásma sítě, protože data uložená v mezipaměti jsou poskytována klientům, čímž se zlepšuje doba odezvy aplikací a rychlost doručování klientům.

V tomto článku jsme zhodnotili nejlepší nástroje pro ukládání do mezipaměti s otevřeným zdrojovým kódem, které lze použít v systémech Linux. Pokud znáte další nástroje pro ukládání do mezipaměti s otevřeným zdrojovým kódem, které zde nejsou uvedeny, podělte se o ně s námi prostřednictvím formuláře pro zpětnou vazbu níže. Můžete se s námi také podělit o své názory na tento článek.