Najbolji alati za predmemoriju otvorenog koda za Linux u 2023


Pouzdani distribuirani računalni sustavi i aplikacije postali su kamen temeljac istaknutih tvrtki, posebno u automatizaciji i upravljanju ključnim poslovnim procesima i pružanju usluga klijentima.

Kao programeri i administratori sustava ovih sustava i aplikacija, od vas se očekuje da pružite sve vrste rješenja informacijske tehnologije (IT) koja će osigurati da imate najučinkovitije dostupne sustave.

To uključuje zadatke kao što su projektiranje, testiranje i implementacija strategija za performanse sustava/aplikacije, pouzdanost, dostupnost i skalabilnost, kako bi se krajnjim korisnicima pružila zadovoljavajuća razina usluge.

Caching jedna je od mnogih, vrlo osnovnih, ali učinkovitih tehnika isporuke aplikacija na koje se možete osloniti. Prije nego što nastavimo, pogledajmo ukratko što je predmemoriranje, gdje i/ili kako se može primijeniti i njegove prednosti.

Što je predmemoriranje ili predmemoriranje sadržaja?

Predmemoriranje (ili Predmemoriranje sadržaja) široko je korištena tehnika pohranjivanja kopija podataka na privremenu lokaciju za pohranu (poznata i kao predmemorija) tako da se podacima može jednostavno i brzo pristupiti kada se dohvate iz izvorne pohrane.

Podaci pohranjeni u predmemoriji mogu uključivati datoteke ili fragmente datoteka (kao što su HTML datoteke, skripte, slike, dokumenti itd.), operacije baze podataka ili zapise, API pozive, DNS zapise itd. ovisno o vrsti i svrsi predmemoriranja.

Predmemorija može biti u obliku hardvera ili softvera. Softverska predmemorija (koja je fokus ovog članka) može se implementirati na različitim slojevima aplikacijskog stoga.

Predmemoriranje može se primijeniti na strani klijenta (ili na sloju prezentacije aplikacije), na primjer, predmemoriranje preglednika ili aplikacije (ili izvanmrežni način). Većina, ako ne i svi moderni preglednici, isporučuju se s implementacijom HTTP predmemorije.

Možda ste čuli za popularnu frazu “očisti predmemoriju” kada pristupate web aplikaciji kako biste mogli vidjeti najnovije podatke ili sadržaj na web stranici ili aplikaciji, umjesto da preglednik koristi staru kopiju sadržaj pohranjen lokalno.

Još jedan primjer predmemoriranja na strani klijenta je DNS predmemoriranje koje se događa na razini operativnog sustava (OS). To je privremena pohrana informacija o prethodnim DNS traženjima od strane OS-a ili web preglednika.

Predmemoriranje se također može implementirati na mrežnoj razini, bilo u LAN ili WAN putem proxyja. Uobičajen primjer ove vrste predmemoriranja je u CDN-ovima (Mreže za isporuku sadržaja), koje su globalno distribuirane mreže web proxy poslužitelja.

Treće, također možete implementirati predmemoriju na izvornom ili pozadinskom poslužitelju(ima). Postoje različiti oblici predmemoriranja na razini poslužitelja, a oni uključuju:

  • spremanje web poslužitelja (za spremanje slika, dokumenata, skripti i tako dalje).
  • predmemorija aplikacije ili memorizacija (koristi se za čitanje datoteka s diska, podataka iz drugih usluga ili procesa ili traženje podataka iz API-ja itd.).
  • spremanje baze podataka u predmemoriju (kako bi se omogućio pristup u memoriji često korištenim podacima kao što su traženi retci baze podataka, rezultati upita i druge operacije).

Imajte na umu da se podaci iz predmemorije mogu pohraniti u bilo kojem sustavu za pohranu, uključujući bazu podataka, datoteku, sistemsku memoriju i tako dalje, ali trebaju biti brži medij od primarnog izvora. U tom smislu, predmemoriranje u memoriji najučinkovitiji je i najčešće korišten oblik predmemoriranja.

Zašto koristiti predmemoriju?

