Pesquisa de site

Melhores ferramentas de cache de código aberto para Linux em 2023


Sistemas e aplicações de computação distribuída confiáveis tornaram-se a base de negócios proeminentes, especialmente na automatização e gerenciamento de processos de negócios de missão crítica e na prestação de serviços aos clientes.

Como desenvolvedores e administradores de sistemas desses sistemas e aplicativos, espera-se que você forneça todos os tipos de soluções de tecnologia da informação (TI) que garantirão que você tenha os sistemas mais eficientes disponíveis.

Isso inclui tarefas como projetar, testar e implementar estratégias para desempenho, confiabilidade, disponibilidade e escalabilidade do sistema/aplicativo, para fornecer aos usuários finais um nível de serviço satisfatório.

Cache é uma das muitas técnicas de entrega de aplicativos muito básicas, mas eficazes, nas quais você pode confiar. Antes de prosseguirmos, vamos dar uma breve olhada no que é cache, onde e/ou como ele pode ser aplicado e seus benefícios.

O que é cache ou cache de conteúdo?

Cache (ou Cache de Conteúdo) é uma técnica amplamente utilizada para armazenar cópias de dados em um local de armazenamento temporário (também conhecido como cache) para que os dados possam ser acessados de forma fácil e rápida quando forem recuperados do armazenamento original.

Os dados armazenados em um cache podem incluir arquivos ou fragmentos de arquivos (como arquivos HTML, scripts, imagens, documentos, etc.), operações ou registros de banco de dados, chamadas de API, registros DNS, etc., dependendo do tipo e da finalidade do cache.

Um cache pode estar na forma de hardware ou software. O cache baseado em software (que é o foco deste artigo) pode ser implementado em diferentes camadas de uma pilha de aplicativos.

Cache pode ser aplicado no lado do cliente (ou na camada de apresentação do aplicativo), por exemplo, cache do navegador ou cache do aplicativo (ou modo offline). A maioria, senão todos os navegadores modernos, vem com uma implementação de cache HTTP.

Você deve ter ouvido falar da frase popular “limpar seu cache” ao acessar um aplicativo da web para permitir que você veja os dados ou conteúdo mais recentes de um site ou aplicativo, em vez de o navegador usar uma cópia antiga do o conteúdo armazenado localmente.

Outro exemplo de cache do lado do cliente é o cache DNS, que ocorre no nível do sistema operacional (SO). É um armazenamento temporário de informações sobre pesquisas anteriores de DNS pelo sistema operacional ou navegador da web.

O cache também pode ser implementado no nível da rede, seja em uma LAN ou WAN por meio de proxies. Um exemplo comum desse tipo de cache está em CDNs (Content Delivery Networks), que são redes de servidores proxy da web distribuídas globalmente.

Em terceiro lugar, você também pode implementar o cache no(s) servidor(es) de origem ou backend. Existem diferentes formas de cache no nível do servidor, incluindo:

  • cache do servidor web (para armazenar imagens, documentos, scripts e assim por diante).
  • cache de aplicativos ou memorização (usado na leitura de arquivos do disco, dados de outros serviços ou processos, ou solicitação de dados de uma API, etc.).
  • cache do banco de dados (para fornecer acesso na memória a dados usados com frequência, como linhas solicitadas do banco de dados, resultados de consultas e outras operações).

Observe que os dados do cache podem ser armazenados em qualquer sistema de armazenamento, incluindo banco de dados, arquivo, memória do sistema e assim por diante, mas devem ser um meio mais rápido que a fonte primária. Nesse sentido, o cache na memória é a forma de cache mais eficaz e comumente usada.

Por que usar cache?

O cache oferece vários benefícios, incluindo os seguintes:

  • No nível do banco de dados, melhora o desempenho de leitura em microssegundos para dados armazenados em cache. Você também pode usar um cache de write-back para melhorar o desempenho de gravação, onde os dados são gravados na memória e posteriormente gravados no disco ou no armazenamento principal em intervalos especificados. Mas o aspecto da integridade dos dados pode ter implicações potencialmente desastrosas. Por exemplo, quando o sistema trava logo antes dos dados serem confirmados no armazenamento principal.
  • No nível do aplicativo, um cache pode armazenar dados lidos com frequência dentro do próprio processo do aplicativo, reduzindo assim o tempo de pesquisa de dados de segundos para microssegundos, especialmente na rede.
  • Considerando o desempenho geral do aplicativo e do servidor, o cache ajuda a reduzir a carga do servidor, a latência e a largura de banda da rede à medida que os dados armazenados em cache são servidos aos clientes, melhorando assim o tempo de resposta e as velocidades de entrega aos clientes.
  • O cache também permite a disponibilidade de conteúdo, especialmente por meio de CDNs, e muitos outros benefícios.

