Поиск по сайту:

Лучшие инструменты кэширования с открытым исходным кодом для Linux в 2023 году


Надежные распределенные вычислительные системы и приложения стали краеугольным камнем известных предприятий, особенно в области автоматизации и управления критически важными бизнес-процессами, а также предоставления услуг клиентам.

Как разработчики и системные администраторы этих систем и приложений, вы должны предоставлять все виды решений в области информационных технологий (ИТ), которые обеспечат вам наиболее эффективные доступные системы.

Сюда входят такие задачи, как проектирование, тестирование и реализация стратегий повышения производительности, надежности, доступности и масштабируемости системы/приложений, чтобы предоставить конечным пользователям удовлетворительный уровень обслуживания.

Кэширование – один из многих простых, но эффективных методов доставки приложений, на которые можно положиться. Прежде чем идти дальше, давайте кратко рассмотрим, что такое кэширование, где и/или как его можно применять, а также его преимущества.

Что такое кэширование или кэширование контента?

Кэширование (или Кэширование контента) – это широко используемый метод хранения копий данных во временном хранилище (также известном как кэш). чтобы к данным можно было легко и быстро получить доступ при их извлечении из исходного хранилища.

Данные, хранящиеся в кеше, могут включать файлы или фрагменты файлов (например, файлы HTML, сценарии, изображения, документы и т. д.), операции или записи базы данных, вызовы API, записи DNS и т. д. в зависимости от типа и цели кэширования.

Кэш может быть аппаратным или программным. Программный кеш (которому посвящена данная статья) может быть реализован на разных уровнях стека приложений.

Кэширование может применяться на стороне клиента (или на уровне представления приложения), например, кеширование браузера или кэширование приложения (или автономный режим). Большинство, если не все современные браузеры поставляются с реализацией HTTP-кеша.

Возможно, вы слышали о популярной фразе «очистите кэш» при доступе к веб-приложению, чтобы вы могли видеть последние данные или контент на веб-сайте или в приложении вместо того, чтобы браузер использовал старую копию контент хранится локально.

Другим примером кэширования на стороне клиента является DNS-кэширование, которое происходит на уровне операционной системы (ОС). Это временное хранилище информации о предыдущих поисках DNS, выполненных операционной системой или веб-браузером.

Кэширование также можно реализовать на уровне сети, либо в LAN, либо в WAN через прокси-серверы. Типичным примером такого типа кэширования являются CDN (сети доставки контента), которые представляют собой глобально распределенные сети веб-прокси-серверов.

В-третьих, вы также можете реализовать кэширование на исходном или внутреннем сервере(ах). Существуют различные формы кэширования на уровне сервера, они включают в себя:

  • Кэширование веб-сервера (для кэширования изображений, документов, скриптов и т. д.).
  • кэширование приложения или запоминание (используется при чтении файлов с диска, данных из других служб или процессов или запросе данных из API и т. д.).
  • кэширование базы данных (для обеспечения доступа в памяти к часто используемым данным, таким как запрошенные строки базы данных, результаты запросов и другие операции).

Обратите внимание, что данные кэша могут храниться в любой системе хранения, включая базу данных, файл, системную память и т. д., но это должен быть более быстрый носитель, чем основной источник. В этом отношении кэширование в памяти является наиболее эффективной и часто используемой формой кэширования.

Зачем использовать кэширование?

Кэширование предлагает множество преимуществ, включая следующие:

  • На уровне базы данных это повышает производительность чтения кэшированных данных до микросекунд. Вы также можете использовать кэш обратной записи для повышения производительности записи, когда данные записываются в память, а затем записываются на диск или в основное хранилище через определенные промежутки времени. Но аспект целостности данных может иметь потенциально катастрофические последствия. Например, когда система выходит из строя непосредственно перед переносом данных в основное хранилище.
  • На уровне приложения кэш может хранить часто читаемые данные внутри самого процесса приложения, тем самым сокращая время поиска данных с секунд до микросекунд, особенно по сети.
  • Учитывая общую производительность приложений и серверов, кэширование помогает снизить нагрузку на сервер, задержку и пропускную способность сети при передаче кэшированных данных клиентам, тем самым улучшая время отклика и скорость доставки клиентам.
  • Кэширование также обеспечивает доступность контента, особенно через CDN, и дает множество других преимуществ.

В этой статье мы рассмотрим некоторые из лучших инструментов с открытым исходным кодом (кэширование приложений/баз данных и кэширование прокси-серверов) для реализации на стороне сервера. кэширование в Linux.