Predmemoriranje nudi brojne prednosti uključujući sljedeće:

  • Na razini baze podataka poboljšava performanse čitanja na mikrosekunde za podatke u predmemoriji. Također možete koristiti predmemoriju za povratno pisanje za poboljšanje performansi pisanja, gdje se podaci zapisuju u memoriju i kasnije zapisuju na disk ili glavnu pohranu u određenim intervalima. Ali aspekt integriteta podataka može imati potencijalno katastrofalne implikacije. Na primjer, kada se sustav sruši neposredno prije nego što se podaci pošalju u glavnu pohranu.
  • Na razini aplikacije, predmemorija može pohraniti često čitane podatke unutar samog procesa aplikacije, čime se smanjuje vrijeme traženja podataka sa sekundi na mikrosekunde, posebno preko mreže.
  • Uzimajući u obzir ukupnu izvedbu aplikacije i poslužitelja, predmemoriranje pomaže u smanjenju opterećenja vašeg poslužitelja, latencije i propusnosti mreže jer se predmemorirani podaci poslužuju klijentima, čime se poboljšava vrijeme odgovora i brzina isporuke klijentima.
  • Predmemoriranje također omogućuje dostupnost sadržaja, posebno putem CDN-ova, i mnoge druge pogodnosti.

U ovom ćemo članku pregledati neke od najboljih alata otvorenog koda (spremanje aplikacija/baza podataka i spremanje proxy poslužitelja) za implementaciju na strani poslužitelja predmemoriranje u Linuxu.

1. Redis

Redis (REmote Dictionary Server u cijelosti) je besplatan i otvorenog koda, brz, visokoučinkovit i fleksibilan distribuirani računalni sustav u memoriji koji se može koristiti iz većine ako ne i svih programskih jezika.

To je pohrana strukture podataka u memoriji koja radi kao mehanizam za predmemoriju, trajna baza podataka na disku u memoriji i broker poruka. Iako je razvijen i testiran na Linuxu (preporučena platforma za implementaciju) i OS X, Redis također radi u drugim POSIX sustavima kao što je *BSD, bez ikakvih vanjskih ovisnosti.

Redis podržava brojne podatkovne strukture kao što su nizovi, hashovi, popisi, skupovi, sortirani skupovi, bitmape, tokovi itd. To programerima omogućuje korištenje određene strukture podataka za rješavanje određenog problema. Podržava automatske operacije na svojoj podatkovnoj strukturi kao što je dodavanje nizu, guranje elemenata na popis, povećanje vrijednosti hash-a, izračunavanje presjeka skupova i više.

Njegove ključne značajke uključuju Redis master-slave replikaciju (koja je asinkrona prema zadanim postavkama), visoku dostupnost i automatski failover koji se nudi korištenjem Redis Sentinela, Redis klaster (možete horizontalno skalirati dodavanjem više čvorova klastera) i particioniranje podataka (distribucija podataka između više Redisa instance). Također sadrži podršku za transakcije, Lua skriptiranje, niz opcija postojanosti i enkripciju komunikacije klijent-poslužitelj.

Budući da je baza podataka u memoriji, ali postojana na disku, Redis nudi najbolje performanse kada najbolje radi sa skupom podataka u memoriji. Međutim, možete ga koristiti s bazom podataka na disku kao što su MySQL, PostgreSQL i mnoge druge. Na primjer, možete uzeti vrlo teške male podatke u Redisu i ostaviti druge dijelove podataka u bazi podataka na disku.

Redis podržava sigurnost na mnogo načina: jedan korištenjem značajke “protected-mode” za zaštitu instanci Redisa od pristupa s vanjskih mreža. Također podržava autentifikaciju klijent-poslužitelj (gdje se lozinka konfigurira na poslužitelju i daje u klijentu) i TLS na svim komunikacijskim kanalima kao što su veze klijenta, replikacijske veze, protokol sabirnice Redis klastera i više.

Redis ima mnogo slučajeva upotrebe koji uključuju predmemoriranje baze podataka, predmemoriranje cijele stranice, upravljanje podacima o korisničkim sesijama, pohranu API odgovora, sustav za razmjenu poruka Objavi/Pretplati se, red poruka i još mnogo toga. Oni se mogu primijeniti u igrama, aplikacijama za društveno umrežavanje, RSS feedovima, analizi podataka u stvarnom vremenu, korisničkim preporukama i tako dalje.