Neste artigo, revisaremos algumas das principais ferramentas de código aberto (cache de aplicativos/bancos de dados e cache de servidores proxy) para implementação no lado do servidor cache no Linux.

1. Redis

Redis (REmote DIctionary Server na íntegra) é um sistema de computação em memória distribuído gratuito e de código aberto, rápido, de alto desempenho e flexível que pode ser usado na maioria, senão em todas as linguagens de programação.

É um armazenamento de estrutura de dados na memória que funciona como um mecanismo de cache, banco de dados em disco persistente na memória e corretor de mensagens. Embora seja desenvolvido e testado em Linux (a plataforma recomendada para implantação) e OS X, o Redis também funciona em outros sistemas POSIX como *BSD, sem quaisquer dependências externas.

O Redis oferece suporte a inúmeras estruturas de dados, como strings, hashes, listas, conjuntos, conjuntos classificados, bitmaps, fluxos e muito mais. Isso permite que os programadores usem uma estrutura de dados específica para resolver um problema específico. Ele suporta operações automáticas em sua estrutura de dados, como anexar a uma string, enviar elementos para uma lista, incrementar o valor de um hash, calcular a interseção do conjunto e muito mais.

Seus principais recursos incluem replicação mestre-escravo Redis (que é assíncrona por padrão), alta disponibilidade e failover automático oferecido usando Redis Sentinel, cluster Redis (você pode escalar horizontalmente adicionando mais nós de cluster) e particionamento de dados (distribuindo dados entre vários Redis instâncias). Ele também oferece suporte para transações, scripts Lua, uma variedade de opções de persistência e criptografia de comunicação cliente-servidor.

Sendo um banco de dados na memória, mas persistente em disco, o Redis oferece o melhor desempenho quando funciona melhor com um conjunto de dados na memória. No entanto, você pode usá-lo com um banco de dados em disco, como MySQL, PostgreSQL e muitos mais. Por exemplo, você pode pegar pequenos dados com muita gravação no Redis e deixar outros pedaços de dados em um banco de dados em disco.

O Redis oferece suporte à segurança de várias maneiras: uma delas é usar um recurso de “modo protegido” para proteger as instâncias do Redis contra acesso de redes externas. Ele também suporta autenticação cliente-servidor (onde uma senha é configurada no servidor e fornecida no cliente) e TLS em todos os canais de comunicação, como conexões de cliente, links de replicação, protocolo de barramento Redis Cluster e muito mais.

Redis tem muitos casos de uso que incluem cache de banco de dados, cache de página inteira, gerenciamento de dados de sessão de usuário, armazenamento de respostas de API, sistema de mensagens de publicação/assinatura, fila de mensagens e muito mais. Eles podem ser aplicados em jogos, aplicativos de redes sociais, feeds RSS, análise de dados em tempo real, recomendações de usuários e assim por diante.

2. Memcached

Memcached é um sistema de cache de objetos de memória distribuído gratuito e de código aberto, simples, mas poderoso. É um armazenamento de valores-chave na memória para pequenos pedaços de dados, como resultados de chamadas de banco de dados, chamadas de API ou renderização de página. Ele roda em sistemas operacionais do tipo Unix, incluindo Linux e OS X e também em Microsoft Windows.

Sendo uma ferramenta de desenvolvimento, destina-se ao uso para aumentar a velocidade de aplicações web dinâmicas armazenando conteúdo em cache (por padrão, um cache menos usado recentemente (LRU)) reduzindo assim o carga de banco de dados em disco – atua como uma memória de curto prazo para aplicativos. Oferece uma API para as linguagens de programação mais populares.

Memcached suporta strings como o único tipo de dados. Possui uma arquitetura cliente-servidor, onde metade da lógica acontece no lado do cliente e a outra metade no lado do servidor. É importante ressaltar que os clientes entendem como escolher em qual servidor gravar ou ler um item. Além disso, um cliente sabe muito bem o que fazer caso não consiga se conectar a um servidor.

Embora seja um sistema de cache distribuído, portanto, suporta clustering, os servidores Memcached estão desconectados uns dos outros (ou seja, eles não têm conhecimento um do outro). Isso significa que não há suporte de replicação como no Redis. Eles também entendem como armazenar e buscar itens e gerenciar quando despejar ou reutilizar a memória. Você pode aumentar a memória disponível adicionando mais servidores.

