Aplicațiile și sistemele de calcul distribuite fiabile au devenit piatra de temelie a afacerilor proeminente, în special în automatizarea și gestionarea proceselor de afaceri critice pentru misiune și furnizarea de servicii către Clienți. În calitate de dezvoltatori și administratori de sisteme pentru aceste sisteme și aplicații, este de așteptat să le oferiți toate tipuri de soluții pentru tehnologia informației (IT) care vă vor asigura că aveți cele mai eficiente sisteme disponibil.
Aceasta include sarcini precum proiectarea, testarea și implementarea strategiilor pentru sistem / aplicație performanță, fiabilitate, disponibilitate și scalabilitate, pentru a oferi utilizatorilor finali un nivel satisfăcător de serviciu. Caching este una dintre multele tehnici de livrare a aplicațiilor, foarte de bază, dar eficiente, pe care vă puteți baza. Înainte de a merge mai departe, să analizăm pe scurt ce este stocarea în cache, unde și / sau cum poate fi aplicat și beneficiile sale?
Caching (sau Memorarea în cache a conținutului) este o tehnică utilizată pe scară largă de stocare a copiilor de date într-o locație de stocare temporară (cunoscută și sub numele de cache) astfel încât datele să poată fi accesate cu ușurință și rapid, decât atunci când sunt preluate din stocarea originală. Datele stocate într-o memorie cache pot include fișiere sau fragmente de fișiere (cum ar fi fișiere HTML, scripturi, imagini, documente etc.), operațiuni sau înregistrări ale bazei de date, apeluri API, înregistrări DNS etc., în funcție de tipul și scopul stocarea în cache.
Un cache poate fi sub formă de hardware sau software. Cache-ul bazat pe software (care este punctul central al acestui articol) poate fi implementat la diferite straturi ale unei stive de aplicații.
Caching poate fi aplicat la partea client (sau la stratul de prezentare a aplicației), de exemplu, cache-ul browserului sau cache-ul aplicației (sau modul offline). Majoritatea, dacă nu toate browserele moderne sunt livrate cu implementarea unei cache HTTP. S-ar putea să fi auzit de expresia populară „ștergeți memoria cache”Atunci când accesați o aplicație web pentru a vă permite să vedeți cele mai recente date sau conținut pe un site web sau o aplicație, în loc de browser folosind o copie veche a conținutului stocat local.
Un alt exemplu de cache în partea clientului este Memorarea în cache a DNS ceea ce se întâmplă la nivelul sistemului de operare (OS). Este o stocare temporară a informațiilor despre căutările DNS anterioare de către sistemul de operare sau browserul web.
Caching-ul poate fi implementat și la nivelul rețelei, fie într-un LAN sau WAN prin proxy. Un exemplu comun al acestui tip de cache este în CDN-uri (Rețele de livrare a conținutului), care sunt rețele distribuite la nivel global de servere proxy web.
În al treilea rând, puteți implementa, de asemenea, cache-ul la serverul (serverele) de origine sau backend. Există diferite forme de cache la nivel de server, acestea includ:
Rețineți că datele cache pot fi stocate în orice sistem de stocare, inclusiv o bază de date, fișiere, memorie de sistem și așa mai departe, dar ar trebui să fie un mediu mai rapid decât sursa primară. În acest sens, stocarea în memorie este cea mai eficientă și mai frecvent utilizată formă de stocare în cache.
Cachingul oferă numeroase avantaje, inclusiv următoarele:
În acest articol, vom revizui unele dintre cele mai importante surse open-source (cache de aplicații / baze de date și cache de servere proxy) instrumente pentru implementarea cache-ului de pe server în Linux.
Redis (Retrimiteți serverul dicționar în întregime) este un sistem de calcul distribuit în memorie liber și open-source, rapid, performant și flexibil, care poate fi utilizat din majoritatea, dacă nu din toate limbajele de programare.
Este un magazin de structuri de date în memorie care funcționează ca un motor de stocare în cache, bază de date persistentă pe memorie pe disc și broker de mesaje. Deși este dezvoltat și testat pe Linux (platforma recomandată pentru implementare) și OS X, Redis funcționează și în alte sisteme POSIX, cum ar fi * BSD, fără dependențe externe.
Redis acceptă numeroase structuri de date, cum ar fi șiruri, hashuri, liste, seturi, seturi sortate, bitmap-uri, fluxuri și multe altele. Acest lucru permite programatorilor să utilizeze o structură de date specifică pentru rezolvarea unei probleme specifice. Suportă operații automate pe structura sa de date, cum ar fi adăugarea la un șir, împingerea elementelor într-o listă, creșterea valorii unui hash, intersecția setului de calcul și multe altele.
Caracteristicile sale cheie includ Redis replicarea master-slave (care este asincron în mod implicit), disponibilitate ridicată și reluare automată prin eșec oferite folosind Redis Sentinel, Redis cluster (puteți scala pe orizontală adăugând mai multe noduri de cluster) și partiționarea datelor (distribuirea datelor între mai multe instanțe Redis). De asemenea, oferă suport pentru tranzacții, Lua scripting, o serie de opțiuni de persistență și criptarea comunicării client-server.
Fiind o bază de date memorată, dar persistentă pe disc, Redis oferă cea mai bună performanță atunci când funcționează cel mai bine cu un set de date memorat. Cu toate acestea, îl puteți utiliza cu o bază de date pe disc, cum ar fi MySQL, PostgreSQL și multe altele. De exemplu, puteți lua date mici foarte grele la scriere în Redis și puteți lăsa alte bucăți de date într-o bază de date pe disc.
Redis acceptă securitatea în mai multe moduri: unul prin utilizarea unui „mod protejat”Pentru a proteja instanțele Redis de accesarea acestora din rețele externe. De asemenea, acceptă autentificarea client-server (unde o parolă este configurată în server și furnizată în client) și TLS pe toate canalele de comunicații, cum ar fi conexiunile clientului, legăturile de replicare și protocolul de bus Redis Cluster și Mai Mult.
Redis are foarte multe cazuri de utilizare care includ stocarea în cache a bazelor de date, stocarea în cache a paginii complete, gestionarea datelor sesiunii utilizatorilor, stocarea răspunsurilor API, sistemul de mesagerie Publicare / Abonare, coada de mesaje și multe altele. Acestea pot fi aplicate în jocuri, aplicații de rețele sociale, fluxuri RSS, analize de date în timp real, recomandări ale utilizatorilor și așa mai departe.
Memcached este un sistem de stocare în cache a obiectelor de memorie distribuite gratuit și open-source, simplu, dar puternic. Este un depozit de valori-cheie în memorie pentru bucăți mici de date, cum ar fi rezultatele apelurilor la baze de date, apeluri API sau redarea paginilor. Funcționează pe sisteme de operare similare Unix, inclusiv Linux și OS X și, de asemenea, pe Microsoft Windows.
Fiind un instrument pentru dezvoltatori, este destinat utilizării în creșterea vitezei aplicațiilor web dinamice prin cache de conținut (în mod implicit, a Cel puțin recent folosit (LRU) cache) reducând astfel încărcarea bazei de date pe disc - acționează ca o memorie pe termen scurt pentru aplicații. Oferă un API pentru cele mai populare limbaje de programare.
Memcached acceptă șiruri ca singur tip de date. Are o arhitectură client-server, unde jumătate din logică se întâmplă pe partea client și cealaltă jumătate pe partea server. Important, clienții înțeleg cum să aleagă pe ce server să scrie sau să citească, pentru un articol. De asemenea, un client știe foarte bine ce să facă în cazul în care nu se poate conecta la un server.
Deși este un sistem de cache distribuit, suportă astfel clusterizarea, serverele Memcached sunt deconectate unele de altele (adică nu își cunosc reciproc). Aceasta înseamnă că nu există suport de replicare ca în Redis. De asemenea, ei înțeleg cum să stocheze și să aducă articole, să gestioneze când să evacueze sau să refolosească memoria. Puteți crește memoria disponibilă adăugând mai multe servere.
Acceptă autentificarea și criptarea prin TLS începând cu Memcached 1.5.13, dar această caracteristică este încă în faza experimentală.
Apache Ignite, de asemenea, un stoc liber, liber, open-source, scalabil orizontal distribuit în memorie cheie-valoare, cache, și sistem de baze de date multi-model care oferă API-uri de procesare puternice pentru calculul distribuit date. Este, de asemenea, o grilă de date în memorie care poate fi utilizată fie în memorie, fie cu persistența nativă Ignite. Funcționează pe sisteme asemănătoare UNIX, cum ar fi Linux Si deasemenea Windows.
Dispune de un spațiu de stocare pe mai multe niveluri, suport SQL complet și ACID (Atomicitate, coerență, izolare, durabilitate) tranzacții (acceptate numai la nivelul API-valoare-cheie) pe mai multe noduri de cluster, procesare co-localizată și învățare automată. Suportă integrarea automată cu orice bază de date terță parte, inclusiv cu orice RDBMS (cum ar fi MySQL, PostgreSQL, Oracle Database și așa mai departe) sau magazinele NoSQL.
Este important să rețineți că, deși Aprinde funcționează ca un depozit de date SQL, nu este pe deplin o bază de date SQL. Gestionează în mod distinct constrângerile și indexurile în comparație cu bazele de date tradiționale; acceptă indexuri primare și secundare, dar numai indexurile primare sunt utilizate pentru a impune unicitatea. În plus, nu are suport pentru constrângerile cheii străine.
Ignite acceptă, de asemenea, securitatea, permițându-vă să activați autentificarea pe server și să furnizați acreditări de utilizator clienților. Există, de asemenea, suport pentru comunicarea socket SSL pentru a oferi o conexiune sigură între toate nodurile Ignite.
Aprinde are multe cazuri de utilizare, care includ sistemul de cache, accelerarea volumului de lucru al sistemului, procesarea datelor în timp real și analize. Poate fi folosit și ca platformă centrată pe grafice.
Server Couchbase este, de asemenea, o bază de date de implicare open-source, distribuită, orientată către documente NoSQL, care stochează date ca elemente într-un format cheie-valoare. Funcționează pe Linux și alte sisteme de operare, cum ar fi Windows și Mac OS X. Folosește un limbaj de interogare bogat în caracteristici, orientat către documente, numit N1QL, care oferă servicii de interogare și indexare puternice pentru a sprijini operațiuni sub-milisecunde pe date.
Caracteristicile sale notabile sunt un magazin rapid de valori-cheie cu cache gestionat, indexatori construiți special, un motor de interogare puternic, arhitectură scalabilă (scalare multidimensională), integrare de date mari și SQL, securitate full-stack și Valabilitate ridicată.
Server Couchbase vine cu suport nativ de cluster pentru mai multe instanțe, unde un instrument de gestionare cluster coordonează toate activitățile nodurilor și oferă pur și simplu o interfață la nivel de cluster pentru clienți. Foarte important, puteți adăuga, elimina sau înlocui noduri, după cum este necesar, fără întreruperi. Suportă, de asemenea, replicarea datelor între nodurile unui cluster, replicarea selectivă a datelor între centrele de date.
Implementează securitatea prin TLS utilizând porturi Couchbase Server dedicate, diferite mecanisme de autentificare (folosind fie acreditări, fie certificate), controlul accesului bazat pe roluri (pentru a verifica fiecare utilizator autentificat pentru rolurile definite de sistem cărora li se atribuie), audit, jurnale și sesiuni.
Cazurile sale de utilizare includ interfața de programare unificată, căutarea textului complet, prelucrarea paralelă a interogărilor, gestionarea documentelor și indexarea și mult mai mult Este conceput special pentru a oferi o gestionare a datelor cu latență redusă pentru web interactiv, mobil și IoT la scară largă aplicații.
Hazelcast IMDG (In-Memory Data Grid) este o sursă deschisă, ușoară, rapidă și extensibilă middleware de rețea de date în memorie, care oferă calcule In-Memory distribuite elastic scalabile. Hazelcast IMDG rulează, de asemenea, pe Linux, Windows și Mac OS X și orice altă platformă cu Java instalat. Suportă o mare varietate de structuri de date flexibile și native în limbi, cum ar fi Map, Set, List, MultiMap, RingBuffer și HyperLogLog.
Hazelcast este peer-to-peer și acceptă scalabilitate simplă, configurare cluster (cu opțiuni de colectare a statisticilor, monitorizare prin JMX protocol și gestionați clusterul cu utilități utile), structuri de date distribuite și evenimente, porționarea datelor și tranzacții. De asemenea, este redundant, deoarece păstrează backupul fiecărei intrări de date pe mai mulți membri. Pentru a vă scala grupul, pur și simplu porniți o altă instanță, datele și copiile de rezervă sunt echilibrate automat și uniform.
Oferă o colecție de API-uri utile pentru a accesa CPU-urile din clusterul dvs. pentru o viteză maximă de procesare. De asemenea, oferă implementări distribuite ale unui număr mare de interfețe dezvoltate de Java, cum ar fi Map, Queue, ExecutorService, Lock și JCache.
Caracteristicile sale de securitate includ membrii clusterului și autentificarea clientului și verificarea controlului accesului la operațiunile clientului prin intermediul caracteristicilor de securitate bazate pe JAAS. De asemenea, permite interceptarea conexiunilor de socket și a operațiilor la distanță executate de clienți, criptarea comunicării la nivel de socket între membrii clusterului și activarea socket-ului SSL / TLS comunicare. Dar, conform documentației oficiale, majoritatea acestor caracteristici de securitate sunt oferite în versiunea Enterprise.
Cel mai popular caz de utilizare este distribuirea în memorie cache și stocarea de date. Dar poate fi implementat și pentru clusterizarea sesiunilor web, înlocuirea NoSQL, procesarea paralelă, mesageria ușoară și multe altele.
Mcrouter este un router de protocol Memcached gratuit și open-source pentru scalarea implementărilor Memcached, dezvoltat și întreținut de Facebook. Dispune de protocol ASCII Memcached, rutare flexibilă, suport multi-cluster, cache-uri pe mai multe niveluri, pooling de conexiuni, hash multiplu scheme, rutare de prefixuri, pool-uri replicate, umbrire a traficului de producție, reconfigurare online și monitorizare a sănătății destinației / automată reluare la eșec.
În plus, suportă încălzirea cache-ului rece, statistici bogate și comenzi de depanare, calitate de serviciu de ștergere fiabilă, valori mari, operațiuni de difuzare și vine cu suport IPv6 și SSL.
Acesta este utilizat la Facebook și Instagram ca o componentă de bază a infrastructurii cache, pentru a gestiona aproape 5 miliarde de solicitări pe secundă la vârf.
Lacul de lac este un accelerator de aplicații web flexibil, modern și multifuncțional open-source care se află între clienții web și un server de origine. Funcționează pe toate platformele moderne Linux, FreeBSD și Solaris (numai x86). Este un excelent motor de cache și accelerator de conținut pe care îl puteți implementa în fața unui server web, cum ar fi NGINX, Apache și mulți alții, pentru a asculta pe portul HTTP implicit pentru a primi și redirecționa cererile clientului către serverul web și pentru a livra răspunsul serverelor web către client.
În timp ce acționează ca un intermediar între clienți și serverele de origine, Lacul de lac oferă mai multe beneficii, elementul fiind stocarea în cache a conținutului web în memorie pentru a ușura încărcarea serverului dvs. web și a îmbunătăți viteza de livrare către clienți.
După primirea unei cereri HTTP de la un client, aceasta o redirecționează către serverul web backend. Odată ce serverul web răspunde, Varnish păstrează în conținut conținutul din memorie și oferă clientului răspunsul. Când clientul solicită același conținut, Varnish îl va furniza din răspunsul aplicației care mărește memoria cache. Dacă nu poate difuza conținut din cache, solicitarea este redirecționată către backend și răspunsul este memorat în cache și livrat clientului.
Lac Caracteristici VCL (Limbaj de configurare a lacului - un limbaj flexibil specific domeniului) folosit pentru a configura modul în care sunt gestionate cererile și multe altele, Module de lac (VMODS) care sunt extensii pentru Varnish Cache.
Din punct de vedere al securității, Varnish Cache acceptă înregistrarea, solicită inspecția și limitarea, autentificarea și autorizarea prin VMODS, dar nu are suport nativ pentru SSL / TLS. Puteți activa HTTPS pentru Varnish Cache utilizând un proxy SSL / TLS precum Hitch sau NGINX.
Puteți utiliza, de asemenea, Varnish Cache ca firewall pentru aplicații web, apărător de atac DDoS, protector de hotlinking, echilibru de încărcare, integrare punct, gateway de conectare unică, mecanism de politică de autentificare și autorizare, soluție rapidă pentru backend-uri instabile și cerere HTTP router.
O altă soluție proxy gratuită și open-source, remarcabilă și utilizată pe scară largă și cache pentru Linux este Calamar. Este un software de server de cache de proxy web bogat în caracteristici, care oferă servicii de proxy și cache pentru protocoale de rețea populare, inclusiv HTTP, HTTPS și FTP. De asemenea, rulează pe alte platforme UNIX și Windows.
La fel ca Lacul de lac, primește cereri de la clienți și le transmite serverelor backend specificate. Când serverul backend răspunde, acesta stochează o copie a conținutului într-un cache și îl transmite clientului. Cererile viitoare pentru același conținut vor fi furnizate din cache, rezultând o livrare mai rapidă a conținutului către client. Deci, optimizează fluxul de date între client și server pentru a îmbunătăți performanța și păstrează în cache conținutul utilizat frecvent pentru a reduce traficul de rețea și a economisi lățimea de bandă.
Squid vine cu caracteristici cum ar fi distribuirea sarcinii peste ierarhiile intercomunicante ale serverelor proxy, producerea de date referitoare la web modele de utilizare (de exemplu, statistici despre cele mai vizitate site-uri), vă permite să analizați, să capturați, să blocați, să înlocuiți sau să modificați mesajele care sunt împuternicit.
De asemenea, acceptă funcții de securitate, cum ar fi controlul accesului bogat, autorizarea și autentificarea, suport SSL / TLS și înregistrarea activității.
NGINX (pronunțat ca Motor-X) este o soluție open-source, de înaltă performanță, cu funcții complete și foarte populară consolidată pentru configurarea infrastructurii web. Este un server HTTP, un server proxy invers, un server proxy de mail și un server proxy TCP / UDP generic.
NGINX oferă capacități de bază de stocare în cache în care conținutul cache este stocat într-un cache persistent pe disc. Partea fascinantă a memoriei cache a conținutului în NGINX este că poate fi configurat pentru a livra conținut vechi din memoria cache atunci când nu poate prelua conținut proaspăt de pe serverele de origine.
NGINX oferă o multitudine de caracteristici de securitate pentru securizați-vă sistemele web, acestea includ terminarea SSL, restricționarea accesului cu Autentificare de bază HTTP, autentificare bazată pe rezultatul cererii secundare, autentificare JWT, restricționarea accesului la resursele HTTP proxy, restricționarea accesului în funcție de locația geografică și multe altele.
În mod obișnuit, este implementat ca un proxy invers, echilibru de încărcare, terminator SSL / gateway de securitate, accelerator de aplicații / cache de conținut și gateway API într-o stivă de aplicații. Este, de asemenea, utilizat pentru streaming media.
Nu în ultimul rând, avem Apache Traffic Server, un server proxy de stocare în cache deschis, rapid, scalabil și extensibil, cu suport pentru HTTP / 1.1 și HTTP / 2.0. Este conceput pentru a îmbunătăți eficiența rețelei și performanță prin stocarea în cache a conținutului accesat frecvent la marginea unei rețele, pentru întreprinderi, furnizori de servicii Internet (Internet Server Providers), furnizori de backbone și Mai Mult.
Acesta acceptă proxy-ul atât invers, cât și invers, pentru traficul HTTP / HTTPS. De asemenea, poate fi configurat pentru a rula simultan în unul sau ambele moduri. Dispune de cache persistent, API-uri pentru pluginuri; suport pentru ICP (Internet Cache Protocol), ESI (Edge Side Include); Keep-ALive și multe altele.
În ceea ce privește securitatea, Traffic Server acceptă controlul accesului clienților, permițându-vă să configurați clienții care sunt permiși pentru a utiliza memoria cache proxy, terminarea SSL atât pentru conexiunile dintre clienți și sine, cât și între sine și origine Server. De asemenea, acceptă autentificarea și autorizarea de bază prin intermediul unui plugin, înregistrarea (a fiecărei cereri primite și a fiecărei erori pe care o detectează) și monitorizarea.
Traffic Server poate fi folosit ca cache proxy web, proxy direct, proxy invers, proxy transparent, echilibrator de sarcină sau într-o ierarhie cache.
Caching este una dintre cele mai benefice și îndelungate tehnologii de livrare a conținutului web, care este concepută în primul rând pentru a crește viteza site-urilor web sau a aplicațiilor. Vă ajută să reduceți încărcarea serverului, latența și lățimea de bandă a rețelei deoarece datele stocate în cache sunt furnizate clienților, îmbunătățind astfel timpul de răspuns al aplicației și viteza de livrare către clienți.
În acest articol, am analizat principalele instrumente de stocare în cache cu sursă deschisă de utilizat pe sistemele Linux. Dacă cunoașteți alte instrumente de stocare în cache open source care nu sunt enumerate aici, vă rugăm să ne împărtășiți prin intermediul formularului de feedback de mai jos. De asemenea, ne puteți împărtăși gândurile despre acest articol.