2. Memcached

Memcached je besplatan i otvorenog koda, jednostavan, ali moćan, distribuirani sustav predmemoriranja memorijskih objekata. To je pohrana ključeva i vrijednosti u memoriji za male dijelove podataka kao što su rezultati poziva baze podataka, API poziva ili renderiranja stranice. Radi na operativnim sustavima sličnim Unixu uključujući Linux i OS X te također na Microsoft Windows.

Budući da je alat za razvojne programere, namijenjen je za korištenje u povećanju brzine dinamičkih web-aplikacija pohranjivanjem sadržaja u predmemoriju (prema zadanim postavkama, predmemorija Rijeđe korišteno (LRU)) čime se smanjuje učitavanje baze podataka na disku – djeluje kao kratkoročna memorija za aplikacije. Nudi API za najpopularnije programske jezike.

Memcached podržava nizove kao jedinu vrstu podataka. Ima arhitekturu klijent-poslužitelj, gdje se polovica logike odvija na strani klijenta, a druga polovica na strani poslužitelja. Važno je da klijenti razumiju kako odabrati na koji će poslužitelj pisati ili s kojeg će čitati za stavku. Također, klijent vrlo dobro zna što učiniti u slučaju da se ne može spojiti na server.

Iako je to distribuirani sustav predmemoriranja, stoga podržava klasteriranje, Memcached poslužitelji međusobno su međusobno odspojeni (tj. nisu svjesni jedni drugih). To znači da nema podrške za replikaciju kao u Redisu. Oni također razumiju kako pohraniti i dohvatiti predmete i odrediti kada izbaciti ili ponovno upotrijebiti memoriju. Možete povećati dostupnu memoriju dodavanjem više poslužitelja.

Podržava autentifikaciju i enkripciju putem TLS-a od Memcached 1.5.13, ali ova je značajka još uvijek u eksperimentalnoj fazi.

3. Apache Ignite

Apache Ignite također je besplatan i otvorenog koda, horizontalno skalabilan distribuirani ključ-vrijednost u memoriji za pohranu, predmemoriju i sustav baze podataka s više modela koji pruža moćne API-je za obradu za izračunavanje distribuiranih podataka. To je također podatkovna mreža u memoriji koja se može koristiti ili u memoriji ili s Ignite izvornom postojanošću. Radi na sustavima sličnim UNIX-u kao što su Linux i Windows.

Sadrži višeslojnu pohranu, potpunu SQL podršku i ACID (Atomicity, Consistency, Isolation, Durability) transakcije (podržane samo na API razini ključ-vrijednost) preko višestrukih čvorova klastera, kolocirane obrade, i strojno učenje. Podržava automatsku integraciju sa svim bazama podataka trećih strana, uključujući bilo koje RDBMS (kao što su MySQL, PostgreSQL, Oracle Database i tako dalje) ili NoSQL trgovine.

Važno je napomenuti da iako Ignite radi kao SQL pohrana podataka, nije u potpunosti SQL baza podataka. Jasno obrađuje ograničenja i indekse u usporedbi s tradicionalnim bazama podataka; podržava primarne i sekundarne indekse, ali samo primarni indeksi se koriste za provođenje jedinstvenosti. Osim toga, nema podršku za ograničenja stranog ključa.

Ignite također podržava sigurnost dopuštajući vam da omogućite autentifikaciju na poslužitelju i pružanje korisničkih vjerodajnica klijentima. Također postoji podrška za SSL socket komunikaciju kako bi se osigurala sigurna veza među svim Ignite čvorovima.

Ignite ima mnogo slučajeva upotrebe koji uključuju sustave za predmemoriju, ubrzanje opterećenja sustava, obradu podataka u stvarnom vremenu i analitiku. Također se može koristiti kao platforma usmjerena na graf.

4. Couchbase poslužitelj

Couchbase Server također je open-source, distribuirana, NoSQL baza podataka orijentirana na dokumente koja pohranjuje podatke kao stavke u formatu ključ-vrijednost. Radi na Linuxu i drugim operativnim sustavima kao što su Windows i Mac OS X. Koristi jezik upita N1QL, bogat značajkama, orijentiran na dokumente, koji pruža moćne usluge upita i indeksiranja za podršku operacijama s podacima u trajanju od manje od milisekunde.