Ele suporta autenticação e criptografia via TLS a partir do Memcached 1.5.13, mas esse recurso ainda está em fase experimental.

3. Apache Ignite

Apache Ignite também é um sistema de armazenamento de valores-chave distribuído na memória, cache e banco de dados multimodelo gratuito e de código aberto, horizontalmente escalável, que fornece APIs de processamento poderosas para computar dados distribuídos. É também uma grade de dados na memória que pode ser usada na memória ou com persistência nativa do Ignite. Ele roda em sistemas do tipo UNIX, como Linux e também Windows.

Ele apresenta armazenamento multicamadas, suporte SQL completo e transações ACID (Atomicidade, Consistência, Isolamento, Durabilidade) (suportadas apenas no nível da API de valor-chave) em vários nós de cluster, processamento co-localizado, e aprendizado de máquina. Ele suporta integração automática com qualquer banco de dados de terceiros, incluindo qualquer RDBMS (como MySQL, PostgreSQL, Oracle Database e assim por diante) ou armazenamentos NoSQL.

É importante notar que embora o Ignite funcione como um armazenamento de dados SQL, ele não é totalmente um banco de dados SQL. Ele lida de forma distinta com restrições e índices em comparação com bancos de dados tradicionais; ele oferece suporte a índices primários e secundários, mas apenas os índices primários são usados para impor a exclusividade. Além disso, não possui suporte para restrições de chave estrangeira.

O Ignite também oferece suporte à segurança, permitindo ativar a autenticação no servidor e fornecer credenciais de usuário aos clientes. Também há suporte para comunicação de soquete SSL para fornecer uma conexão segura entre todos os nós do Ignite.

Ignite tem muitos casos de uso que incluem sistemas de cache, aceleração de carga de trabalho do sistema, processamento de dados em tempo real e análises. Também pode ser usado como uma plataforma centrada em gráficos.

4. Servidor Couchbase

O Couchbase Server também é um banco de dados de engajamento NoSQL de código aberto, distribuído e orientado a documentos que armazena dados como itens em um formato de valor-chave. Ele funciona em Linux e outros sistemas operacionais, como Windows e Mac OS X. Ele usa uma linguagem de consulta orientada a documentos, rica em recursos, chamada N1QL, que fornece serviços poderosos de consulta e indexação para suportar operações de dados abaixo de milissegundos.

Seus recursos notáveis são um armazenamento rápido de valores-chave com cache gerenciado, indexadores específicos, um poderoso mecanismo de consulta, arquitetura de expansão (escalonamento multidimensional), integração de big data e SQL, segurança de pilha completa e alta disponibilidade.

O Couchbase Server vem com suporte nativo a cluster de múltiplas instâncias, onde uma ferramenta de gerenciamento de cluster coordena todas as atividades do nó e fornece simplesmente uma interface de todo o cluster para os clientes. É importante ressaltar que você pode adicionar, remover ou substituir nós conforme necessário, sem tempo de inatividade. Ele também oferece suporte à replicação de dados entre nós de um cluster e à replicação seletiva de dados entre data centers.

Ele implementa segurança por meio de TLS usando portas de servidor Couchbase dedicadas, diferentes mecanismos de autenticação (usando credenciais ou certificados), controle de acesso baseado em funções (para verificar cada usuário autenticado quanto às funções definidas pelo sistema que lhes são atribuídas), auditoria, logs e sessões .

Seus casos de uso incluem uma interface de programação unificada, pesquisa de texto completo, processamento paralelo de consultas, gerenciamento de documentos, indexação e muito mais. Ele foi projetado especificamente para fornecer gerenciamento de dados de baixa latência para aplicativos interativos em larga escala da Web, móveis e IoT.

5. HazelcastIMDG

Hazelcast IMDG (In-Memory Data Grid) é um middleware de grade de dados em memória de código aberto, leve, rápido e extensível, que fornece computação In-Memory distribuída elasticamente escalável. Hazelcast IMDG também roda em Linux, Windows, Mac OS X e qualquer outra plataforma com Java instalado. Ele oferece suporte a uma ampla variedade de estruturas de dados flexíveis e nativas de linguagem, como Map, Set, List, MultiMap, RingBuffer e HyperLogLog.

