Надежные распределенные вычислительные системы и приложения стали краеугольным камнем выдающихся предприятий, особенно в области автоматизации и управления критически важными бизнес-процессами и предоставления услуг клиентам. Как разработчики и системные администраторы этих систем и приложений, вы должны предоставлять все виды решений в области информационных технологий (ИТ), которые обеспечат вам наиболее эффективные системы.
Это включает в себя такие задачи, как проектирование, тестирование и реализация стратегий для производительности, надежности, доступности и масштабируемости системы / приложения, чтобы предоставить конечным пользователям удовлетворительный уровень обслуживания. Кэширование - это одна из многих, очень простых, но эффективных технологий доставки приложений, на которые вы можете положиться. Прежде чем мы пойдем дальше, давайте кратко рассмотрим, что такое кэширование, где и / или как его можно применять, и его преимущества?
Что такое кеширование или кеширование контента?
Кэширование (или кеширование содержимого) - это широко используемый метод хранения копий данных во временном хранилище (также известном как кэш), так что к ним можно легко и быстро получить доступ, чем при их извлечении из исходного хранилища. Данные, хранящиеся в кэше, могут включать в себя файлы или фрагменты файлов (такие как файлы HTML, сценарии, изображения, документы и т. Д.), Операции или записи базы данных, вызовы API, записи DNS и т. Д., В зависимости от типа и цели кэширования.
Кеш может быть в форме аппаратного или программного обеспечения. Программный кеш (о котором идет речь в этой статье) может быть реализован на разных уровнях стека приложений.
Кэширование может применяться на стороне клиента (или на уровне представления приложения), например, кэширование в браузере или кэширование приложения (или автономный режим). Большинство, если не все современные браузеры поставляются с реализацией HTTP-кэша. Возможно, вы слышали о популярной фразе «очистить кэш» при доступе к веб-приложению, которая позволяет просматривать последние данные или контент на веб-сайте или в приложении, а не в браузере, использующем старую копию контента, хранящегося локально.
Другим примером кэширования на стороне клиента является DNS-кэширование, которое происходит на уровне операционной системы (ОС). Это временное хранилище информации о предыдущих поисках DNS операционной системой или веб-браузером.
Кэширование также может быть реализовано на сетевом уровне, либо в локальной сети, либо в глобальной сети через прокси. Типичным примером такого типа кэширования являются CDN (сети доставки контента), которые представляют собой глобально распределенную сеть веб-прокси-серверов.
В-третьих, вы также можете реализовать кэширование на исходном или внутреннем сервере (ах). Существуют различные формы кэширования на уровне сервера, они включают в себя:кэширование веб-сервера (для кэширования изображений, документов, скриптов и т. д.).
кэширование или запоминание приложения (используется при чтении файлов с диска, данных из других служб или процессов или при запросе данных из API и т. д.).
кэширование базы данных (для обеспечения доступа в памяти к часто используемым данным, таким как запрошенные строки базы данных, результаты запроса и другие операции).
Обратите внимание, что данные кэша могут храниться в любой системе хранения, включая базу данных, файл, системную память и т. Д., Но должны быть более быстрым носителем, чем первичный источник. В этом отношении кэширование в памяти является наиболее эффективной и широко используемой формой кэширования.
Зачем использовать кеширование?
Кэширование предлагает множество преимуществ, включая следующие:
На уровне базы данных это повышает производительность чтения в микросекундах для кэшированных данных. Вы также можете использовать кэш с обратной записью для повышения производительности записи, когда данные записываются в память, а затем записываются на диск или в основное хранилище с заданными интервалами. Но аспект целостности данных может иметь потенциально катастрофические последствия. Например, когда происходит сбой системы непосредственно перед передачей данных в основное хранилище.
На уровне приложения кэш может хранить часто читаемые данные в самом процессе приложения, тем самым сокращая время поиска данных с секунд до микросекунд, особенно по сети.
Принимая во внимание общую производительность приложений и серверов, кэширование помогает снизить нагрузку на сервер, задержку и пропускную способность сети, поскольку кэшированные данные передаются клиентам, тем самым улучшая время отклика и скорость доставки клиентам.
Кэширование также обеспечивает доступность контента, особенно через CDN, и многие другие преимущества.
В этой статье мы рассмотрим некоторые из лучших инструментов с открытым исходным кодом (приложения / базы данных и кэширование прокси-серверов) для реализации кэширования на стороне сервера в Linux.
1. Redis
Redis (REmote DIctionary Server in full) - это бесплатная, быстрая, высокопроизводительная и гибкая распределенная вычислительная система с открытым исходным кодом, которая может использоваться на большинстве, если не на всех языках программирования.
Это хранилище структуры данных в памяти, которое работает как механизм кэширования, постоянная база данных в памяти и посредник сообщений. Хотя он разработан и протестирован для Linux (рекомендуемой платформы для развертывания) и OS X, Redis также работает в других системах POSIX, таких как * BSD, без каких-либо внешних зависимостей.
Redis поддерживает множество структур данных, таких как строки, хэши, списки, наборы, отсортированные наборы, растровые изображения, потоки и многое другое. Это позволяет программистам использовать определенную структуру данных для решения конкретной проблемы. Он поддерживает автоматические операции над структурой данных, такие как добавление в строку, добавление элементов в список, увеличение значения хеш-функции, пересечение вычислительных множеств и многое другое.
Его основные функции включают в себя репликацию Redis Master-Slave (которая является асинхронной по умолчанию), высокую доступность и автоматическое восстановление после отказа, предлагаемые с помощью Redis Sentinel, кластер Redis (вы можете масштабировать горизонтально, добавляя больше узлов кластера) и разделение данных (распределение данных между несколькими экземплярами Redis). ). Он также поддерживает транзакции, сценарии Lua, ряд вариантов сохранения и шифрование связи клиент-сервер.
Будучи базой данных в памяти, но постоянной на диске, Redis предлагает лучшую производительность, когда она лучше всего работает с набором данных в памяти. Однако вы можете использовать его с базой данных на диске, такой как MySQL, PostgreSQL и многими другими. Например, вы можете взять в Redis очень тяжелые для записи небольшие данные и оставить другие фрагменты данных в базе данных на диске.
Redis поддерживает безопасность разными способами: один с помощью функции «защищенного режима» для защиты доступа к экземплярам Redis из внешних сетей. Он также поддерживает аутентификацию клиент-сервер (где пароль настраивается на сервере и предоставляется на клиенте) и TLS на всех каналах связи, таких как клиентские соединения, каналы репликации, протокол шины Redis Cluster и многое другое.
Redis имеет очень много вариантов использования, которые включают в себя кэширование базы данных, полностраничное кэширование, управление данными сеанса пользователя, хранение ответов API, систему обмена сообщениями публикации / подписки, очередь сообщений и многое другое. Они могут применяться в играх, приложениях социальных сетей, RSS-каналах, аналитике данных в реальном времени, рекомендациях пользователей и т. Д.
2. Memcached
Memcached - это бесплатная, простая, но мощная система кеширования объектов с открытым исходным кодом. Это хранилище значений ключей в памяти для небольших порций данных, таких как результаты вызовов базы данных, вызовов API или рендеринга страниц. Он работает в Unix-подобных операционных системах, включая Linux и OS X, а также в Microsoft Windows.
Являясь инструментом разработчика, он предназначен для повышения скорости динамических веб-приложений за счет кэширования содержимого (по умолчанию - кэш-память с наименьшим количеством недавно использовавшихся (LRU)), что позволяет снизить нагрузку на базу данных на диске - он действует как кратковременная память для Приложения. Он предлагает API для самых популярных языков программирования.
Memcached поддерживает строки как единственный тип данных. Он имеет архитектуру клиент-сервер, где половина логики происходит на стороне клиента, а другая половина - на стороне сервера. Важно, что клиенты понимают, как выбрать сервер для записи или чтения элемента. Кроме того, клиент очень хорошо знает, что делать, если он не может подключиться к серверу.
Хотя система распределенного кэширования поддерживает кластеризацию, серверы Memcached отключены друг от друга (т.е. они не знают друг друга). Это означает, что нет поддержки репликации, как в Redis. Они также понимают, как хранить и извлекать предметы, управлять, когда выселять или повторно использовать память. Вы можете увеличить доступную память, добавив больше серверов.
Начиная с Memcached 1.5.13, он поддерживает аутентификацию и шифрование через TLS, но эта функция все еще находится на экспериментальной стадии.
3. Apache Ignite
Apache Ignite, также свободно распространяемая горизонтально-масштабируемая распределенная система хранения значений ключей, кэш-памяти и многомодельная база данных с горизонтальным масштабированием и открытым исходным кодом, предоставляющая мощные API обработки для вычисления распределенных данных. Это также сетка данных в памяти, которую можно использовать либо в памяти, либо с собственным постоянством Ignite. Он работает в UNIX-подобных системах, таких как Linux, а также Windows.
Он имеет многоуровневое хранилище, полную поддержку SQL и транзакции ACID (атомарность, согласованность, изоляция, долговечность) (поддерживаются только на уровне API ключ-значение) для нескольких узлов кластера, совместной обработки и машинного обучения. Он поддерживает автоматическую интеграцию с любыми сторонними базами данных, включая любые СУБД (такие как MySQL, PostgreSQL, Oracle Database и т. Д.) Или хранилища NoSQL.
Важно отметить, что хотя Ignite работает как хранилище данных SQL, он не является полностью базой данных SQL. Он четко обрабатывает ограничения и индексы по сравнению с традиционными базами данных; он поддерживает первичные и вторичные индексы, но только первичные индексы используются для обеспечения уникальности. Кроме того, он не поддерживает ограничения внешнего ключа.
Ignite также поддерживает безопасность, позволяя включать аутентификацию на сервере и предоставлять учетные данные пользователя на клиентах. Существует также поддержка сокетов SSL для обеспечения безопасного соединения между всеми узлами Ignite.
Ignite имеет много вариантов использования, которые включают систему кэширования, ускорение загрузки системы, обработку данных в реальном времени и аналитику. Он также может быть использован в качестве графо-ориентированной платформы.
4. Couchbase Server
Couchbase Server также является распределенной базой данных NoSQL с открытым исходным кодом, ориентированной на документы, которая хранит данные в виде элементов в формате ключ-значение. Он работает в Linux и других операционных системах, таких как Windows и Mac OS X. Он использует многофункциональный, ориентированный на документы язык запросов N1QL, который предоставляет мощные сервисы запросов и индексирования для поддержки операций с данными с точностью до миллисекунды.
Его примечательными особенностями являются быстрое хранилище значений ключей с управляемым кешем, специализированные индексаторы, мощный механизм запросов, архитектура горизонтального масштабирования (многомерное масштабирование), интеграция больших данных и SQL, безопасность полного стека и высокая доступность. ,
Couchbase Server поставляется с встроенной поддержкой нескольких экземпляров кластера, где инструмент менеджера кластеров координирует все действия узлов и предоставляет клиентам простой интерфейс для всего кластера. Важно отметить, что вы можете добавлять, удалять или заменять узлы по мере необходимости, без простоев. Он также поддерживает репликацию данных между узлами кластера, выборочную репликацию данных между дата-центрами.
Он реализует безопасность через TLS с использованием выделенных портов Couchbase Server, различных механизмов аутентификации (с использованием учетных данных или сертификатов), контроля доступа на основе ролей (для проверки каждого аутентифицированного пользователя на наличие определенных им ролей, определенных системой), аудита, журналов и сеансов. ,
Его варианты использования включают унифицированный интерфейс программирования, полнотекстовый поиск, параллельную обработку запросов, управление документами и индексирование и многое другое. Он специально разработан для обеспечения управления данными с малой задержкой для крупномасштабных интерактивных веб-приложений, мобильных приложений и IoT.
5. Hazelcast 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
Mcrouter - это бесплатный маршрутизатор Memcached с открытым исходным кодом для масштабирования развертываний Memcached, разработанный и поддерживаемый Facebook. Он поддерживает протокол Memcached ASCII, гибкую маршрутизацию, поддержку нескольких кластеров, многоуровневые кэши, пулы соединений, схемы множественного хеширования, маршрутизацию с префиксами, реплицированные пулы, теневое копирование рабочего трафика, онлайн-реконфигурирование и мониторинг работоспособности назначения / автоматический переход на другой ресурс.
Кроме того, он поддерживает «холодный» разогрев кеша, расширенные команды статистики и отладки, надежное качество обслуживания потока удаления, большие значения, широковещательные операции и поставляется с поддержкой IPv6 и SSL.
Он используется в Facebook и Instagram в качестве основного компонента инфраструктуры кэширования, чтобы обрабатывать почти 5 миллиардов запросов в секунду на пике.
7. Varnish Cache
Varnish Cache - это гибкий, современный и многоцелевой ускоритель веб-приложений с открытым исходным кодом, который размещается между веб-клиентами и исходным сервером. Он работает на всех современных платформах Linux, FreeBSD и Solaris (только для x86). Это отличный механизм кэширования и ускоритель контента, который можно развернуть перед веб-сервером, таким как NGINX, Apache и многими другими, для прослушивания порта HTTP по умолчанию для получения и пересылки клиентских запросов на веб-сервер и доставки в Интернет. ответ сервера клиенту.
Выполняя роль посредника между клиентами и исходными серверами, Varnish Cache предлагает несколько преимуществ, в том числе кеширование веб-содержимого в памяти для снижения нагрузки на веб-сервер и повышения скорости доставки клиентам.
Получив HTTP-запрос от клиента, он перенаправляет его на внутренний веб-сервер. Как только веб-сервер отвечает, Varnish кэширует содержимое в памяти и доставляет ответ клиенту. Когда клиент запрашивает тот же контент, Varnish будет обслуживать его из ответа приложения, повышающего кэш. Если он не может обслуживать содержимое из кэша, запрос перенаправляется на сервер, а ответ кэшируется и доставляется клиенту.
Функции Varnish VCL (Varnish Configuration Language - гибкий язык, специфичный для домена), используемый для настройки обработки запросов и многое другое, Varnish Modules (VMODS), которые являются расширениями для Varnish Cache.
В плане безопасности Varnish Cache поддерживает ведение журналов, проверку запросов и регулирование, проверку подлинности и авторизацию через VMODS, но ему не хватает встроенной поддержки SSL / TLS. Вы можете включить HTTPS для Varnish Cache, используя прокси SSL / TLS, такой как Hitch или NGINX.
Вы также можете использовать Varnish Cache в качестве брандмауэра веб-приложения, защиты от DDoS-атак, средства защиты от хотлинкинга, балансировки нагрузки, точки интеграции, шлюза единого входа, механизма политики аутентификации и авторизации, быстрого исправления нестабильных бэкэндов и маршрутизатора HTTP-запросов.
8. Squid Caching Proxy
Squid - еще одно бесплатное и широко используемое прокси-решение и решение для кэширования в Linux с открытым исходным кодом. Это многофункциональное программное обеспечение сервера кэширования веб-прокси, которое предоставляет услуги прокси и кэширования для популярных сетевых протоколов, включая HTTP, HTTPS и FTP. Он также работает на других платформах UNIX и Windows.
Как и Varnish Cache, он получает запросы от клиентов и передает их указанным внутренним серверам. Когда сервер отвечает, он сохраняет копию содержимого в кеше и передает его клиенту. Будущие запросы на тот же контент будут обслуживаться из кэша, что приведет к более быстрой доставке контента клиенту. Таким образом, он оптимизирует поток данных между клиентом и сервером для повышения производительности и кэширует часто используемый контент, чтобы уменьшить сетевой трафик и сохранить пропускную способность.
Squid поставляется с такими функциями, как распределение нагрузки по взаимодействующим иерархиям прокси-серверов, получение данных о шаблонах использования веб-сайтов (например, статистика о наиболее посещаемых сайтах), позволяет анализировать, собирать, блокировать, заменять или изменять сообщения, передаваемые через прокси.
Он также поддерживает функции безопасности, такие как расширенный контроль доступа, авторизация и аутентификация, поддержка SSL / TLS и ведение журнала активности.
9. NGINX
NGINX (произносится как Engine-X) - это высокопроизводительное, полнофункциональное и очень популярное консолидированное решение с открытым исходным кодом для настройки веб-инфраструктуры. Это HTTP-сервер, обратный прокси-сервер, почтовый прокси-сервер и общий прокси-сервер TCP / UDP.
NGINX предлагает базовые возможности кэширования, когда кэшированное содержимое хранится в постоянном кэше на диске. Интересная часть кеширования контента в NGINX заключается в том, что он может быть сконфигурирован для доставки устаревшего контента из своего кеша, когда он не может получать свежий контент с серверов происхождения.
NGINX предлагает множество функций безопасности для защиты ваших веб-систем, включая SSL-завершение, ограничение доступа с помощью базовой аутентификации HTTP, аутентификацию на основе результата подзапроса, аутентификацию JWT, ограничение доступа к прокси-ресурсам HTTP, ограничение доступа по географическому расположению, и многое другое.
Он обычно развертывается как обратный прокси-сервер, балансировщик нагрузки, терминатор SSL / шлюз безопасности, ускоритель приложений / кэш содержимого и шлюз API в стеке приложений. Он также используется для потоковой передачи мультимедиа.
10. Apache Traffic Server
И последнее, но не менее важное: у нас есть Apache Traffic Server - быстрый, масштабируемый и расширяемый прокси-сервер с открытым исходным кодом, поддерживающий HTTP / 1.1 и HTTP / 2.0. Он предназначен для повышения эффективности и производительности сети за счет кэширования часто используемого контента на границе сети для предприятий, интернет-провайдеров (Internet Server Provider), магистральных провайдеров и многого другого.
Он поддерживает прямое и обратное проксирование HTTP / HTTPS-трафика. Он также может быть настроен для одновременной работы в одном или обоих режимах. Это показывает постоянное кэширование, API плагина; поддержка ICP (Internet Cache Protocol), ESI (Edge Side Includes); Keep-Alive, и многое другое.
С точки зрения безопасности, Traffic Server поддерживает управление клиентским доступом, позволяя настраивать клиенты, которым разрешено использовать прокси-кэш, SSL-завершение как для соединений между клиентами и самим собой, так и между собой и исходным сервером. Он также поддерживает аутентификацию и базовую авторизацию через плагин, ведение журнала (каждого полученного запроса и каждой обнаруженной ошибки) и мониторинг.
Сервер трафика может использоваться в качестве кэша веб-прокси, прямого прокси, обратного прокси, прозрачного прокси, балансировщика нагрузки или в иерархии кэша.
Заключительные замечания
Кэширование - это одна из наиболее полезных и давно существующих технологий доставки веб-контента, которая в первую очередь предназначена для повышения скорости работы веб-сайтов или приложений. Это помогает снизить нагрузку на сервер, задержку и пропускную способность сети, поскольку кэшированные данные передаются клиентам, что повышает время отклика приложений и скорость доставки клиентам.
В этой статье мы рассмотрели лучшие инструменты кэширования с открытым исходным кодом для использования в системах Linux. Если вы знакомы с другими инструментами кэширования с открытым исходным кодом, которых здесь нет, пожалуйста, поделитесь с нами. Вы также можете поделиться своими мыслями об этой статье с нами.