Najbolji alati za keširanje otvorenog koda za Linux u 2023


Pouzdani distribuirani računarski sistemi i aplikacije postali su kamen temeljac istaknutih preduzeća, posebno u automatizaciji i upravljanju kritičnim poslovnim procesima i pružanju usluga klijentima.

Kao programeri i sistem administratori ovih sistema i aplikacija, od vas se očekuje da obezbedite sve vrste rešenja informacionih tehnologija (IT) koja će vam obezbediti najefikasnije sisteme na raspolaganju.

Ovo uključuje zadatke kao što su dizajniranje, testiranje i implementacija strategija za performanse sistema/aplikacije, pouzdanost, dostupnost i skalabilnost, kako bi se krajnjim korisnicima pružio zadovoljavajući nivo usluge.

Keširanje je jedna od mnogih, vrlo osnovnih, ali efikasnih tehnika isporuke aplikacija na koje se možete osloniti. Prije nego što krenemo dalje, pogledajmo ukratko šta je keširanje, gdje i/ili kako se može primijeniti i njegove prednosti.

Šta je keširanje ili keširanje sadržaja?

Keširanje (ili Keširanje sadržaja) je široko korištena tehnika pohranjivanja kopija podataka na privremenu lokaciju za pohranu (također poznata kao keš memorija) tako da se podacima može lako i brzo pristupiti kada se preuzmu iz originalne memorije.

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

Keš memorija može biti u obliku hardvera ili softvera. Keš memorija zasnovana na softveru (koja je fokus ovog članka) može biti implementirana na različitim slojevima steka aplikacija.

Keširanje se može primijeniti na strani klijenta (ili na sloju prezentacije aplikacije), na primjer, keširanje pretraživača ili keširanje aplikacije (ili offline način rada). Većina, ako ne i svi moderni pretraživači se isporučuju sa implementacijom HTTP keša.

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

Drugi primjer keširanja na strani klijenta je DNS keširanje koje se dešava na nivou operativnog sistema (OS). To je privremeno skladište informacija o prethodnim DNS pretragama od strane OS ili web pretraživača.

Keširanje se također može implementirati na nivou mreže, bilo u LAN ili WAN putem proksija. Uobičajeni primjer ove vrste keširanja je u CDN-ovima (Mrežama za isporuku sadržaja), koji su globalno distribuirane mreže web proxy servera.

Treće, takođe možete implementirati keširanje na izvornom ili pozadinskom serveru(ovima). Postoje različiti oblici keširanja na nivou servera, oni uključuju:

  • Keširanje web servera (za keširanje slika, dokumenata, skripti i tako dalje).
  • Keširanje aplikacije ili memorisanje (koristi se za čitanje datoteka s diska, podataka iz drugih usluga ili procesa, ili za traženje podataka od API-ja, itd.).
  • Keširanje baze podataka (da bi se omogućio pristup u memoriji često korištenim podacima kao što su traženi redovi baze podataka, rezultati upita i druge operacije).

Imajte na umu da se podaci iz keš memorije mogu pohraniti u bilo koji sistem skladištenja uključujući bazu podataka, datoteku, sistemsku memoriju itd., ali bi trebao biti brži medij od primarnog izvora. U tom smislu, keširanje u memoriji je najefikasniji i najčešće korišten oblik keširanja.

Zašto koristiti keširanje?

Keširanje nudi brojne prednosti uključujući sljedeće:

  • Na nivou baze podataka, poboljšava performanse čitanja na mikrosekunde za keširane podatke. Također možete koristiti keš za vraćanje upisivanja za poboljšanje performansi pisanja, gdje se podaci zapisuju u memoriju i kasnije upisuju na disk ili glavnu memoriju u određenim intervalima. Ali aspekt integriteta podataka može imati potencijalno katastrofalne implikacije. Na primjer, kada se sistem sruši neposredno prije nego što se podaci predaju u glavnu memoriju.
  • Na nivou aplikacije, keš memorija može pohraniti podatke koji se često čitaju unutar samog procesa aplikacije, čime se skraćuje vrijeme traženja podataka sa sekundi na mikrosekunde, posebno preko mreže.
  • Uzimajući u obzir ukupne performanse aplikacije i servera, keširanje pomaže da se smanji opterećenje vašeg servera, kašnjenje i propusni opseg mreže dok se keširani podaci serviraju klijentima, čime se poboljšava vrijeme odgovora i brzina isporuke klijentima.
  • Keširanje također omogućava dostupnost sadržaja, posebno preko CDN-a, i mnoge druge pogodnosti.

