Ricerca nel sito web

I migliori strumenti di caching open source per Linux nel 2023


Sistemi e applicazioni informatici distribuiti affidabili sono diventati la pietra angolare di aziende importanti, in particolare nell'automazione e nella gestione dei processi aziendali mission-critical e nella fornitura di servizi ai clienti.

In qualità di sviluppatori e amministratori di sistema di questi sistemi e applicazioni, sei tenuto a fornire tutti i tipi di soluzioni di tecnologia dell'informazione (IT) che garantiranno la disponibilità dei sistemi più efficienti.

Ciò include attività quali la progettazione, il test e l'implementazione di strategie per prestazioni, affidabilità, disponibilità e scalabilità del sistema/applicazione, per offrire agli utenti finali un livello di servizio soddisfacente.

Il caching è una delle tante tecniche di distribuzione delle applicazioni, molto semplici ma efficaci, su cui puoi fare affidamento. Prima di proseguire, esaminiamo brevemente cos'è il caching, dove e/o come può essere applicato e i suoi vantaggi.

Cos'è la cache o la cache dei contenuti?

Il caching (o caching dei contenuti) è una tecnica ampiamente utilizzata per archiviare copie di dati in una posizione di archiviazione temporanea (nota anche come cache) in modo che sia possibile accedere facilmente e rapidamente ai dati quando vengono recuperati dalla memoria originale.

I dati archiviati in una cache possono includere file o frammenti di file (come file HTML, script, immagini, documenti, ecc.), operazioni o record di database, chiamate API, record DNS, ecc. a seconda del tipo e dello scopo della memorizzazione nella cache.

