Надежные распределенные вычислительные системы и приложения стали краеугольным камнем известных компаний, особенно в автоматизации и управлении критически важными бизнес-процессами и предоставлении услуг клиенты. Как разработчики и системные администраторы этих систем и приложений, вы должны предоставить все виды информационных технологий (ИТ), которые гарантируют, что у вас будут самые эффективные системы имеется в наличии.
Сюда входят такие задачи, как проектирование, тестирование и реализация стратегий для системы / приложения. производительность, надежность, доступность и масштабируемость, чтобы предоставить конечным пользователям удовлетворительный уровень служба. Кеширование это один из многих, очень простых, но эффективных методов доставки приложений, на которые вы можете положиться. Прежде чем идти дальше, давайте кратко рассмотрим, что такое кеширование, где и / или как его можно применить, а также его преимущества?
Кеширование (или
Кэширование контента) - широко используемый метод хранения копий данных во временном хранилище (также известном как тайник), чтобы к данным можно было легко и быстро получить доступ, чем при их извлечении из исходного хранилища. Данные, хранящиеся в кэше, могут включать файлы или фрагменты файлов (например, файлы HTML, сценарии, изображения, документы и т. д.), операции или записи базы данных, вызовы API, записи DNS и т. д. в зависимости от типа и цели кеширование.Кэш может быть аппаратным или программным. Программный кэш (которому и посвящена данная статья) может быть реализован на разных уровнях стека приложений.
Кеширование может применяться на стороне клиента (или на уровне представления приложения), например, кэширование браузера или кеширование приложения (или автономный режим). Большинство, если не все современные браузеры поставляются с реализацией HTTP-кеша. Возможно, вы слышали популярную фразу «очистить кеш”При доступе к веб-приложению, чтобы вы могли видеть последние данные или контент на веб-сайте или в приложении, вместо того, чтобы браузер использовал старую копию контента, хранящуюся локально.
Другой пример кэширования на стороне клиента: Кеширование DNS что происходит на уровне операционной системы (ОС). Это временное хранилище информации о предыдущих поисках DNS, выполненных ОС или веб-браузером.
Кэширование также может быть реализовано на уровне сети, либо в LAN или WAN через прокси. Типичный пример кэширования этого типа находится в CDN (Сети доставки контента), которые представляют собой глобально распределенную сеть веб-прокси-серверов.
В-третьих, вы также можете реализовать кеширование на исходном или внутреннем сервере (ах). Существуют разные формы кэширования на уровне сервера, в их число входят:
Обратите внимание, что данные кэша могут храниться в любой системе хранения, включая базу данных, файл, системную память и т. Д., Но они должны быть более быстрым носителем, чем первичный источник. В этом отношении кэширование в памяти является наиболее эффективной и часто используемой формой кэширования.
Кэширование дает множество преимуществ, включая следующие:
В этой статье мы рассмотрим некоторые из лучших программ с открытым исходным кодом (кэширование приложений / баз данных и кеширование прокси-серверов) инструменты для реализации кэширования на стороне сервера в Linux.
Redis (REmote DIctionary Server полностью) - это бесплатная, быстрая, высокопроизводительная и гибкая распределенная вычислительная система с открытым исходным кодом в оперативной памяти, которую можно использовать на большинстве, если не на всех языках программирования.
Это хранилище структуры данных в памяти, которое работает как механизм кэширования, постоянная база данных на диске в памяти и посредник сообщений. Хотя он разработан и протестирован в 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-каналах, анализе данных в реальном времени, рекомендациях пользователей и т. Д.
Memcached это бесплатная и открытая, простая, но мощная система кэширования объектов распределенной памяти. Это хранилище ключей и значений в памяти для небольших фрагментов данных, таких как результаты вызовов базы данных, вызовов API или отрисовки страницы. Он работает в Unix-подобных операционных системах, включая Linux и OS X, а также в Microsoft Windows.
Как инструмент разработчика, он предназначен для увеличения скорости динамических веб-приложений путем кэширования содержимого (по умолчанию Наименее недавно использованные (LRU) cache), что снижает нагрузку на базу данных на диске - она действует как краткосрочная память для приложений. Он предлагает API для самых популярных языков программирования.
Memcached поддерживает строки как единственный тип данных. Он имеет архитектуру клиент-сервер, где половина логики выполняется на стороне клиента, а другая половина - на стороне сервера. Важно отметить, что клиенты понимают, как выбрать сервер для записи или чтения для элемента. Кроме того, клиент очень хорошо знает, что делать, если он не может подключиться к серверу.
Несмотря на то, что это система распределенного кэширования, поддерживающая кластеризацию, серверы Memcached отключены друг от друга (т.е. они не знают друг друга). Это означает, что нет поддержки репликации, как в Redis. Они также понимают, как хранить и извлекать элементы, управлять тем, когда выселять или повторно использовать память. Вы можете увеличить доступную память, добавив больше серверов.
Он поддерживает аутентификацию и шифрование через TLS начиная с Memcached 1.5.13, но эта функция все еще находится в экспериментальной фазе.
Apache Ignite, а также бесплатное и с открытым исходным кодом, горизонтально масштабируемое распределенное хранилище ключей и значений в памяти, кеш, и многомодельная система баз данных, которая предоставляет мощные API-интерфейсы обработки для вычислений в распределенных данные. Это также сетка данных в памяти, которую можно использовать либо в памяти, либо с собственной персистентностью Ignite. Он работает в UNIX-подобных системах, таких как Linux а также Окна.
Он имеет многоуровневое хранилище, полную поддержку SQL и КИСЛОТА (Атомарность, согласованность, изоляция, надежность) транзакций (поддерживаются только на уровне API ключ-значение) между несколькими узлами кластера, совместной обработки и машинного обучения. Он поддерживает автоматическую интеграцию с любыми сторонними базами данных, включая любые СУБД (например, MySQL, PostgreSQL, Oracle Database и т. д.) или хранилища NoSQL.
Важно отметить, что хотя Зажигать работает как хранилище данных SQL, это не полностью база данных SQL. Он четко обрабатывает ограничения и индексы по сравнению с традиционными базами данных; он поддерживает первичные и вторичные индексы, но только первичные индексы используются для обеспечения уникальности. Кроме того, он не поддерживает ограничения внешнего ключа.
Ignite также поддерживает безопасность, позволяя вам включить аутентификацию на сервере и предоставить учетные данные пользователя на клиентах. Также существует поддержка связи через сокеты SSL для обеспечения безопасного соединения между всеми узлами Ignite.
Зажигать имеет множество вариантов использования, включая систему кэширования, ускорение системной рабочей нагрузки, обработку данных в реальном времени и аналитику. Его также можно использовать в качестве графоцентрической платформы.
Сервер Couchbase также является распределенной, документально-ориентированной базой данных взаимодействия с открытым исходным кодом NoSQL, в которой данные хранятся в виде элементов в формате «ключ-значение». Он работает в Linux и других операционных системах, таких как Windows и Mac OS X. Он использует многофункциональный документно-ориентированный язык запросов под названием N1QL, который предоставляет мощные службы запросов и индексирования для поддержки субмиллисекундных операций с данными.
Его примечательными особенностями являются быстрое хранилище ключей и значений с управляемым кешем, специализированные индексаторы, мощный механизм запросов, горизонтально масштабируемая архитектура (многомерное масштабирование), интеграция больших данных и SQL, безопасность полного стека и высокая доступность.
Сервер Couchbase поставляется с встроенной поддержкой кластера с несколькими экземплярами, где инструмент диспетчера кластера координирует все действия узла и предоставляет клиентам просто общекластерный интерфейс. Важно отметить, что вы можете добавлять, удалять или заменять узлы по мере необходимости без простоев. Он также поддерживает репликацию данных между узлами кластера, выборочную репликацию данных между центрами обработки данных.
Он реализует безопасность через TLS с использованием выделенных портов сервера Couchbase, различных механизмов аутентификации (с использованием учетных данных или сертификаты), ролевой контроль доступа (для проверки каждого аутентифицированного пользователя на предмет назначенных им ролей), аудит, журналы и сеансы.
Его варианты использования включают унифицированный программный интерфейс, полнотекстовый поиск, параллельную обработку запросов, управление документами, индексацию и намного больше Он специально разработан для обеспечения управления данными с малой задержкой для крупномасштабного интерактивного Интернета, мобильных устройств и Интернета вещей. Приложения.
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, параллельной обработки, простого обмена сообщениями и многого другого.
Mcrouter это бесплатный маршрутизатор протокола Memcached с открытым исходным кодом для масштабирования развертываний Memcached, разработанный и поддерживаемый Facebook. Он имеет протокол Memcached ASCII, гибкую маршрутизацию, поддержку нескольких кластеров, многоуровневые кеши, пул соединений, множественное хеширование. схемы, префиксная маршрутизация, реплицированные пулы, теневое копирование производственного трафика, оперативная реконфигурация и мониторинг состояния назначения / автоматический отказоустойчивость.
Кроме того, он поддерживает разогрев холодного кеша, расширенные команды статистики и отладки, надежное качество обслуживания потока удаления, большие значения, широковещательные операции и поставляется с поддержкой IPv6 и SSL.
Он используется в Facebook и Instagram в качестве основного компонента инфраструктуры кеширования для обработки почти 5 миллиардов запросов в секунду на пике.
Лаковый кеш - это гибкий, современный и многоцелевой ускоритель веб-приложений с открытым исходным кодом, который находится между веб-клиентами и исходным сервером. Он работает на всех современных платформах Linux, FreeBSD и Solaris (только x86). Это отличный механизм кэширования и ускоритель контента, который можно развернуть перед веб-сервером, например NGINX, Apache и многие другие, чтобы прослушивать порт HTTP по умолчанию для приема и пересылки клиентских запросов на веб-сервер, а также для доставки ответа веб-серверов клиенту.
Действуя как посредник между клиентами и исходными серверами, Лаковый кеш предлагает несколько преимуществ, в том числе кэширование веб-содержимого в памяти для уменьшения нагрузки на веб-сервер и повышения скорости доставки клиентам.
После получения HTTP-запроса от клиента он перенаправляет его на внутренний веб-сервер. Как только веб-сервер отвечает, Varnish кэширует содержимое в памяти и доставляет ответ клиенту. Когда клиент запрашивает тот же контент, Varnish будет обслуживать его из ответа приложения, повышающего кэш. Если он не может обслуживать контент из кеша, запрос перенаправляется на серверную часть, а ответ кэшируется и доставляется клиенту.
Лак Особенности VCL (Язык конфигурации Varnish - гибкий предметно-ориентированный язык), используемый для настройки обработки запросов и т. Д. Лаковые модули (VMODS), которые являются расширениями для Varnish Cache.
С точки зрения безопасности Varnish Cache поддерживает ведение журнала, проверку запросов и регулирование, аутентификацию и авторизацию через VMODS, но в нем отсутствует встроенная поддержка SSL / TLS. Вы можете включить HTTPS для Varnish Cache с использованием прокси SSL / TLS, например Сцепка или NGINX.
Вы также можете использовать Varnish Cache в качестве брандмауэра веб-приложений, защитника от DDoS-атак, защитника хотлинкинга, балансировщика нагрузки, интеграции точка, шлюз единого входа, механизм политики аутентификации и авторизации, быстрое решение для нестабильных серверных ВМ и HTTP-запрос роутер.
Еще одно бесплатное, выдающееся и широко используемое решение для прокси и кеширования с открытым исходным кодом для Linux - это Кальмар. Это многофункциональное программное обеспечение для кэширования веб-прокси, которое предоставляет услуги прокси и кеширования для популярных сетевых протоколов, включая HTTP, HTTPS и FTP. Он также работает на других платформах UNIX и Windows.
Как Лаковый кеш, он получает запросы от клиентов и передает их указанным внутренним серверам. Когда внутренний сервер отвечает, он сохраняет копию содержимого в кеше и передает ее клиенту. Будущие запросы того же контента будут обслуживаться из кеша, что приведет к более быстрой доставке контента клиенту. Таким образом, он оптимизирует поток данных между клиентом и сервером для повышения производительности и кэширует часто используемый контент для уменьшения сетевого трафика и экономии полосы пропускания.
Squid имеет такие функции, как распределение нагрузки по взаимосвязанным иерархиям прокси-серверов, создание данных, относящихся к сети. шаблоны использования (например, статистика о наиболее посещаемых сайтах), позволяет анализировать, фиксировать, блокировать, заменять или изменять сообщения, которые прокси.
Он также поддерживает функции безопасности, такие как расширенный контроль доступа, авторизация и аутентификация, поддержка SSL / TLS и ведение журнала активности.
NGINX (произносится как Двигатель-X) - это высокопроизводительное, полнофункциональное и очень популярное консолидированное решение с открытым исходным кодом для настройка веб-инфраструктуры. Это HTTP-сервер, обратный прокси-сервер, почтовый прокси-сервер и общий прокси-сервер TCP / UDP.
NGINX предлагает базовые возможности кэширования, когда кэшированный контент хранится в постоянном кэше на диске. Самое интересное в кэшировании контента в NGINX заключается в том, что его можно настроить для доставки устаревшего контента из своего кеша, когда он не может получить свежий контент с исходных серверов.
NGINX предлагает множество функций безопасности для защитите свои веб-системы, к ним относятся завершение SSL, ограничение доступа с помощью Базовая аутентификация HTTP, аутентификация на основе результата подзапроса, аутентификация JWT, ограничение доступа к проксируемым ресурсам HTTP, ограничение доступа по географическому положению и многое другое.
Обычно он развертывается как обратный прокси, балансировщик нагрузки, терминатор SSL / шлюз безопасности, ускоритель приложений / кеш содержимого и шлюз API в стеке приложений. Он также используется для потоковой передачи мультимедиа.
И последнее, но не менее важное: у нас есть Сервер трафика Apache, быстрый, масштабируемый и расширяемый кэширующий прокси-сервер с открытым исходным кодом с поддержкой HTTP / 1.1 и HTTP / 2.0. Он предназначен для повышения эффективности сети и производительность за счет кэширования часто используемого контента на границе сети для предприятий, интернет-провайдеров (провайдеров интернет-серверов), магистральных провайдеров и более.
Он поддерживает как прямое, так и обратное проксирование трафика HTTP / HTTPS. Его также можно настроить для работы в одном или обоих режимах одновременно. Он имеет постоянное кеширование, API-интерфейсы плагинов; поддержка ICP (Internet Cache Protocol), ESI (Edge Side Includes); Keep-ALive и многое другое.
Что касается безопасности, Traffic Server поддерживает управление доступом клиентов, позволяя настраивать разрешенные клиенты. использовать кеш прокси, завершение SSL для соединений между клиентами и самим собой, а также между собой и источником сервер. Он также поддерживает аутентификацию и базовую авторизацию через плагин, ведение журнала (каждого полученного запроса и каждой обнаруженной ошибки) и мониторинг.
Сервер трафика можно использовать в качестве кеша веб-прокси, прямого прокси, обратного прокси, прозрачного прокси, балансировщика нагрузки или в иерархии кеша.
Кеширование является одной из наиболее полезных и давно зарекомендовавших себя технологий доставки веб-контента, которая в первую очередь предназначена для увеличения скорости веб-сайтов или приложений. Это помогает снизить нагрузку на сервер, задержку и пропускная способность сети потому что кэшированные данные обслуживаются клиентами, что улучшает время отклика приложений и скорость доставки клиентам.
В этой статье мы рассмотрели лучшие инструменты кэширования с открытым исходным кодом для использования в системах Linux. Если вам известны другие инструменты кэширования с открытым исходным кодом, не перечисленные здесь, поделитесь с нами через форму обратной связи ниже. Вы также можете поделиться с нами своими мыслями об этой статье.