Njegove značajne značajke su brza pohrana ključeva i vrijednosti s upravljanom predmemorijom, namjenski izrađeni indekseri, moćan mehanizam za upite, skalirana arhitektura (višedimenzionalno skaliranje), integracija velikih podataka i SQL-a, sigurnost punog stoga i visoka dostupnost.

Couchbase Server dolazi s izvornom podrškom klastera za više instanci, gdje alat za upravljanje klasterom koordinira sve aktivnosti čvorova i klijentima pruža jednostavno sučelje za cijeli klaster. Ono što je važno, možete dodati, ukloniti ili zamijeniti čvorove prema potrebi, bez prekida rada. Također podržava replikaciju podataka preko čvorova klastera i selektivnu replikaciju podataka preko podatkovnih centara.

Implementira sigurnost putem TLS-a koristeći namjenske Couchbase Server-portove, različite mehanizme provjere autentičnosti (koristeći vjerodajnice ili certifikate), kontrolu pristupa temeljenu na ulogama (kako bi se provjerilo ima li svakog autentificiranog korisnika sustavno definirane uloge koje su mu dodijeljene), reviziju, zapisnike i sesije .

Njegovi slučajevi upotrebe uključuju objedinjeno programsko sučelje, pretraživanje cijelog teksta, paralelnu obradu upita, upravljanje dokumentima, indeksiranje i još mnogo toga. Posebno je dizajniran za pružanje upravljanja podacima niske latencije za velike interaktivne web, mobilne i IoT aplikacije.

5. Hazelcast IMDG

Hazelcast IMDG (In-Memory Data Grid) je open-source, lagan, brz i proširiv in-memory data grid međuprogram koji pruža elastično skalabilno distribuirano In-Memory računalstvo. Hazelcast IMDG također radi na Linuxu, Windowsu, Mac OS Xu i bilo kojoj drugoj platformi s instaliranom Javom. Podržava širok izbor fleksibilnih i jezičnih struktura podataka kao što su Map, Set, List, MultiMap, RingBuffer i HyperLogLog.

Hazelcast je ravnopravan i podržava jednostavnu skalabilnost, postavljanje klastera (s opcijama za prikupljanje statistike, nadzor putem JMX protokola i upravljanje klasterom pomoću korisnih uslužnih programa), distribuirane strukture podataka i događaje, dijeljenje podataka , i transakcije. Također je suvišan jer čuva sigurnosnu kopiju svakog unosa podataka na više članova. Kako biste skalirali svoj klaster, jednostavno pokrenite drugu instancu, podaci i sigurnosne kopije automatski se ravnomjerno balansiraju.

Pruža zbirku korisnih API-ja za pristup procesorima u vašem klasteru za maksimalnu brzinu obrade. Također nudi distribuirane implementacije velikog broja sučelja prilagođenih programerima iz Jave kao što su Map, Queue, ExecutorService, Lock i JCache.

Njegove sigurnosne značajke uključuju članove klastera i provjeru autentičnosti klijenta i kontrole pristupa operacijama klijenta putem sigurnosnih značajki temeljenih na JAAS-u. Također omogućuje presretanje socket veza i daljinskih operacija koje izvršavaju klijenti, komunikacijsku enkripciju na razini utičnice između članova klastera i omogućavanje SSL/TLS socket komunikacije. No, prema službenoj dokumentaciji, većina ovih sigurnosnih značajki nudi se u Enterprise verziji.

Njegov najpopularniji slučaj upotrebe je distribuirano predmemoriranje u memoriji i pohrana podataka. Ali također se može implementirati za klasteriranje web sesija, zamjenu NoSQL-a, paralelnu obradu, jednostavno slanje poruka i još mnogo toga.

6. Mcrouter

Mcrouter je besplatan usmjerivač Memcached protokola otvorenog koda za skaliranje Memcached implementacija, koji je razvio i održava Facebook. Sadrži Memcached ASCII protokol, fleksibilno usmjeravanje, podršku za više klastera, predmemorije na više razina, skupljanje veza, višestruke sheme raspršivanja, usmjeravanje prefiksa, replicirane skupove, sjenčanje proizvodnog prometa, mrežnu rekonfiguraciju i praćenje ispravnosti odredišta/automatsko prebacivanje.