Una cache può essere sotto forma di hardware o software. La cache basata su software (che è l'argomento centrale di questo articolo) può essere implementata a diversi livelli di uno stack di applicazioni.

La caching può essere applicata sul lato client (o a livello di presentazione dell'applicazione), ad esempio, la memorizzazione nella cache del browser o della app (o in modalità offline). La maggior parte, se non tutti, i browser moderni vengono forniti con un'implementazione di una cache HTTP.

Potresti aver sentito la frase popolare "svuota la cache" quando accedi a un'applicazione web per poter vedere i dati o i contenuti più recenti su un sito web o un'applicazione, invece di utilizzare il browser utilizzando una vecchia copia di il contenuto archiviato localmente.

Un altro esempio di caching lato client è il caching DNS che avviene a livello del sistema operativo (OS). Si tratta di una memorizzazione temporanea di informazioni sulle precedenti ricerche DNS da parte del sistema operativo o del browser web.

La memorizzazione nella cache può essere implementata anche a livello di rete, in LAN o WAN tramite proxy. Un esempio comune di questo tipo di memorizzazione nella cache è nei CDN (Content Delivery Networks), che sono reti distribuite a livello globale di server proxy web.

In terzo luogo, è anche possibile implementare la memorizzazione nella cache sui server di origine o back-end. Esistono diverse forme di memorizzazione nella cache a livello di server, tra cui:

  • caching del server web (per memorizzare nella cache immagini, documenti, script e così via).
  • caching dell'applicazione o memorizzazione (utilizzato per leggere file da disco, dati da altri servizi o processi o richiedere dati da un'API, ecc.).
  • caching del database (per fornire accesso in memoria ai dati utilizzati di frequente come le righe del database richieste, i risultati delle query e altre operazioni).

Tieni presente che i dati della cache possono essere archiviati in qualsiasi sistema di archiviazione incluso un database, un file, una memoria di sistema e così via, ma dovrebbe essere un supporto più veloce della fonte primaria. A questo proposito, il caching in memoria è la forma di caching più efficace e comunemente utilizzata.

Perché utilizzare la memorizzazione nella cache?

La memorizzazione nella cache offre numerosi vantaggi, tra cui:

  • A livello di database, migliora le prestazioni di lettura fino a microsecondi per i dati memorizzati nella cache. È inoltre possibile utilizzare una cache di write-back per migliorare le prestazioni di scrittura, in cui i dati vengono scritti in memoria e successivamente scritti su disco o nella memoria principale a intervalli specificati. Ma l’aspetto dell’integrità dei dati potrebbe avere implicazioni potenzialmente disastrose. Ad esempio, quando il sistema si arresta in modo anomalo appena prima che i dati vengano salvati nella memoria principale.
  • A livello applicativo, una cache può memorizzare i dati letti frequentemente all'interno del processo applicativo stesso, riducendo così i tempi di ricerca dei dati da secondi fino a microsecondi, soprattutto sulla rete.
  • Considerando le prestazioni complessive dell'applicazione e del server, la memorizzazione nella cache aiuta a ridurre il carico del server, la latenza e la larghezza di banda della rete mentre i dati memorizzati nella cache vengono serviti ai client, migliorando così i tempi di risposta e le velocità di consegna ai client.
  • La memorizzazione nella cache consente inoltre la disponibilità dei contenuti, in particolare tramite CDN, e molti altri vantaggi.

In questo articolo, esamineremo alcuni dei principali strumenti open source (caching di applicazioni/database e caching di server proxy) per l'implementazione lato server memorizzazione nella cache in Linux.

1. Redis

Redis (REmote DIctionary Server per intero) è un sistema di calcolo in memoria distribuito gratuito e open source, veloce, ad alte prestazioni e flessibile che può essere utilizzato dalla maggior parte se non da tutti i linguaggi di programmazione.

Si tratta di un archivio di strutture dati in memoria che funziona come motore di memorizzazione nella cache, database persistente su disco in memoria e broker di messaggi. Sebbene sia sviluppato e testato su Linux (la piattaforma consigliata per la distribuzione) e OS X, Redis funziona anche su altri sistemi POSIX come *BSD, senza dipendenze esterne.

Redis supporta numerose strutture dati come stringhe, hash, elenchi, insiemi, insiemi ordinati, bitmap, flussi e altro ancora. Ciò consente ai programmatori di utilizzare una struttura dati specifica per risolvere un problema specifico. Supporta operazioni automatiche sulla sua struttura dati come l'aggiunta di una stringa, l'inserimento di elementi in un elenco, l'incremento del valore di un hash, il calcolo dell'intersezione di set e altro ancora.

Le sue caratteristiche principali includono la replica Redis master-slave (asincrona per impostazione predefinita), alta disponibilità e failover automatico offerti utilizzando Redis Sentinel, cluster Redis (è possibile scalare orizzontalmente aggiungendo più nodi cluster) e partizionamento dei dati (distribuzione dei dati tra più Redis istanze). Dispone inoltre di supporto per transazioni, scripting Lua, una gamma di opzioni di persistenza e crittografia della comunicazione client-server.

Essendo un database in memoria ma persistente su disco, Redis offre le migliori prestazioni quando funziona al meglio con un set di dati in memoria. Tuttavia, puoi utilizzarlo con un database su disco come MySQL, PostgreSQL e molti altri. Ad esempio, puoi prendere piccoli dati molto pesanti in Redis e lasciare altri blocchi di dati in un database su disco.

Redis supporta la sicurezza in molti modi: il primo utilizza la funzionalità "modalità protetta" per proteggere le istanze Redis dall'accesso da reti esterne. Supporta inoltre l'autenticazione client-server (dove una password viene configurata nel server e fornita nel client) e TLS su tutti i canali di comunicazione come connessioni client, collegamenti di replica, protocollo bus Redis Cluster e altro ancora.

Redis ha moltissimi casi d'uso che includono la memorizzazione nella cache del database, la memorizzazione nella cache dell'intera pagina, la gestione dei dati della sessione utente, l'archiviazione delle risposte API, il sistema di messaggistica di pubblicazione/sottoscrizione, la coda di messaggi e altro ancora. Questi possono essere applicati a giochi, applicazioni di social network, feed RSS, analisi dei dati in tempo reale, consigli degli utenti e così via.

2. Memcached

Memcached è un sistema di caching di oggetti di memoria distribuito gratuito e open source, semplice ma potente. Si tratta di un archivio di valori-chiave in memoria per piccoli blocchi di dati come risultati di chiamate al database, chiamate API o rendering di pagine. Funziona su sistemi operativi simili a Unix tra cui Linux e OS X e anche su Microsoft Windows.

Essendo uno strumento per sviluppatori, è concepito per aumentare la velocità delle applicazioni web dinamiche memorizzando nella cache i contenuti (per impostazione predefinita, una cache Least Recent Used (LRU)) riducendo così il caricamento del database su disco: funge da memoria a breve termine per le applicazioni. Offre un'API per i linguaggi di programmazione più popolari.

Memcached supporta le stringhe come unico tipo di dati. Ha un'architettura client-server, dove metà della logica avviene sul lato client e l'altra metà sul lato server. È importante sottolineare che i client capiscono come scegliere su quale server scrivere o leggere per un elemento. Inoltre, un client sa molto bene cosa fare nel caso non riesca a connettersi a un server.

Sebbene sia un sistema di caching distribuito, quindi supporti il clustering, i server Memcached sono disconnessi l'uno dall'altro (cioè non sono consapevoli l'uno dell'altro). Ciò significa che non esiste supporto per la replica come in Redis. Capiscono anche come archiviare e recuperare gli elementi e gestire quando eliminare o riutilizzare la memoria. È possibile aumentare la memoria disponibile aggiungendo più server.

Supporta l'autenticazione e la crittografia tramite TLS a partire da Memcached 1.5.13, ma questa funzionalità è ancora in fase sperimentale.

3. Apache Ignite

Apache Ignite è anche un sistema di archiviazione di valori-chiave distribuito in memoria, cache e database multimodello gratuito e open source, scalabile orizzontalmente che fornisce potenti API di elaborazione per l'elaborazione di dati distribuiti. È anche una griglia di dati in memoria che può essere utilizzata in memoria o con la persistenza nativa di Ignite. Funziona su sistemi simili a UNIX come Linux e anche Windows.

Offre archiviazione multilivello, supporto SQL completo e transazioni ACID (Atomicità, Coerenza, Isolamento, Durabilità) (supportate solo a livello API chiave-valore) su più nodi cluster, elaborazione co-localizzata, e apprendimento automatico. Supporta l'integrazione automatica con qualsiasi database di terze parti, inclusi qualsiasi RDBMS (come MySQL, PostgreSQL, Oracle Database e così via) o archivi NoSQL.

È importante notare che sebbene Ignite funzioni come un archivio dati SQL, non è completamente un database SQL. Gestisce distintamente vincoli e indici rispetto ai database tradizionali; supporta indici primari e secondari, ma solo gli indici primari vengono utilizzati per imporre l'unicità. Inoltre, non supporta i vincoli di chiave esterna.

Ignite supporta inoltre la sicurezza consentendo di abilitare l'autenticazione sul server e fornendo le credenziali utente ai client. È inoltre disponibile il supporto per la comunicazione tramite socket SSL per fornire una connessione sicura tra tutti i nodi Ignite.

Ignite ha molti casi d'uso che includono sistemi di memorizzazione nella cache, accelerazione del carico di lavoro del sistema, elaborazione dei dati in tempo reale e analisi. Può anche essere utilizzato come piattaforma incentrata sui grafici.

4. Server base divano

Couchbase Server è anche un database di coinvolgimento open source, distribuito e orientato ai documenti NoSQL che archivia i dati come elementi in un formato chiave-valore. Funziona su Linux e altri sistemi operativi come Windows e Mac OS X. Utilizza un linguaggio di query ricco di funzionalità e orientato ai documenti chiamato N1QL che fornisce potenti servizi di query e indicizzazione per supportare operazioni inferiori al millisecondo sui dati.

Le sue caratteristiche degne di nota sono un veloce archivio di valori-chiave con cache gestita, indicizzatori appositamente creati, un potente motore di query, architettura scalabile (scalabilità multidimensionale), big data e integrazione SQL, sicurezza full-stack e alta disponibilità.

Couchbase Server viene fornito con il supporto nativo di cluster a più istanze, in cui uno strumento di gestione del cluster coordina tutte le attività del nodo e fornisce semplicemente un'interfaccia a livello di cluster ai client. È importante sottolineare che puoi aggiungere, rimuovere o sostituire i nodi secondo necessità, senza tempi di inattività. Supporta inoltre la replica dei dati tra i nodi di un cluster e la replica selettiva dei dati tra i data center.

Implementa la sicurezza tramite TLS utilizzando porte Couchbase Server dedicate, diversi meccanismi di autenticazione (utilizzando credenziali o certificati), controllo degli accessi basato sui ruoli (per verificare ciascun utente autenticato per i ruoli definiti dal sistema assegnati), auditing, registri e sessioni .

I suoi casi d'uso includono un'interfaccia di programmazione unificata, ricerca full-text, elaborazione di query parallele, gestione di documenti, indicizzazione e molto altro ancora. È specificamente progettato per fornire una gestione dei dati a bassa latenza per applicazioni web, mobili e IoT interattive su larga scala.

5. Hazelcast IMDG

Hazelcast IMDG (In-Memory Data Grid) è un middleware in-memory data grid open source, leggero, veloce ed estensibile, che fornisce elaborazione in-memory distribuita elasticamente scalabile. Hazelcast IMDG funziona anche su Linux, Windows, Mac OS X e qualsiasi altra piattaforma con Java installato. Supporta un'ampia varietà di strutture dati flessibili e native del linguaggio come Map, Set, List, MultiMap, RingBuffer e HyperLogLog.

Hazelcast è peer-to-peer e supporta scalabilità semplice, configurazione del cluster (con opzioni per raccogliere statistiche, monitorare tramite protocollo JMX e gestire il cluster con utilità utili), strutture dati ed eventi distribuiti, suddivisione dei dati e transazioni. È inoltre ridondante poiché mantiene il backup di ogni immissione di dati su più membri. Per scalare il tuo cluster, avvia semplicemente un'altra istanza, i dati e i backup vengono bilanciati automaticamente e in modo uniforme.

Fornisce una raccolta di API utili per accedere alle CPU nel tuo cluster per la massima velocità di elaborazione. Offre inoltre implementazioni distribuite di un gran numero di interfacce Java facili per gli sviluppatori come Map, Queue, ExecutorService, Lock e JCache.

Le sue funzionalità di sicurezza includono membri del cluster e autenticazione del client e controlli di controllo degli accessi sulle operazioni del client tramite funzionalità di sicurezza basate su JAAS. Consente inoltre di intercettare le connessioni socket e le operazioni remote eseguite dai client, la crittografia delle comunicazioni a livello di socket tra i membri del cluster e l'abilitazione della comunicazione socket SSL/TLS. Ma secondo la documentazione ufficiale, la maggior parte di queste funzionalità di sicurezza sono offerte nella versione Enterprise.

Il suo caso d'uso più popolare è la memorizzazione nella cache distribuita e l'archiviazione dei dati. Ma può anche essere distribuito per il clustering di sessioni Web, la sostituzione di NoSQL, l'elaborazione parallela, la messaggistica semplice e molto altro.

6. Microuter

Mcrouter è un router di protocollo Memcached gratuito e open source per la scalabilità delle distribuzioni Memcached, sviluppato e gestito da Facebook. È dotato di protocollo ASCII Memcached, routing flessibile, supporto multi-cluster, cache multi-livello, pool di connessioni, schemi di hashing multipli, routing di prefissi, pool replicati, shadowing del traffico di produzione, riconfigurazione online e monitoraggio dello stato della destinazione/failover automatico.

Inoltre, supporta il riscaldamento della cache fredda, statistiche avanzate e comandi di debug, qualità del servizio affidabile del flusso di eliminazione, valori di grandi dimensioni e operazioni di trasmissione e viene fornito con supporto IPv6 e SSL.

Viene utilizzato su Facebook e Instagram come componente principale dell'infrastruttura della cache, per gestire quasi 5 miliardi di richieste al secondo al massimo.

7. Cache di vernici

Varnish Cache è un acceleratore di applicazioni web open source flessibile, moderno e multiuso che si trova tra i client Web e un server di origine. Funziona su tutte le moderne piattaforme Linux, FreeBSD e Solaris (solo x86). È un eccellente motore di caching e acceleratore di contenuti che puoi implementare davanti a un server web come NGINX, Apache e molti altri, per ascoltare sulla porta HTTP predefinita per ricevere e inoltrare le richieste dei client al server web e consegnare il web risposta del server al client.

Pur fungendo da intermediario tra i client e i server di origine, Varnish Cache offre numerosi vantaggi, tra cui l'elemento che memorizza nella cache i contenuti Web in memoria per alleviare il carico del server Web e migliorare le velocità di consegna ai client.

Dopo aver ricevuto una richiesta HTTP da un client, la inoltra al server web backend. Una volta che il server web risponde, Varnish memorizza nella cache il contenuto in memoria e fornisce la risposta al client. Quando il client richiede lo stesso contenuto, Varnish lo servirà dalla risposta dell'applicazione di potenziamento della cache. Se non può servire il contenuto dalla cache, la richiesta viene inoltrata al backend e la risposta viene memorizzata nella cache e consegnata al client.

Varnish presenta le funzionalità VCL (Varnish Configuration Language – un linguaggio flessibile specifico per il dominio) utilizzato per configurare la modalità di gestione delle richieste e altro ancora, Varnish Moduli (VMODS) che sono estensioni per Varnish Cache.

Dal punto di vista della sicurezza, Varnish Cache supporta la registrazione, l'ispezione delle richieste, la limitazione, l'autenticazione e l'autorizzazione tramite VMODS, ma manca il supporto nativo per SSL/TLS. Puoi abilitare HTTPS per Varnish Cache utilizzando un proxy SSL/TLS come Hitch o NGINX.

Puoi anche utilizzare Varnish Cache come firewall per applicazioni Web, difensore degli attacchi DDoS, protezione hotlinking, bilanciatore del carico, punto di integrazione, gateway Single Sign-On, meccanismo di policy di autenticazione e autorizzazione, soluzione rapida per backend instabili e router di richieste HTTP.

8. Proxy di memorizzazione nella cache Squid

Un'altra soluzione proxy e di caching gratuita e open source, eccezionale e ampiamente utilizzata per Linux è Squid. È un software server cache proxy Web ricco di funzionalità che fornisce servizi proxy e cache per i protocolli di rete più diffusi tra cui HTTP, HTTPS e FTP. Funziona anche su altre piattaforme UNIX e Windows.

Proprio come Varnish Cache, riceve richieste dai client e le passa ai server backend specificati. Quando il server backend risponde, memorizza una copia del contenuto in una cache e la passa al client. Le richieste future per lo stesso contenuto verranno servite dalla cache, con conseguente distribuzione del contenuto più rapida al client. Pertanto ottimizza il flusso di dati tra client e server per migliorare le prestazioni e memorizza nella cache i contenuti utilizzati di frequente per ridurre il traffico di rete e risparmiare larghezza di banda.

Squid è dotato di funzionalità come la distribuzione del carico su gerarchie intercomunicanti di server proxy, la produzione di dati relativi ai modelli di utilizzo del web (ad esempio statistiche sui siti più visitati), consente di analizzare, acquisire, bloccare, sostituire o modificare i messaggi proxy.

Supporta inoltre funzionalità di sicurezza come controllo completo degli accessi, autorizzazione e autenticazione, supporto SSL/TLS e registrazione delle attività.

9.NGINX

NGINX (pronunciato come Engine-X) è una soluzione consolidata open source, ad alte prestazioni, completa e molto popolare per la configurazione dell'infrastruttura web. È un server HTTP, un server proxy inverso, un server proxy di posta e un server proxy TCP/UDP generico.

NGINX offre funzionalità di memorizzazione nella cache di base in cui il contenuto memorizzato nella cache viene archiviato in una cache permanente su disco. La parte affascinante della memorizzazione nella cache dei contenuti in NGINX è che può essere configurato per fornire contenuti obsoleti dalla sua cache quando non riesce a recuperare nuovi contenuti dai server di origine.

NGINX offre una moltitudine di funzionalità di sicurezza per proteggere i tuoi sistemi web, tra cui terminazione SSL, limitazione dell'accesso con autenticazione di base HTTP, autenticazione basata sul risultato della sottorichiesta, autenticazione JWT, limitazione dell'accesso alle risorse HTTP proxy, limitazione dell'accesso in base alla posizione geografica, e altro ancora.

Viene comunemente distribuito come proxy inverso, bilanciatore del carico, terminatore SSL/gateway di sicurezza, acceleratore di applicazioni/cache dei contenuti e gateway API in uno stack di applicazioni. Viene utilizzato anche per lo streaming multimediale.

10. Server di traffico Apache

Ultimo ma non meno importante, abbiamo Apache Traffic Server, un server proxy di caching open source, veloce, scalabile ed estensibile con supporto per HTTP/1.1 e HTTP/2.0. È progettato per migliorare l'efficienza e le prestazioni della rete memorizzando nella cache i contenuti a cui si accede di frequente ai margini di una rete, per aziende, ISP (provider di server Internet), provider di backbone e altro ancora.

Supporta sia il proxy diretto che quello inverso del traffico HTTP/HTTPS. Può anche essere configurato per funzionare in una o entrambe le modalità contemporaneamente. È dotato di cache persistente, API plug-in; supporto per ICP (Internet Cache Protocol), ESI (Edge Side Include); Keep-ALive e altro ancora.

In termini di sicurezza, Traffic Server supporta il controllo dell'accesso client consentendo di configurare client a cui è consentito utilizzare la cache del proxy, la terminazione SSL per entrambe le connessioni tra i client e se stesso e tra se stesso e il server di origine. Supporta inoltre l'autenticazione e l'autorizzazione di base tramite plug-in, la registrazione (di ogni richiesta ricevuta e di ogni errore rilevato) e il monitoraggio.

Traffic Server può essere utilizzato come cache del proxy Web, proxy diretto, proxy inverso, proxy trasparente, bilanciatore del carico o in una gerarchia di cache.

Osservazioni conclusive

Il caching è una delle tecnologie di distribuzione di contenuti Web più vantaggiose e consolidate, progettata principalmente per aumentare la velocità di siti Web o applicazioni. Aiuta a ridurre il carico del server, la latenza e la larghezza di banda della rete perché i dati memorizzati nella cache vengono forniti ai client, migliorando così i tempi di risposta delle applicazioni e le velocità di distribuzione ai client.

In questo articolo, abbiamo esaminato i migliori strumenti di memorizzazione nella cache open source da utilizzare sui sistemi Linux. Se conosci altri strumenti di memorizzazione nella cache open source non elencati qui, condividili con noi tramite il modulo di feedback di seguito. Puoi anche condividere con noi le tue opinioni su questo articolo.