1. Редис

Redis (полная версия REmote DIctionary Server) – это бесплатная, быстрая, высокопроизводительная и гибкая распределенная вычислительная система с открытым исходным кодом, которую можно использовать с большинством, если не со всеми, языками программирования.

Это хранилище структур данных в памяти, которое работает как механизм кэширования, постоянная база данных на диске в памяти и брокер сообщений. Хотя Redis разработан и протестирован на Linux (рекомендуемая платформа для развертывания) и OS X, он также работает в других системах POSIX, таких как *BSD, без каких-либо внешних зависимостей.

Redis поддерживает множество структур данных, таких как строки, хеши, списки, наборы, отсортированные наборы, растровые изображения, потоки и многое другое. Это позволяет программистам использовать определенную структуру данных для решения конкретной проблемы. Он поддерживает автоматические операции со своей структурой данных, такие как добавление к строке, добавление элементов в список, увеличение значения хеша, вычисление пересечения наборов и многое другое.

Его ключевые функции включают в себя репликацию главный-подчиненный Redis (которая по умолчанию является асинхронной), высокую доступность и автоматическое переключение при сбое, предлагаемое с помощью Redis Sentinel, кластер Redis (вы можете масштабировать горизонтально, добавляя больше узлов кластера) и секционирование данных (распределение данных между несколькими Redis). экземпляры). Он также поддерживает транзакции, сценарии Lua, ряд вариантов сохранения и шифрование связи клиент-сервер.

Будучи базой данных, хранящейся в памяти, но постоянной на диске, Redis обеспечивает наилучшую производительность, когда он лучше всего работает с набором данных в памяти. Однако вы можете использовать его с базами данных на диске, такими как MySQL, PostgreSQL и многими другими. Например, вы можете взять в Redis очень тяжелые для записи небольшие данные и оставить другие фрагменты данных в базе данных на диске.

Redis поддерживает безопасность разными способами: один из них — использование функции «защищенного режима» для защиты экземпляров Redis от доступа из внешних сетей. Он также поддерживает аутентификацию клиент-сервер (когда пароль настраивается на сервере и предоставляется клиентом) и TLS на всех каналах связи, таких как клиентские соединения, каналы репликации, протокол шины Redis Cluster и т. д.

Redis имеет очень много вариантов использования, включая кэширование базы данных, полностраничное кэширование, управление данными пользовательских сеансов, хранение ответов API, систему обмена сообщениями публикации/подписки, очередь сообщений и многое другое. Их можно применять в играх, приложениях социальных сетей, RSS-каналах, анализе данных в реальном времени, рекомендациях пользователей и т. д.

2. Мемкеш

Memcached — это бесплатная, простая, но мощная система кэширования объектов в распределенной памяти с открытым исходным кодом. Это хранилище значений ключей в памяти для небольших фрагментов данных, таких как результаты вызовов базы данных, вызовы API или рендеринг страниц. Он работает в Unix-подобных операционных системах, включая Linux и OS X, а также в Microsoft Windows.

Будучи инструментом разработчика, он предназначен для повышения скорости динамических веб-приложений за счет кэширования контента (по умолчанию это кэш Наименее недавно использованный (LRU)), что позволяет сократить загрузка базы данных на диск – она действует как кратковременная память для приложений. Он предлагает API для самых популярных языков программирования.

Memcached поддерживает строки как единственный тип данных. Он имеет клиент-серверную архитектуру, в которой половина логики выполняется на стороне клиента, а другая половина — на стороне сервера. Важно отметить, что клиенты понимают, как выбрать сервер для записи или чтения элемента. Также клиент прекрасно знает, что делать, если он не может подключиться к серверу.

Хотя это распределенная система кэширования и, следовательно, поддерживает кластеризацию, серверы Memcached отключены друг от друга (т. е. они не знают друг о друге). Это означает, что здесь нет поддержки репликации, как в Redis. Они также понимают, как хранить и извлекать элементы, а также определять, когда вытеснять или повторно использовать память. Вы можете увеличить доступную память, добавив больше серверов.

Начиная с Memcached 1.5.13, он поддерживает аутентификацию и шифрование через TLS, но эта функция все еще находится на экспериментальной стадии.

3. Апач Игнит