U ovom članku ćemo pregledati neke od najboljih alata otvorenog koda (keširanje aplikacija/baze podataka i keširanje proxy servera) za implementaciju na strani servera keširanje u Linuxu.

1. Redis

Redis (Udaljeni rječnički server u potpunosti) je besplatan i otvorenog koda, brz, visokih performansi i fleksibilan distribuirani računarski sistem u memoriji koji se može koristiti iz većine, ako ne i svih programskih jezika.

To je skladište strukture podataka u memoriji koje radi kao mehanizam za keširanje, postojana baza podataka na disku u memoriji i posrednik poruka. Iako je razvijen i testiran na Linuxu (preporučena platforma za implementaciju) i OS X, Redis radi i na drugim POSIX sistemima kao što je *BSD, bez ikakvih vanjskih ovisnosti.

Redis podržava brojne strukture podataka kao što su stringovi, hashovi, liste, skupovi, sortirani skupovi, bitmape, tokovi i još mnogo toga. Ovo omogućava programerima da koriste specifičnu strukturu podataka za rješavanje određenog problema. Podržava automatske operacije na svojoj strukturi podataka kao što je dodavanje nizu, guranje elemenata na listu, povećanje vrijednosti heša, presjek računalnog skupa i još mnogo toga.

Njegove ključne karakteristike uključuju Redis master-slave replikaciju (koja je asinhrona prema zadanim postavkama), visoku dostupnost i automatsko prebacivanje preko greške koje se nudi pomoću Redis Sentinel-a, Redis klaster (možete horizontalno skalirati dodavanjem više čvorova klastera) i particioniranje podataka (distribucija podataka između više Redis-a). instance). Takođe sadrži podršku za transakcije, Lua skriptovanje, niz opcija postojanosti i enkripciju komunikacije klijent-server.

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 sa bazom podataka na disku kao što su MySQL, PostgreSQL i još mnogo toga. Na primjer, u Redis-u možete uzeti male podatke koji su teški za pisanje i ostaviti druge dijelove podataka u bazi podataka na disku.

Redis podržava sigurnost na mnogo načina: jedan korištenjem funkcije “protected-mode” za osiguranje Redis instanci od pristupa sa vanjskih mreža. Takođe podržava autentifikaciju klijent-server (gde je lozinka konfigurisana na serveru i obezbeđena u klijentu) i TLS na svim komunikacijskim kanalima kao što su klijentske veze, veze za replikaciju, Redis Cluster bus protokol i još mnogo toga.

Redis ima vrlo mnogo slučajeva upotrebe koji uključuju keširanje baze podataka, keširanje cijele stranice, upravljanje podacima o sesijama korisnika, skladištenje API odgovora, sistem za razmjenu poruka za objavljivanje/pretplatu, red poruka i još mnogo toga. Oni se mogu primijeniti u igrama, aplikacijama za društvene mreže, RSS feedovima, analizi podataka u realnom vremenu, preporukama korisnika itd.

2. Memcached

Memcached je besplatan i open-source, jednostavan, ali moćan, distribuirani sistem za keširanje memorijskih objekata. To je skladište ključ/vrijednost u memoriji za male komade podataka kao što su rezultati poziva baze podataka, API poziva ili prikazivanja stranica. Radi na operativnim sistemima sličnim Unixu, uključujući Linux i OS X, kao i na Microsoft Windows.

Budući da je alat za programere, namijenjen je za korištenje u povećanju brzine dinamičkih web aplikacija keširanjem sadržaja (podrazumevano, Najmanje nedavno korištena (LRU) keš memorija) č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 jedini tip podataka. Ima klijent-server arhitekturu, gde se polovina logike dešava na strani klijenta, a druga polovina na strani servera. Važno je da klijenti razumiju kako odabrati na koji server će pisati ili čitati za stavku. Takođe, klijent vrlo dobro zna šta da radi u slučaju da ne može da se poveže sa serverom.

Iako se radi o distribuiranom sistemu za keširanje, tako da podržava grupisanje, Memcached serveri su međusobno isključeni (tj. nisu svjesni jedan drugog). To znači da nema podrške za replikaciju kao u Redisu. Oni također razumiju kako da pohrane i dohvate stavke, i upravljaju kada da isele ili ponovo koriste memoriju. Dostupnu memoriju možete povećati dodavanjem više servera.

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