Hazelcast é peer-to-peer e suporta escalabilidade simples, configuração de cluster (com opções para coletar estatísticas, monitorar via protocolo JMX e gerenciar o cluster com utilitários úteis), estruturas e eventos de dados distribuídos, porcionamento de dados e transações. Também é redundante, pois mantém o backup de cada entrada de dados em vários membros. Para dimensionar seu cluster, basta iniciar outra instância, os dados e os backups serão balanceados de forma automática e uniforme.

Ele fornece uma coleção de APIs úteis para acessar as CPUs em seu cluster para obter velocidade máxima de processamento. Ele também oferece implementações distribuídas de um grande número de interfaces Java amigáveis ao desenvolvedor, como Map, Queue, ExecutorService, Lock e JCache.

Seus recursos de segurança incluem membros de cluster e autenticação de cliente e verificações de controle de acesso em operações de cliente por meio de recursos de segurança baseados em JAAS. Ele também permite interceptar conexões de soquete e operações remotas executadas pelos clientes, criptografia de comunicação em nível de soquete entre os membros do cluster e permitir a comunicação de soquete SSL/TLS. Mas de acordo com a documentação oficial, a maioria desses recursos de segurança são oferecidos na versão Enterprise.

Seu caso de uso mais popular é o cache distribuído na memória e o armazenamento de dados. Mas também pode ser implantado para clustering de sessões da web, substituição de NoSQL, processamento paralelo, mensagens fáceis e muito mais.

6. Mcrouter

Mcrouter é um roteador de protocolo Memcached gratuito e de código aberto para dimensionar implantações do Memcached, desenvolvido e mantido pelo Facebook. Possui protocolo Memcached ASCII, roteamento flexível, suporte a vários clusters, caches de vários níveis, pool de conexões, vários esquemas de hash, roteamento de prefixo, pools replicados, sombreamento de tráfego de produção, reconfiguração on-line e monitoramento de integridade de destino/failover automático.

Além disso, ele suporta aquecimento de cache frio, estatísticas avançadas e comandos de depuração, qualidade de serviço de exclusão de fluxo confiável, valores grandes e operações de transmissão, e vem com suporte para IPv6 e SSL.

Ele está sendo usado no Facebook e no Instagram como um componente central da infraestrutura de cache, para lidar com quase 5 bilhões de solicitações por segundo no pico.

7. Cache de Verniz

Varnish Cache é um acelerador de aplicativos da web flexível, moderno e multifuncional de código aberto que fica entre clientes da web e um servidor de origem. Ele roda em todas as plataformas modernas Linux, FreeBSD e Solaris (somente x86). É um excelente mecanismo de cache e acelerador de conteúdo que você pode implantar na frente de um servidor web como NGINX, Apache e muitos outros, para escutar na porta HTTP padrão para receber e encaminhar solicitações de clientes para o servidor web e entregar a web resposta dos servidores ao cliente.

Ao atuar como intermediário entre os clientes e os servidores de origem, o Varnish Cache oferece vários benefícios, sendo o elemento o armazenamento em cache do conteúdo da web na memória para aliviar a carga do servidor da web e melhorar a velocidade de entrega aos clientes.

Depois de receber uma solicitação HTTP de um cliente, ele a encaminha para o servidor web backend. Assim que o servidor web responde, o Varnish armazena em cache o conteúdo na memória e entrega a resposta ao cliente. Quando o cliente solicitar o mesmo conteúdo, o Varnish o servirá a partir da resposta do aplicativo de aumento de cache. Se não puder servir o conteúdo do cache, a solicitação será encaminhada para o backend e a resposta será armazenada em cache e entregue ao cliente.

Varnish apresenta VCL (Varnish Configuration Language – uma linguagem flexível específica de domínio) usada para configurar como as solicitações são tratadas e muito mais, Varnish Módulos (VMODS) que são extensões do Varnish Cache.

Em termos de segurança, o Varnish Cache suporta registro, inspeção de solicitações, otimização, autenticação e autorização via VMODS, mas não possui suporte nativo para SSL/TLS. Você pode ativar HTTPS para Varnish Cache usando um proxy SSL/TLS como Hitch ou NGINX.

Você também pode usar o Varnish Cache como firewall de aplicativo da web, defensor de ataques DDoS, protetor de hotlinking, balanceador de carga, ponto de integração, gateway de logon único, mecanismo de política de autenticação e autorização, solução rápida para back-ends instáveis e roteador de solicitação HTTP.

8. Proxy de cache Squid