Apache Ignite — это также бесплатная система с открытым исходным кодом, горизонтально масштабируемая, распределенная в памяти, хранящая ключ-значение, кэш и многомодельная система баз данных, которая предоставляет мощные API-интерфейсы обработки для вычисления распределенных данных. Это также сетка данных в памяти, которую можно использовать либо в памяти, либо с помощью встроенной системы персистентности Ignite. Он работает в UNIX-подобных системах, таких как Linux, а также Windows.

Он включает в себя многоуровневое хранилище, полную поддержку SQL и транзакции ACID (атомарность, согласованность, изоляция, долговечность) (поддерживается только на уровне API «ключ-значение») на нескольких узлах кластера, совмещенную обработку, и машинное обучение. Он поддерживает автоматическую интеграцию с любыми сторонними базами данных, включая любые СУБД (такие как MySQL, PostgreSQL, Oracle Database и т. д.) или хранилища NoSQL.

Важно отметить, что хотя Ignite работает как хранилище данных SQL, он не является полностью базой данных SQL. Он отчетливо обрабатывает ограничения и индексы по сравнению с традиционными базами данных; он поддерживает первичные и вторичные индексы, но для обеспечения уникальности используются только первичные индексы. Кроме того, он не поддерживает ограничения внешнего ключа.

Ignite также поддерживает безопасность, позволяя вам включать аутентификацию на сервере и предоставлять учетные данные пользователя клиентам. Также поддерживается связь через сокеты SSL для обеспечения безопасного соединения между всеми узлами Ignite.

Ignite имеет множество вариантов использования, включая системы кэширования, ускорение рабочей нагрузки системы, обработку данных в реальном времени и аналитику. Его также можно использовать в качестве графоцентрической платформы.

4. Сервер Couchbase

Couchbase Server также представляет собой распределенную базу данных NoSQL с открытым исходным кодом, ориентированную на документы, которая хранит данные в виде элементов в формате «ключ-значение». Он работает в Linux и других операционных системах, таких как Windows и Mac OS X. Он использует многофункциональный, ориентированный на документы язык запросов под названием N1QL, который предоставляет мощные службы запросов и индексирования для поддержки операций с данными, выполняемых за доли миллисекунды.

Его примечательными особенностями являются быстрое хранилище «ключ-значение» с управляемым кешем, специальные индексаторы, мощный механизм запросов, масштабируемая архитектура (многомерное масштабирование), интеграция больших данных и SQL, полнофункциональная безопасность и высокая доступность.

Couchbase Server поставляется со встроенной поддержкой нескольких экземпляров кластера, где инструмент менеджера кластера координирует все действия узлов и предоставляет клиентам простой интерфейс в масштабе всего кластера. Важно отметить, что вы можете добавлять, удалять или заменять узлы по мере необходимости без простоев. Он также поддерживает репликацию данных между узлами кластера и выборочную репликацию данных между центрами обработки данных.

Он реализует безопасность через TLS с использованием выделенных портов сервера Couchbase, различных механизмов аутентификации (с использованием учетных данных или сертификатов), контроля доступа на основе ролей (для проверки каждого аутентифицированного пользователя на предмет назначенных ему системных ролей), аудита, журналов и сеансов. .

Варианты его использования включают унифицированный программный интерфейс, полнотекстовый поиск, параллельную обработку запросов, управление документами, индексирование и многое другое. Он специально разработан для обеспечения управления данными с малой задержкой для крупномасштабных интерактивных веб-приложений, мобильных приложений и приложений IoT.

5. Хейзелкаст IMDG

Hazelcast IMDG (In-Memory Data Grid) — это легкое, быстрое и расширяемое промежуточное программное обеспечение для сетки данных в памяти с открытым исходным кодом, которое обеспечивает эластично масштабируемые распределенные вычисления в памяти. Hazelcast IMDG также работает на Linux, Windows, Mac OS X и любой другой платформе с установленной Java. Он поддерживает широкий спектр гибких и собственных структур данных, таких как Map, Set, List, MultiMap, RingBuffer и HyperLogLog.

Hazelcast является одноранговым и поддерживает простую масштабируемость, настройку кластера (с возможностью сбора статистики, мониторинга через протокол JMX и управление кластером с помощью полезных утилит), распределенные структуры данных и события, порционирование данных. и транзакции. Это также избыточно, поскольку сохраняет резервную копию каждой записи данных на нескольких участниках. Чтобы масштабировать кластер, просто запустите еще один экземпляр, данные и резервные копии будут автоматически и равномерно сбалансированы.