Dodatno, podržava zagrijavanje hladne predmemorije, bogatu statistiku i naredbe za otklanjanje pogrešaka, pouzdanu kvalitetu usluge brisanja toka, velike vrijednosti i operacije emitiranja, a dolazi s IPv6 i SSL podrškom.

Koristi se na Facebooku i Instagramu kao temeljna komponenta infrastrukture predmemorije, za obradu gotovo 5 milijardi zahtjeva u sekundi na vrhuncu.

7. Varnish Cache

Varnish Cache fleksibilan je, moderan i višenamjenski akcelerator web aplikacija otvorenog koda koji se nalazi između web klijenata i izvornog poslužitelja. Radi na svim modernim Linux, FreeBSD i Solaris (samo x86) platformama. To je izvrstan mehanizam za predmemoriju i akcelerator sadržaja koji možete postaviti ispred web poslužitelja kao što su NGINX, Apache i mnogi drugi, za slušanje zadanog HTTP priključka za primanje i prosljeđivanje zahtjeva klijenata web poslužitelju i isporuku weba odgovor poslužitelja klijentu.

Iako djeluje kao posrednik između klijenata i izvornih poslužitelja, Varnish Cache nudi nekoliko prednosti, a element je predmemorija web sadržaja u memoriji kako bi se smanjilo opterećenje web poslužitelja i poboljšala brzina isporuke klijentima.

Nakon što primi HTTP zahtjev od klijenta, prosljeđuje ga pozadinskom web-poslužitelju. Nakon što web poslužitelj odgovori, Varnish sprema sadržaj u memoriju i isporučuje odgovor klijentu. Kada klijent zatraži isti sadržaj, Varnish će ga poslužiti iz odgovora aplikacije koja pojačava predmemoriju. Ako ne može poslužiti sadržaj iz predmemorije, zahtjev se prosljeđuje u pozadinu, a odgovor se predmemorira i isporučuje klijentu.

Varnish sadrži VCL (Varnish Configuration Language – fleksibilan jezik specifičan za domenu) koji se koristi za konfiguriranje načina na koji se postupa sa zahtjevima i više, Varnish Moduli (VMODS) koji su proširenja za Varnish Cache.

Što se tiče sigurnosti, Varnish Cache podržava bilježenje, inspekciju zahtjeva, prigušivanje, autentifikaciju i autorizaciju putem VMODS-a, ali nedostaje izvorna podrška za SSL/TLS. Možete omogućiti HTTPS za Varnish Cache koristeći SSL/TLS proxy kao što je Hitch ili NGINX.

Također možete koristiti Varnish Cache kao vatrozid web aplikacije, zaštitu od DDoS napada, zaštitu od hotlinkinga, balanser opterećenja, integracijsku točku, gateway za jednokratnu prijavu, mehanizam politike autentifikacije i autorizacije, brzi popravak za nestabilne pozadine i usmjerivač HTTP zahtjeva.

8. Squid Caching Proxy

Još jedno besplatno i otvoreno izvorno, izvanredno i naširoko korišteno rješenje za proxy i predmemoriju za Linux je Squid. To je značajkama bogat web proxy cache poslužiteljski softver koji pruža proxy i cache usluge za popularne mrežne protokole uključujući HTTP, HTTPS i FTP. Također radi na drugim UNIX platformama i Windowsima.

Baš kao Varnish Cache, prima zahtjeve od klijenata i prosljeđuje ih određenim pozadinskim poslužiteljima. Kada pozadinski poslužitelj odgovori, pohranjuje kopiju sadržaja u predmemoriju i prosljeđuje je klijentu. Budući zahtjevi za istim sadržajem posluživat će se iz predmemorije, što će rezultirati bržom isporukom sadržaja klijentu. Stoga optimizira protok podataka između klijenta i poslužitelja radi poboljšanja performansi i predmemorije često korištenog sadržaja radi smanjenja mrežnog prometa i uštede propusnosti.