Outra solução de proxy e cache gratuita e de código aberto, excelente e amplamente utilizada para Linux é o Squid. É um software de servidor de cache proxy da web rico em recursos que fornece serviços de proxy e cache para protocolos de rede populares, incluindo HTTP, HTTPS e FTP. Ele também roda em outras plataformas UNIX e Windows.

Assim como o Varnish Cache, ele recebe solicitações de clientes e as repassa para servidores back-end especificados. Quando o servidor backend responde, ele armazena uma cópia do conteúdo em um cache e a passa ao cliente. Solicitações futuras para o mesmo conteúdo serão atendidas a partir do cache, resultando em uma entrega mais rápida do conteúdo ao cliente. Assim, ele otimiza o fluxo de dados entre cliente e servidor para melhorar o desempenho e armazena em cache o conteúdo usado com frequência para reduzir o tráfego de rede e economizar largura de banda.

O Squid vem com recursos como distribuição de carga em hierarquias intercomunicantes de servidores proxy, produção de dados sobre padrões de uso da web (por exemplo, estatísticas sobre sites mais visitados), permite analisar, capturar, bloquear, substituir ou modificar as mensagens que estão sendo enviadas por proxy.

Ele também oferece suporte a recursos de segurança, como controle de acesso avançado, autorização e autenticação, suporte SSL/TLS e registro de atividades.

9. NGINX

NGINX (pronuncia-se Engine-X) é uma solução consolidada de código aberto, de alto desempenho, completa e muito popular para configurar infraestrutura web. É um servidor HTTP, um servidor proxy reverso, um servidor proxy de correio e um servidor proxy TCP/UDP genérico.

NGINX oferece recursos básicos de cache onde o conteúdo em cache é armazenado em um cache persistente no disco. A parte fascinante sobre o cache de conteúdo no NGINX é que ele pode ser configurado para entregar conteúdo desatualizado de seu cache quando não for possível buscar conteúdo novo dos servidores de origem.

NGINX oferece uma infinidade de recursos de segurança para proteger seus sistemas web, incluindo terminação SSL, restrição de acesso com autenticação básica HTTP, autenticação baseada no resultado da subsolicitação, autenticação JWT, restrição de acesso a recursos HTTP em proxy, restrição de acesso por localização geográfica, e muito mais.

Ele é comumente implantado como proxy reverso, balanceador de carga, terminador SSL/gateway de segurança, acelerador de aplicativo/cache de conteúdo e gateway de API em uma pilha de aplicativos. Também é usado para streaming de mídia.

10. Servidor de tráfego Apache

Por último, mas não menos importante, temos o Apache Traffic Server, um servidor proxy de cache de código aberto, rápido, escalável e extensível com suporte para HTTP/1.1 e HTTP/2.0. Ele foi projetado para melhorar a eficiência e o desempenho da rede, armazenando em cache o conteúdo acessado com frequência na borda de uma rede, para empresas, ISPs (provedores de servidores de Internet), provedores de backbone e muito mais.

Ele suporta proxy direto e reverso de tráfego HTTP/HTTPS. Também pode ser configurado para funcionar em um ou em ambos os modos simultaneamente. Possui cache persistente, APIs de plug-in; suporte para ICP (Internet Cache Protocol), ESI (Edge Side Included); Mantenha-ALive e muito mais.

Em termos de segurança, o Traffic Server suporta o controle de acesso do cliente, permitindo configurar clientes que têm permissão para usar o cache do proxy, terminação SSL para conexões entre clientes e ele mesmo, e entre ele e o servidor de origem. Ele também suporta autenticação e autorização básica por meio de um plugin, registro (de cada solicitação recebida e de cada erro detectado) e monitoramento.

O Traffic Server pode ser usado como cache de proxy da web, proxy de encaminhamento, proxy reverso, proxy transparente, balanceador de carga ou em uma hierarquia de cache.

Observações Finais

Cache é uma das tecnologias de entrega de conteúdo da web mais benéficas e estabelecidas há muito tempo, projetada principalmente para aumentar a velocidade de sites ou aplicativos. Ajuda a reduzir a carga do servidor, a latência e a largura de banda da rede porque os dados armazenados em cache são fornecidos aos clientes, melhorando assim o tempo de resposta do aplicativo e as velocidades de entrega aos clientes.

Neste artigo, revisamos as principais ferramentas de cache de código aberto para usar em sistemas Linux. Se você conhece outras ferramentas de cache de código aberto não listadas aqui, compartilhe-as conosco por meio do formulário de feedback abaixo. Você também pode compartilhar suas idéias sobre este artigo conosco.