Он предоставляет набор полезных API-интерфейсов для доступа к процессорам вашего кластера для обеспечения максимальной скорости обработки. Он также предлагает распределенные реализации большого количества удобных для разработчиков интерфейсов Java, таких как Map, Queue, ExecutorService, Lock и JCache.

Его функции безопасности включают в себя элементы кластера, а также проверку подлинности клиента и контроль доступа к операциям клиента с помощью функций безопасности на основе JAAS. Он также позволяет перехватывать соединения сокетов и удаленные операции, выполняемые клиентами, шифровать связь на уровне сокетов между членами кластера и включать сокетную связь SSL/TLS. Но согласно официальной документации, большинство этих функций безопасности предлагается в версии Enterprise.

Самый популярный вариант использования — распределенное кэширование в памяти и хранение данных. Но его также можно использовать для кластеризации веб-сессий, замены NoSQL, параллельной обработки, простого обмена сообщениями и многого другого.

6. Макроутер

Mcrouter — это бесплатный маршрутизатор протокола Memcached с открытым исходным кодом для масштабирования развертываний Memcached, разработанный и поддерживаемый Facebook. Он поддерживает протокол Memcached ASCII, гибкую маршрутизацию, поддержку нескольких кластеров, многоуровневые кэши, пулы соединений, несколько схем хеширования, маршрутизацию префиксов, реплицируемые пулы, теневое копирование производственного трафика, онлайн-реконфигурацию и мониторинг работоспособности назначения/автоматическое переключение при сбое.

Кроме того, он поддерживает прогрев холодного кэша, расширенную статистику и команды отладки, надежное качество обслуживания потока удаления, большие значения и широковещательные операции, а также поддерживает IPv6 и SSL.

Он используется в Facebook и Instagram в качестве основного компонента инфраструктуры кэша, способного обрабатывать почти 5 миллиардов запросов в секунду в пиковую нагрузку.

7. Тайник с лаком

Varnish Cache — это гибкий, современный и многофункциональный ускоритель веб-приложений с открытым исходным кодом, который находится между веб-клиентами и исходным сервером. Он работает на всех современных платформах Linux, FreeBSD и Solaris (только x86). Это отличный механизм кэширования и ускоритель контента, который вы можете развернуть перед веб-сервером, таким как NGINX, Apache и многими другими, чтобы прослушивать HTTP-порт по умолчанию для получения и пересылки клиентских запросов на веб-сервер и доставки веб-страниц. Ответ сервера клиенту.

Выступая в качестве посредника между клиентами и исходными серверами, Varnish Cache предлагает несколько преимуществ: этот элемент кэширует веб-контент в памяти, чтобы уменьшить нагрузку на веб-сервер и повысить скорость доставки клиентам.

После получения HTTP-запроса от клиента он пересылает его на внутренний веб-сервер. Как только веб-сервер отвечает, Varnish кэширует содержимое в памяти и доставляет ответ клиенту. Когда клиент запрашивает тот же контент, Varnish будет обслуживать его из ответа приложения, увеличивающего кеш. Если он не может обработать контент из кеша, запрос перенаправляется на серверную часть, а ответ кэшируется и доставляется клиенту.

Функции Varnish, VCL (Язык конфигурации Varnish – гибкий язык, зависящий от предметной области), используемые для настройки обработки запросов и многого другого, Varnish Модули (VMODS), являющиеся расширениями Varnish Cache.

С точки зрения безопасности Varnish Cache поддерживает ведение журнала, проверку запросов, регулирование, аутентификацию и авторизацию через VMODS, но ему не хватает встроенной поддержки SSL/TLS. Вы можете включить HTTPS для Varnish Cache, используя прокси-сервер SSL/TLS, например Hitch или NGINX.

Вы также можете использовать Varnish Cache в качестве брандмауэра веб-приложений, защиты от DDoS-атак, защиты от горячих ссылок, балансировщика нагрузки, точки интеграции, шлюза единого входа, механизма политики аутентификации и авторизации, быстрого исправления нестабильных серверных частей и маршрутизатора HTTP-запросов.

8. Прокси-сервер для кэширования Squid

Еще одно бесплатное, выдающееся и широко используемое решение для прокси-серверов и кэширования с открытым исходным кодом для Linux — это Squid. Это многофункциональное программное обеспечение кэш-сервера веб-прокси, которое предоставляет услуги прокси-сервера и кэша для популярных сетевых протоколов, включая HTTP, HTTPS и FTP. Он также работает на других платформах UNIX и Windows.