3. Apache Ignite

Apache Ignite, je također besplatan i open-source, horizontalno skalabilan distribuiran u memoriji ključ/vrijednost skladišta, keš memorije i višemodelni sistem baze podataka koji pruža moćne API-je za obradu za računanje distribuiranih podataka. To je također mreža podataka u memoriji koja se može koristiti ili u memoriji ili sa Ignite izvornom postojanošću. Radi na sistemima sličnim UNIX-u kao što su Linux i također Windows.

Sadrži višeslojnu pohranu, kompletnu SQL podršku i ACID (atomičnost, konzistentnost, izolaciju, izdržljivost) transakcije (podržano samo na nivou API-ja ključ/vrijednost) u više čvorova klastera, ko-locirano procesiranje, i mašinsko učenje. Podržava automatsku integraciju sa bazama podataka trećih strana, uključujući sve RDBMS (kao što su MySQL, PostgreSQL, Oracle Database, itd.) ili NoSQL prodavnice.

Važno je napomenuti da iako Ignite radi kao SQL skladište podataka, on nije u potpunosti SQL baza podataka. On jasno rukuje ograničenjima i indeksima u poređenju sa tradicionalnim bazama podataka; podržava primarne i sekundarne indekse, ali se samo primarni indeksi koriste za provođenje jedinstvenosti. Osim toga, nema podršku za ograničenja stranog ključa.

Ignite takođe podržava sigurnost tako što vam omogućava da omogućite autentifikaciju na serveru i pružate korisničke akreditive klijentima. Tu je i podrška za komunikaciju SSL utičnice kako bi se osigurala sigurna veza između svih Ignite čvorova.

Ignite ima mnogo slučajeva upotrebe koji uključuju sisteme za keširanje, ubrzanje radnog opterećenja sistema, obradu podataka u realnom vremenu i analitiku. Može se koristiti i kao platforma usmjerena na grafove.

4. Couchbase server

Couchbase Server je također otvorena, distribuirana, NoSQL dokumentno orijentirana baza podataka angažmana koja pohranjuje podatke kao stavke u formatu ključ/vrijednost. Radi na Linux-u i drugim operativnim sistemima kao što su Windows i Mac OS X. Koristi jezik za upite bogat značajkama i dokumentima orijentiran nazvan N1QL koji pruža moćne usluge upita i indeksiranja za podršku operacijama koje traju ispod milisekunde.

Njegove značajne karakteristike su brzo skladište ključ-vrijednost sa upravljanom keš memorijom, namenski izgrađeni indekseri, moćan mehanizam za upite, arhitektura za skaliranje (višedimenzionalno skaliranje), velika data i SQL integracija, sigurnost punog steka i visoka dostupnost.

Couchbase Server dolazi s izvornom podrškom za više instanci za klastere, gdje alat za upravljanje klasterima koordinira sve aktivnosti čvora i klijentima pruža jednostavno sučelje za cijeli klaster. Važno je da možete dodati, ukloniti ili zamijeniti čvorove po potrebi, bez zastoja. Takođe podržava replikaciju podataka preko čvorova klastera i selektivnu replikaciju podataka u centrima podataka.

Implementira sigurnost putem TLS-a koristeći namjenske serverske portove Couchbase, različite mehanizme provjere autentičnosti (koristeći vjerodajnice ili certifikate), kontrolu pristupa zasnovanu na ulogama (da provjeri svakog autentificiranog korisnika za uloge definirane sistemom koje su im dodijeljene), reviziju, zapisnike i sesije .

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

5. Hazelcast IMDG

Hazelcast IMDG (In-Memory Data Grid) je otvorenog koda, lagan, brz i proširiv međuverski softver mreže podataka u memoriji, koji pruža elastično skalabilno distribuirano računanje u memoriji. Hazelcast IMDG također radi na Linux, Windows, Mac OS X i bilo kojoj drugoj platformi sa instaliranom Javom. Podržava široku lepezu fleksibilnih i jezičkih struktura podataka kao što su Map, Set, List, MultiMap, RingBuffer i HyperLogLog.

Hazelcast je peer-to-peer i podržava jednostavnu skalabilnost, postavljanje klastera (sa opcijama za prikupljanje statistike, praćenje putem JMX protokola i upravljanje klasterom s korisnim uslužnim programima), distribuirane strukture podataka i događaje, porcioniranje podataka , i transakcije. Također je suvišan jer čuva sigurnosnu kopiju svakog unosa podataka na više članova. Da biste skalirali svoj klaster, jednostavno pokrenite drugu instancu, podaci i sigurnosne kopije su automatski i ravnomjerno izbalansirani.

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