Squid dolazi sa značajkama kao što je raspodjela opterećenja preko međusobno komunicirajućih hijerarhija proxy poslužitelja, proizvodnja podataka koji se tiču obrazaca korištenja weba (npr. statistike o najposjećenijim stranicama), omogućuje vam analizu, snimanje, blokiranje, zamjenu ili izmjenu poruka koje se proksiju.

Također podržava sigurnosne značajke kao što su bogata kontrola pristupa, autorizacija i autentifikacija, SSL/TLS podrška i bilježenje aktivnosti.

9. NGINX

NGINX (izgovara se kao Engine-X) je open-source, visokoučinkovito, potpuno opremljeno i vrlo popularno konsolidirano rješenje za postavljanje web infrastrukture. To je HTTP poslužitelj, obrnuti proxy poslužitelj, proxy poslužitelj e-pošte i generički TCP/UDP proxy poslužitelj.

NGINX nudi osnovne mogućnosti predmemorije gdje se predmemorirani sadržaj pohranjuje u trajnu predmemoriju na disku. Fascinantan dio o predmemoriranju sadržaja u NGINX-u je to što se može konfigurirati da isporučuje ustajali sadržaj iz predmemorije kada ne može dohvatiti svježi sadržaj s izvornih poslužitelja.

NGINX nudi mnoštvo sigurnosnih značajki za zaštitu vaših web sustava, uključujući SSL završetak, ograničavanje pristupa s osnovnom HTTP autentifikacijom, autentifikaciju temeljenu na rezultatu podzahtjeva, JWT autentifikaciju, ograničavanje pristupa proxy HTTP resursima, ograničavanje pristupa geografskom lokacijom, i mnogo više.

Obično se postavlja kao obrnuti proxy, balanser opterećenja, SSL terminator/sigurnosni pristupnik, akcelerator aplikacija/predmemorija sadržaja i API pristupnik u hrpu aplikacija. Također se koristi za streaming medija.

10. Apache prometni poslužitelj

Na kraju, ali ne manje važno, imamo Apache Traffic Server, otvoreni, brzi, skalabilni i proširivi proxy poslužitelj za predmemoriju s podrškom za HTTP/1.1 i HTTP/2.0. Dizajniran je za poboljšanje mrežne učinkovitosti i performansi pohranjivanjem sadržaja kojem se često pristupa u predmemoriju na rubu mreže, za poduzeća, ISP-ove (davatelje internetskih poslužitelja), pružatelje okosnice i još mnogo toga.

Podržava i naprijed i nazad proxy HTTP/HTTPS prometa. Također se može konfigurirati da radi u jednom ili u oba načina istovremeno. Sadrži trajno predmemoriranje, API-je dodataka; podrška za ICP (Internet Cache Protocol), ESI (Edge Side Includes); Keep-ALive i više.

Što se tiče sigurnosti, Traffic Server podržava kontrolu pristupa klijenta dopuštajući vam da konfigurirate klijente kojima je dopušteno korištenje proxy predmemorije, SSL prekidanje za veze između klijenata i sebe te između sebe i izvornog poslužitelja. Također podržava autentifikaciju i osnovnu autorizaciju putem dodatka, bilježenje (svakog primljenog zahtjeva i svake greške koju otkrije) i praćenje.

Traffic Server se može koristiti kao web proxy predmemorija, prosljeđujući proxy, obrnuti proxy, transparentni proxy, balanser opterećenja ili u hijerarhiji predmemorije.

Zaključne napomene

Predmemoriranje jedna je od najkorisnijih i dugotrajnih tehnologija za isporuku web-sadržaja koja je prvenstveno osmišljena za povećanje brzine web-mjesta ili aplikacija. Pomaže u smanjenju opterećenja vašeg poslužitelja, latencije i propusnosti mreže jer se predmemorirani podaci poslužuju klijentima, čime se poboljšava vrijeme odgovora aplikacije i brzina isporuke klijentima.

U ovom smo članku pregledali najbolje alate za predmemoriju otvorenog koda za korištenje na Linux sustavima. Ako znate druge alate za predmemoriju otvorenog koda koji nisu ovdje navedeni, podijelite ih s nama putem obrasca za povratne informacije u nastavku. Također možete s nama podijeliti svoje mišljenje o ovom članku.