Как и Varnish Cache, он получает запросы от клиентов и передает их на указанные внутренние серверы. Когда внутренний сервер отвечает, он сохраняет копию содержимого в кеше и передает ее клиенту. Будущие запросы на тот же контент будут обслуживаться из кэша, что приведет к более быстрой доставке контента клиенту. Таким образом, он оптимизирует поток данных между клиентом и сервером для повышения производительности и кэширует часто используемый контент для уменьшения сетевого трафика и экономии пропускной способности.

Squid имеет такие функции, как распределение нагрузки по взаимодействующим иерархиям прокси-серверов, сбор данных о шаблонах использования Интернета (например, статистика о наиболее посещаемых сайтах), позволяет анализировать, захватывать, блокировать, заменять или изменять проксируемые сообщения.

Он также поддерживает функции безопасности, такие как расширенный контроль доступа, авторизация и аутентификация, поддержка SSL/TLS и ведение журнала активности.

9. НГИНКС

NGINX (произносится как Engine-X) — это высокопроизводительное, полнофункциональное и очень популярное консолидированное решение с открытым исходным кодом для настройки веб-инфраструктуры. Это HTTP-сервер, обратный прокси-сервер, почтовый прокси-сервер и универсальный прокси-сервер TCP/UDP.

NGINX предлагает базовые возможности кэширования, при которых кэшированный контент хранится в постоянном кэше на диске. Самое интересное в кэшировании контента в NGINX заключается в том, что его можно настроить на доставку устаревшего контента из своего кеша, когда он не может получить свежий контент с исходных серверов.

NGINX предлагает множество функций безопасности для защиты ваших веб-систем, в том числе завершение SSL, ограничение доступа с помощью базовой аутентификации HTTP, аутентификацию на основе результата подзапроса, аутентификацию JWT, ограничение доступа к прокси-ресурсам HTTP, ограничение доступа по географическому местоположению, и многое другое.

Он обычно развертывается в качестве обратного прокси-сервера, балансировщика нагрузки, терминатора SSL/шлюза безопасности, ускорителя приложений/кэша контента и шлюза API в стеке приложений. Он также используется для потоковой передачи мультимедиа.

10. Сервер трафика Apache

И последнее, но не менее важное: у нас есть Apache Traffic Server — быстрый, масштабируемый и расширяемый кеширующий прокси-сервер с открытым исходным кодом и поддержкой HTTP/1.1 и HTTP/2.0. Он предназначен для повышения эффективности и производительности сети за счет кэширования часто используемого контента на границе сети для предприятий, интернет-провайдеров (провайдеров интернет-серверов), магистральных провайдеров и т. д.

Он поддерживает как прямое, так и обратное проксирование HTTP/HTTPS-трафика. Его также можно настроить для работы в одном или обоих режимах одновременно. Он имеет постоянное кэширование, API-интерфейсы плагинов; поддержка ICP (протокол интернет-кэша), ESI (включает Edge Side); Keep-ALive и многое другое.

С точки зрения безопасности, Traffic Server поддерживает контроль доступа клиентов, позволяя вам настраивать клиентов, которым разрешено использовать кэш прокси, прекращение SSL как для соединений между клиентами и самим собой, так и между ним и исходным сервером. Он также поддерживает аутентификацию и базовую авторизацию через плагин, ведение журнала (каждого полученного запроса и каждой обнаруженной ошибки) и мониторинг.

Сервер трафика можно использовать в качестве кэша веб-прокси, прямого прокси-сервера, обратного прокси-сервера, прозрачного прокси-сервера, балансировщика нагрузки или в иерархии кэша.

Заключительные замечания

Кэширование – одна из наиболее полезных и давно зарекомендовавших себя технологий доставки веб-контента, которая в первую очередь предназначена для увеличения скорости работы веб-сайтов или приложений. Это помогает снизить нагрузку на сервер, задержку и пропускную способность сети, поскольку кэшированные данные передаются клиентам, тем самым улучшая время ответа приложений и скорость доставки клиентам.

В этой статье мы рассмотрели лучшие инструменты кэширования с открытым исходным кодом, которые можно использовать в системах Linux. Если вам известны другие инструменты кэширования с открытым исходным кодом, не перечисленные здесь, поделитесь ими с нами через форму обратной связи ниже. Вы также можете поделиться с нами своими мыслями по поводу этой статьи.