Njegove sigurnosne karakteristike uključuju članove klastera i autentifikaciju klijenta i provjere kontrole pristupa na klijentskim operacijama putem sigurnosnih funkcija zasnovanih na JAAS-u. Takođe omogućava presretanje utičnica i daljinskih operacija koje izvršavaju klijenti, enkripciju komunikacije na nivou utičnice između članova klastera i omogućavanje SSL/TLS komunikacije utičnice. Ali prema službenoj dokumentaciji, većina ovih sigurnosnih funkcija se nudi u Enterprise verziji.

Njegov najpopularniji slučaj upotrebe je distribuirano keširanje u memoriji i skladištenje podataka. Ali također se može primijeniti za grupisanje web sesija, zamjenu NoSQL-a, paralelnu obradu, jednostavnu razmjenu poruka i još mnogo toga.

6. Mcrouter

Mcrouter je besplatni ruter Memcached protokola otvorenog koda za skaliranje Memcached implementacija, koji je razvio i održava Facebook. Poseduje Memcached ASCII protokol, fleksibilno rutiranje, podršku za više klastera, keš memorije na više nivoa, grupisanje konekcija, višestruke šeme heširanja, rutiranje prefiksa, replicirane grupe, sjenčanje proizvodnog saobraćaja, rekonfiguraciju na mreži i praćenje zdravlja odredišta/automatsko prebacivanje na grešku.

Osim toga, podržava zagrijavanje hladnog keša, bogate statistike i komande za otklanjanje grešaka, pouzdan kvalitet usluge brisanja strima, velike vrijednosti i operacije emitiranja, a dolazi s podrškom za IPv6 i SSL.

Koristi se na Facebooku i Instagramu kao osnovna komponenta keš infrastrukture za obradu skoro 5 milijardi zahtjeva u sekundi na vrhuncu.

7. Lak Cache

Varnish Cache je fleksibilan, moderan i višenamjenski akcelerator web aplikacija otvorenog koda koji se nalazi između web klijenata i izvornog servera. Radi na svim modernim Linux, FreeBSD i Solaris (samo x86) platformama. To je odličan mehanizam za keširanje i akcelerator sadržaja koji možete postaviti ispred web servera kao što su NGINX, Apache i mnogi drugi, da slušate na zadanom HTTP portu da primate i prosljeđujete zahtjeve klijenata web serveru i isporučujete web odgovor servera na klijenta.

Dok djeluje kao posrednik između klijenata i izvornih servera, Varnish Cache nudi nekoliko prednosti, a element je keširanje web sadržaja u memoriji kako bi se ublažilo opterećenje vašeg web servera i poboljšala brzina isporuke klijentima.

Nakon što primi HTTP zahtjev od klijenta, on ga prosljeđuje na backend web server. Kada web server odgovori, Varnish kešira sadržaj u memoriju i isporučuje odgovor klijentu. Kada klijent zatraži isti sadržaj, Varnish će ga poslužiti iz odgovora aplikacije za povećanje predmemorije. Ako ne može poslužiti sadržaj iz keša, zahtjev se prosljeđuje backendu, a odgovor se kešira i isporučuje klijentu.

Varnish sadrži VCL (Jezik konfiguracije laka – fleksibilan jezik specifičan za domenu) koji se koristi za konfiguriranje načina na koji se obrađuju zahtjevi i više, Varnish Moduli (VMODS) koji su ekstenzije za Varnish Cache.

Što se tiče sigurnosti, Varnish Cache podržava evidentiranje, inspekciju zahtjeva, prigušivanje, autentifikaciju i autorizaciju putem VMODS-a, ali mu 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 firewall web aplikacije, zaštitnik od DDoS napada, zaštitnik hotlinkinga, balansator opterećenja, integracijsku tačku, gateway za jednokratnu prijavu, mehanizam politike autentikacije i autorizacije, brzo rješenje za nestabilne pozadine i ruter HTTP zahtjeva.

8. Squid proxy za keširanje

Još jedno besplatno i otvorenog koda, izvanredno i široko korišteno proxy i rješenje za keširanje za Linux je Squid. To je softver za web proxy keš server koji pruža usluge proxyja i keširanja za popularne mrežne protokole uključujući HTTP, HTTPS i FTP. Takođe radi na drugim UNIX platformama i Windowsima.

Baš kao i Varnish Cache, prima zahtjeve od klijenata i prosljeđuje ih određenim backend serverima. Kada backend server odgovori, pohranjuje kopiju sadržaja u keš memoriju i prosljeđuje je klijentu. Budući zahtjevi za isti sadržaj će se servirati iz keša, što će rezultirati bržom isporukom sadržaja klijentu. Tako optimizira protok podataka između klijenta i servera radi poboljšanja performansi i kešira često korišteni sadržaj kako bi smanjio mrežni promet i uštedio propusni opseg.

Squid dolazi sa karakteristikama kao što je distribucija opterećenja preko međusobno povezanih hijerarhija proxy servera, proizvodnja podataka o obrascima korištenja weba (npr. statistika o najposjećenijim stranicama), omogućava vam da analizirate, uhvatite, blokirate, zamijenite ili modificirate poruke koje se proksijuju.

Takođe podržava sigurnosne funkcije kao što su bogata kontrola pristupa, autorizacija i autentifikacija, podrška za SSL/TLS i evidentiranje aktivnosti.

9. NGINX

NGINX (izgovara se kao Engine-X) je otvorenog koda, visokih performansi, potpuno opremljeno i vrlo popularno konsolidirano rješenje za postavljanje web infrastrukture. To je HTTP server, reverse proxy server, mail proxy server i generički TCP/UDP proxy server.

NGINX nudi osnovne mogućnosti keširanja gdje se keširani sadržaj pohranjuje u trajnoj keš memoriji na disku. Fascinantni dio keširanja sadržaja u NGINX-u je to što se može konfigurirati da isporučuje zastarjeli sadržaj iz svoje keš memorije kada ne može dohvatiti svježi sadržaj sa izvornih servera.

NGINX nudi mnoštvo sigurnosnih funkcija za osiguranje vaših web sistema, koje uključuju SSL terminaciju, ograničavanje pristupa s HTTP osnovnom autentifikacijom, autentifikaciju zasnovanu na rezultatu pod-zahtjeva, JWT autentifikaciju, ograničavanje pristupa proxy HTTP resursima, ograničavanje pristupa prema geografskoj lokaciji, i mnogo više.

Obično se koristi kao obrnuti proxy, balansator opterećenja, SSL terminator/sigurnosni gateway, akcelerator aplikacija/keš sadržaja i API gateway u aplikacijskom stogu. Također se koristi za streaming medija.

10. Apache Traffic Server

Na kraju, ali ne i najmanje važno, imamo Apache Traffic Server, open-source, brz, skalabilan i proširiv proxy server za keširanje s podrškom za HTTP/1.1 i HTTP/2.0. Dizajniran je da poboljša mrežnu efikasnost i performanse keširanjem sadržaja kojem se često pristupa na rubu mreže, za preduzeća, ISP-ove (provajdere Internet servera), provajdere okosnica i još mnogo toga.

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

Što se tiče sigurnosti, Traffic Server podržava kontrolu pristupa klijenta omogućavajući vam da konfigurirate klijente kojima je dozvoljeno da koriste proxy keš memoriju, SSL završetak za obje veze između klijenata i sebe, te između sebe i izvornog servera. Također podržava autentifikaciju i osnovnu autorizaciju putem dodatka, evidentiranje (svakog zahtjeva koji primi i svake greške koju otkrije) i praćenje.

Traffic Server se može koristiti kao web proxy keš, naprijed proxy, reverse proxy, transparentni proxy, balansator opterećenja ili u hijerarhiji keša.

Zaključne napomene

Keširanje je jedna od najkorisnijih i najuspješnijih tehnologija isporuke web sadržaja koja je prvenstveno dizajnirana za povećanje brzine web stranica ili aplikacija. Pomaže u smanjenju opterećenja vašeg servera, kašnjenja i propusnosti mreže jer se keširani podaci serviraju klijentima, čime se poboljšava vrijeme odgovora aplikacije i brzina isporuke klijentima.

U ovom članku smo pregledali najbolje alate za keširanje otvorenog koda koji se koriste na Linux sistemima. Ako znate druge alate za keširanje otvorenog koda koji nisu ovdje navedeni, podijelite ih s nama putem obrasca za povratne informacije ispod. Svoje mišljenje o ovom članku također možete podijeliti s nama.