Привет всем, я создал высокопроизводительный сервер кэша прокси-сервера HTTP и RESTFLAL NOSQL Cache Server на основе haproxy: Настер Пожалуйста, попробуйте и звездость:)
Вики |. Английский | 中文 |. 日本語.
Высокопроизводительный сервер кеша прокси-сервера HTTP и RESTFLAFLE SERVER NOSQL Cache на основе HAProxy.
- Введение
- Представление
- Начиная
- использование
- Директивы
- Кэш
- Nosql.
- Управляющий делами
- Статистика
- Включить отключение правил
- Обновление TTL.
- Очистка
- Магазин
- Образец извлечений
- Вопросы-Ответы
Nuster — это высокопроизводительный сервер кеша прокси-сервера HTTP и RESTSULE SERVER NOSQL Cache на основе HAProxy. Это 100%, совместимо с HAProxy, и в полной мере использует функциональность ACL HAProxy для обеспечения тонкозернистой политики кэширования на основе содержания запроса, ответа или состояния сервера.
Функции
Как балансировщик нагрузки HTTP/TCP
Nuster можно использовать в качестве балансировщика нагрузки HTTP/TCP, как HAProxy.
- Все особенности HAProxy унаследованы, 100% совместимы с haproxy
- Балансировки нагрузки
- Https поддерживает как frontend и backend
- HTTP сжатие
- Перезапись HTTP и перенаправление
- Http фиксация
- Http2.
- Мониторинг
- Липкость
- ACL и условия
- Переключение контента
Как HTTP Cache Server
Nuster также может использоваться в качестве сервера кеша прокси-сервера HTTP, такими как лак или NGINX, чтобы кэшировать динамический и статический ответ HTTP.
- Все функции от Haproxy (HTTPS, HTTP/2, ACL и т. Д.)
- Чрезвычайно быстрый
- Мощные динамические способности кэша
- На основании HTTP-метода, URI, пути, запроса, заголовка, куки, и т. Д.
- На основе HTTP-запроса или содержимого ответа, и т.д
- На основе переменных среды, Серверное состояние и т. Д.
- На основе версии SSL, SNI и т. Д.
- На основе скорости подключения, номера, байта и т. Д.
- Управление кэшем
- Кешная очистка
- Кэш статистика
- Кэш TTL.
- Настойчивость диска
Как RESTFLAFLE NOSQL Cache Server
Nuster также может быть использован в качестве спокойного сервера NoSQL Cache, используя HTTP Post/get/delete
Чтобы установить/получить/удалить объект ключа/значения.
Он может быть использован в качестве внутреннего кэша NoSQL SITS между вашим приложением и базой данных, такими как MEMCACHED или REDIS, а также для пользовательского кэша NoSQL, который находится между конечным пользователем и вашим приложением. Он поддерживает заголовки, файлы cookie, поэтому вы можете хранить данные для пользователей на одну и ту же конечную точку.
- Все функции от Haproxy (HTTPS, HTTP/2, ACL и т. Д.)
- Условный кэш
- Внутренний кваш-кэш
- Пользователь, стоящий перед спокойным кешем
- Поддержка любых данных
- Поддержите все языки программирования, если HTTP поддерживается
- Настойчивость диска
Nuster очень быстрый, некоторые тесты показывают настер почти в три раза быстрее, чем Nginx, когда используя один сердечник, и почти в два раза быстрее, чем Nginx, и в три раза быстрее, чем лака, при использовании всех сердечников.
Посмотреть Подробный ориентир
Скачать
Скачать стабильную версию от Скачать Страница для производства, в противном случае Git Clone исходный код.
Строить
make TARGET=linux-glibc USE_LUA=1 LUA_INC=/usr/include/lua5.3 USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 make install PREFIX=/usr/local/nuster
использовать Use_pthread_pshared = 1
использовать pthread lib
Опустите Use_lua = 1 lua_inc =/usr/include/lua5.3
Если ненужно
Посмотреть Haproxy Установите для деталей.
Создать файл конфигурации
Минимальный файл конфигурации: nuster.cfg.
global nuster cache on data-size 100m nuster nosql on data-size 200m master-worker # since v3 defaults mode http frontend fe bind *:8080 #bind *:4433 ssl crt example.com.pem alpn h2,http/1.1 use_backend be2 if { path_beg /_kv/ } default_backend be1 backend be1 nuster cache on nuster rule img ttl 1d if { path_beg /img/ } nuster rule api ttl 30s if { path /api/some/api } server s1 127.0.0.1:8081 server s2 127.0.0.1:8082 backend be2 nuster nosql on nuster rule r1 ttl 3600
Nuster слушает порта 8080 и принимает HTTP-запросы. Запросы начинаются с /_kv/
Перейти к Backend BE2.
, вы можете сделать Post/get/delete
Запросы на /_kv/any_key
к Set/Get/Delete
K/V объект. Другие запросы отправляются в Backend Be1
и будет передан на серверы S1
или S2
Отказ Среди этих запросов, /img/*
будет кэшироваться на 1 день и /API/некоторые/API
будет кэшироваться в течение 30 секунд.
Начинать
/usr/local/nuster/sbin/nuster -f nuster.cfg.
Докер
docker pull nuster/nuster docker run -d -v /path/to/nuster.cfg:/etc/nuster/nuster.cfg:ro -p 8080:8080 nuster/nuster
Настерет основан на haproxy, все директивы от haproxy поддерживаются в настере.
Базовый
Есть четыре основных раздел
S: глобальный
, по умолчанию
, Frontend
и отдохнуть
Как вы можете узнать в приведенном выше файле конфигурации.
- Глобальный
- Определяет широкие процессы и часто специфичные OS-специфические параметры
Nuster Cache на
илиНастер NoSQL на
Должно быть объявлено в этом разделе, чтобы использовать функциональность кэша или NOSQL
- по умолчанию
- Определяет параметры по умолчанию для всех других
Frontend
,Backend
разделы - и может быть перезаписан в определенные
Frontend
илиBackend
раздел
- Определяет параметры по умолчанию для всех других
- внешний интерфейс
- Описывает набор прослушивающих сокетов, принимающих клиентские соединения
- отдохнуть
- Описывает набор серверов, к которым прокси подключится к передний входящими соединениями
Nuster Cache на
илиНастер NoSQL на
должен быть объявлен в этом разделеНастере правило
должен быть объявлен здесь
Вы можете определить несколько Frontend
или Backend
разделы. Если Nuster Cache | NoSQL OFF
объявлен или нет Nuster Cache | NoSQL на
| Объявлен, Nuster действует так же, как Haproxy, как балансировщик TCP и HTTP.
Хотя Слушать
является полным прокси с его запчастями Frestend и Backend в одном разделе, вы не можете использовать настер в Слушать
, используйте внешний интерфейс
и Backend
Пары.
Вы можете найти документацию HAProxy в /Док
и Онлайн Haproxy Documentation
Как балансировщик нагрузки TCP
frontend mysql-lb bind *:3306 mode tcp default_backend mysql-cluster backend mysql-cluster balance roundrobin mode tcp server s1 10.0.0.101:3306 server s2 10.0.0.102:3306 server s3 10.0.0.103:3306
Как балансировщик нагрузки HTTP/HTTPS
frontend web-lb bind *:80 #bind *:443 ssl crt XXX.pem mode http default_backend apps backend apps balance roundrobin mode http server s1 10.0.0.101:8080 server s2 10.0.0.102:8080 server s3 10.0.0.103:8080 #server s4 10.0.0.101:8443 ssl verify none
Как HTTP Cache Server
global nuster cache on data-size 200m frontend fe bind *:8080 mode http default_backend be backend be mode http nuster cache on nuster rule all server s1 127.0.0.1:8081
Как RESTFLAFLE NOSQL Cache Server
global nuster nosql on data-size 200m frontend fe bind *:8080 mode http default_backend be backend be nuster nosql on mode http nuster rule r1 ttl 3600
Global: Nuster Manager
синтаксис:
Nuster Manager на | [URI URI] [метод очистки метода]
По умолчанию: выключенный
контекст: Глобальный
Enable Manager/STATS/PURGE API, определите метод конечной точки и очистки.
По умолчанию он отключен. Когда он включен, не забудьте ограничить доступ (см. FAQ).
Смотрите менеджер по деталям.
уваживание
Определите URI конечной точки, /nuster
по умолчанию.
чистка-метод
Определите настроенный метод HTTP для очистки, это Чистка
по умолчанию.
Глобал: Nuster Cache | NoSQL
синтаксис:
Nuster Cache на | Выключение [Размер данного размера] [Размер DIC-Size] [DIR DIR] [DIC-CLEILER N] [CLEALER N CLEALER N] [Disk-Cleaner N] [Disk-Loader N] [Disk-Saver N] [Clean-Temp On | Off]
Nuster NoSQL на | [Размер данного размера] [Размер размера DICK] [DIR DIR] [DICK-CLEALER N] [CLEALER N CLEALER N] [Disk-Cleaner N] [Disk-Loader N] [Disk-Saver N] [Clean-Temp на | OFF]
По умолчанию: никто
контекст: Глобальный
Определяет, следует ли использовать кэш/NoSQL или нет.
Зона памяти с размером Размер данных + Dict-размер
будет создан.
За исключением временных данных, созданных и разрушенных в течение запроса, все данные, связанные с кэшем, включая данные HTTP, ключи и накладные расходы, хранятся в этой зоне памяти и совместно используются между всеми процессами. Если из этой памяти не может быть выделено никакой памяти, новые запросы, которые должны быть кэшированы в соответствии с определенными правилами, не будут кэшированы, если некоторая память не будет освобождена. Временные данные хранятся в пуле памяти, который распределяет память динамически из системы в случае отсутствия доступной памяти в пуле. Глобальный внутренний счетчик контролирует использование памяти всех данных HTTP-ответа во всех процессах, новые запросы не будут кэшированы, если счетчик превышает Размер данных
Отказ
Размер данных
Определяет размер зоны памяти наряду с Диктовый размер
Отказ
Это принимает единицы, такие как м
, М
С g
и г
. По умолчанию размер 1024 * 1024 байта, который также является минимальным размером.
диктовый размер
Определяет размер памяти, используемой хэш-таблицей.
Это принимает единицы, такие как м
, М
С g
и г
. По умолчанию размер 1024 * 1024 байта, который также является минимальным размером.
Обратите внимание, что он только решает память, используемую хеш-таблицы ведра, а не ключами. На самом деле, ключи хранятся в зоне памяти, которая ограничена Размер данных
Отказ
Диктовый размер (количество ведер) отличается от Количество ключей Отказ Новые ключевые ключи все еще могут быть добавлены в таблицу HASH, даже если количество ключей превышает размер диктома (количество ведер), если достаточно памяти.
Тем не менее, это может привести к потенциальному падению производительности, если Количество ключей
больше чем Диктовый размер (количество ведер)
Отказ Примерное количество ключей, умноженных на 8 (обычно) как Диктовый размер
все должно быть в порядке. В основном, чем больше, тем лучше.
Включить API статистику и проверьте следующие статистики:
dict.nosql.length: 131072 dict.nosql.used: 0
Если Dict.noSQL.used
больше чем Dict.NoSQL.Length
тогда увеличить Диктовый размер
будет хорошей идеей.
Размер Dict будет удален в будущем выпуске, автоматически изменяя изменение размера хэш-таблица в первой версии, будет добавлена обратно.
дир
Укажите корневой каталог настойчивости диска. Это должно быть установлено, чтобы использовать настойчивость диска.
диктопил
До V2.x, задачи менеджера, такие как удаление недействительных данных кэша, сброса записей DICT выполняются в итерациях в каждом HTTP-запросе. Соответствующие показатели или указатели увеличиваются или продвигаются в каждой итерации.
В V3.x эти задачи перемещаются в основной процесс, а также выполняются в итерациях, и эти параметры могут быть установлены для управления количеством раз определенной задачи во время одной итерации.
Во время одной итерации не больше, чем Диктопильщик
Записи проверены, неверные записи будут удалены (по умолчанию, 1000).
очиститель данных
Во время одной итерации не больше, чем очиститель данных
Данные проверяются, неверные данные будут удалены (по умолчанию 1000).
Когда неверный соотношение данных превышает 20%, внутренний механизм ускорит чистый процесс, поэтому рекомендуется не изменять это из значения по умолчанию.
Очиститель диска
Если настойчивость диска включена, данные хранятся в файлах. Эти файлы проверяются основным процессом и будут удалены, если истек, например, истек.
Во время одной итерации не больше, чем Уборщик дисков
Файлы проверяются, неверные файлы будут удалены (по умолчанию 100).
диск-погрузчик
После запуска Nuster Master Process будет загружать информацию о данных, ранее хранящихся на диске в память.
Во время одной итерации не больше, чем Диск-погрузчик
Файлы загружены (по умолчанию 100).
Если Use_thread
Используется отдельная нить, чтобы загрузить файлы диска, и этот параметр игнорируется.
дисковое устройство
Главный процесс спасет синхронизация диска
Периодически хранится данные.
Во время одной итерации не больше, чем Диск-заставка
Данные проверяются и сохраняются на диск при необходимости (по умолчанию 100).
Смотрите магазин для деталей.
Чистый темп на |
По каталогу, определенному Dir
, временный каталог .tmp.tmp.
Будет создан для хранения временных файлов.
Используйте эту опцию, чтобы определить, следует ли удалять эти временные файлы при запуске.
По умолчанию это Выкл.
Отказ
Прокси: Nuster Cache | NoSQL
синтаксис:
Nuster Cache [On | Off]
Nuster NoSQL [на | OFF]
По умолчанию: на
контекст: отдохнуть
Определяет, следует ли использовать кэш/NoSQL на этом прокси, дополнительных Настере правило
должен быть определен. Если на этом прокси-сервере есть фильтры, положите эту директиву в течение всех других фильтров.
Прокси: Настере
синтаксис:
Настере имя правила [ключ ключей] [TTL AUTO | TTL] [Extend Extend] [ждать | Off | Time] [Использовать stare on | [диск на | выключен | синхронизация] [Etag на | Off] [Последнее изменение | OFF] [если | Если только состояние]
По умолчанию: никто
контекст: отдохнуть
Определите правило для указания кэш/NoSQL Создание условий, свойств. Должно быть определено хотя бы одно правило.
nuster cache on # cache request `/asdf` for 30 seconds nuster rule asdf ttl 30 if { path /asdf } # cache if the request path begins with /img/ nuster rule img if { path_beg /img/ } # cache if the response header `cache` is `yes` acl resHdrCache res.hdr(cache) yes nuster rule r1 if resHdrCache
Возможно и рекомендуется объявить несколько правил в том же разделе. Заказ важен, потому что соответствующий процесс останавливается на первом матче.
acl pathA path /a.html nuster cache on nuster rule all ttl 3600 nuster rule path01 ttl 60 if pathA
Правило Path01
никогда не будет соответствовать, потому что первое правило будет все кэшировать.
название
Определите имя для этого правила. Должен быть во всем мире уникальным, так как V5.
ключевой ключ
Определите ключ для кэша/NoSQL, он берет строку в сочетании следующих ключевых слов с Отказ
разделитель:
- Метод: HTTP-метод, Get/Post …
- Схема: http или https
- Хозяин: хост по запросу
- Uri: Первая косушка до конца URL
- Путь: УРЛ путь запроса
- Разделитель: ‘? Если запрос существует иначе пусто
- Запрос: целая строка запроса запроса
- Header_Name: значение заголовка
НАЗВАНИЕ
- Cookie_Name: значение cookie
НАЗВАНИЕ
- param_name: значение запроса
НАЗВАНИЕ
- Тело: тело запроса
Ключ кэша по умолчанию — method.scheme.host.uri
и ключ по умолчанию NoSQL IS Get.scheme.host.uri
Отказ
Пример
GET http://www.example.com/q?name=X&type=Y http header: GET /q?name=X&type=Y HTTP/1.1 Host: www.example.com ASDF: Z Cookie: logged_in=yes; user=nuster;
Должен привести:
- Метод: ПОЛУЧИТЬ
- Схема: http.
- Хозяин: www.example.com.
- Uri:
- путь:/q
- Разделитель:?
- запрос:
- header_asdf: Z
- Пользователь Cookie: BUSTER
- param_type: Y
- Тело: (пусто)
Поэтому ключ по умолчанию производит Получить \ 0http \ 0www.example.com \ 0/Q? Имя = X & type = y \ 0
и Ключевой метод .scheme.host.path.header_asdf.cookie_user.param_type
производит Получить \ 0http \ 0www.example.com \ 0/q \ 0z \ 0nuster \ 0y \ 0
Отказ
\ 0
это нулевой характер
Если запрос имеет один и тот же ключ, что и кэшированный файл ответа HTTP, то кэшированные данные будут отправлены клиенту.
TTL AUTO | TTL
Установите ключ TTL, после истечения истечения TTL ключ будет удален.
Это принимает единицы, такие как D
, h
, m
и S
Отказ TTL по умолчанию IS 0
который не истекает ключ.
Когда Авто
используется, TTL установлен на значение S-Maxage
или Макс-возраст
Директива в Cache-Control
заголовок
Другие директивы Cache-Control
не обрабатываются.
Максимальное значение TTL составляет 2147483647.
TTL может быть автоматически расширен с использованием простираться
ключевое слово.
продлить продлить
Автоматически расширить TTL.
Формат
простираться на | OFF | N1, N2, N3, N4
По умолчанию: ВЫКЛ.
N1, N2, N3, N4: положительное целое число менее 100, а N1 + N2 + N3 составляет менее 100. Вместе они определяют четыре временных интервала следующим образом:
time: 0 ttl ttl * (1 + n4%) access: | A1 | A2 | A3 | A4 | | |---------------------------|---------|---------|---------|---------| percentage: |<- (100 - n1 - n2 - n3)% ->|<- n1% ->|<- n2% ->|<- n3% ->|<- n4% ->|
TTL будет продлен, если:
- A4> A3> A2.
- Новый запрос имеет место между
TTL
иTTL * (1 + N4%)
на
равна 33,33,33,33
ждать | OFF | Время [только кэш]
При включении только один запрос за время будет передан на сервер Backend для создания кэша. Другие идентичные запросы будут либо ждать, пока не будет создан кэш ( ждать
) Или истекает время ( Время ожидания
) и пересылать на бэкфон.
По умолчанию идентичные запросы пересылаются на Backend Server и первый создаст кэш ( ждать
).
Обратите внимание, что другие идентичные запросы не будут ждать, пока первый запрос не закончит процесс инициализации (например, создать запись кэширования).
В режиме NoSQL нет режима ожидания. Несколько идентичных запросов на почту обслуживаются в том порядке, и он был получен, а организм последнего запроса будет сохранен как содержание.
Максимальное значение ожидания 2147483647.
Использовать stale на | Выкл. | Время [только кэш]
Определяет, следует ли служить устойчивому кэше клиентам, если оно обновляется, или сервер Backend не работает.
При использовании stare включен, stale Cache будет использоваться для обслуживания клиентов.
Когда используется rafale выключен, который является режимом по умолчанию, одинаковые запросы будут переданы на бэкэнду, когда кэш обновляется, если Подожди
установлен, иначе подожди, если ждать | время
установлен.
Использование - устойчивое время
Разрешения с использованием stale Cheche для обслуживания клиентов за время времени, если кэш не может быть обновлен из-за ошибки Backend.
Максимальное значение rafale stare 2147483647.
неактивно | время
Определяет, следует ли удалять кеш, который не доступа к времени в течение нескольких секунд независимо от достоверности. По умолчанию неактивен устанавливается на OFF (0).
Обратите внимание, что не гарантируется, что кеш удаляется после неактивного времени. Если чистый процесс сначала обращается к кеше, то данные удаляются. Если новый запрос приходит на первом месте, то время последнего доступа в кеше обновляется, и кеш не будет удален. В случае файла диска время файла не используется, поэтому, когда Buster перезагружается, время последнего доступа установлено в загруженное время.
Максимальное значение неактивно составляет 2147483647.
Кодовой код1, код2 …
Кэш только если код состояния ответа является кодом.
По умолчанию только 200 ответов кэшируется. Вы можете использовать все
кэшировать все ответы.
nuster rule only200 nuster rule 200and404 code 200,404 nuster rule all code all
память на |
Сохраните данные в память или нет, по умолчанию.
Смотрите магазин для деталей.
диск на | выкл | синхронизация
Сохраните данные на диск или нет, а как, выключен по умолчанию.
Память на
должен быть установлен для использования синхронизация диска
режим.
Смотрите магазин для деталей.
ЭТАГ на |
Включить обработку условных запросов Etag. Добавить Etag
заголовок, если отсутствует.
По умолчанию выключен.
Последнее модифицированное на |
Включить последнюю модифицированную обработку условных запросов. Добавить Последнее модифицированное
заголовок, если отсутствует.
По умолчанию выключен.
Если | Если только состояние
Определите, когда кэшируйте использование haproxy acl.
Оценка включает в себя два этапа: этап запроса и стадии реагирования.
Кэш будет выполнен, если:
- Оценка на этапе запроса верна,
- Оценка на этапе запроса ложная, но верна на стадии реагирования.
Пожалуйста, будьте очень осторожны, если вы используете отрицание в условиях или образцах, недоступных на определенном этапе
Например,
Кэш Если путь запроса начинается с
/img/
Настере правило IMG, если {path_beg/img/}
Это будет работать, потому что оценка на этапе запроса будет либо правдой или ложным, и никогда не будет правдой на этапе ответа, как путь
не доступен на этапе ответа.
Кэш, если
Content-Type
В ответ этоimage/jpeg.
Настере правило JPEG, если {res.hdr (тип контента)/jpeg}
Это будет работать, потому что оценка на этапе запроса всегда ложная, как res.hdr
не доступен на этапе запроса и будет либо правдой или ложным на этапе ответа.
- Кэш, если путь запроса начинается с
/IMG/
иContent-Type
В ответ этоimage/jpeg.
Это не будет работать, если вы определите правило как:
nuster rule img if { path_beg /img/ } { res.hdr(Content-Type) image/jpeg }
потому что путь
не доступен на этапе ответа и res.hdr
не доступен на этапе запроса, поэтому оценка никогда не будет правдой.
В заказе сделать эту работу, путь
необходимо выделить для дальнейшего использования в этапе «Ответ»:
http-request set-var(txn.pathImg) path acl pathImg var(txn.pathImg) -m beg /img/ acl resHdrCT res.hdr(Content-Type) image/jpeg nuster rule r3 if pathImg resHdrCT
Или использовать nuster.path
(v5):
nuster rule r3 if { nuster.path -m beg /img } { res.hdr(Content-Type) image/jpeg }
- Другой пример, кэш, если путь запроса не начинается с
/API/
Это не будет работать ни один:
acl NoCache path_beg /api/ nuster rule r3 if !NoCache
Потому что оценка Nocache
против /API/
На этапе запроса верно, а отрицание ложно, что является желаемым состоянием, но на этапе ответа, оценка Nocache
всегда ложно, как путь
не доступен на этапе ответа, и он будет кэшироваться как отрицание ! Nocache
правда.
Это будет работать:
http-request set-var(txn.path) path acl NoCache var(txn.path) -m beg /api/ nuster rule r1 if !NoCache
См. Примерные выборы для выборки образцов, введенных настерем.
Посмотреть 7 Использование ACL и выборки образцов Раздел в Конфигурация haproxy
Nuster можно использовать в качестве сервера кеша прокси-сервера HTTP, например, лак или nginx, чтобы кэшировать динамический и статический ответ HTTP.
Вы можете использовать функциональные возможности HAProxy для завершения SSL, Normize HTTP, поддерживают HTTP2, переписать URL-адрес или изменять заголовки и т. Д., И дополнительные функции, предоставленные Nuster для управления кэшем.
global nuster cache on data-size 200m frontend fe bind *:8080 mode http default_backend be backend be mode http nuster cache on nuster rule r1 if { path /a1 } nuster rule r2 key method.scheme.host.path.delimiter.query.cookie_userId if { path /a2 } nuster rule r3 ttl 10 if { path /a3 } nuster rule r4 disk only if { path /a4 } server s1 127.0.0.1:8081
Когда запрос принят, Nuster проверит правила один за другим. Ключ будет создан и используется для поиска в кэше, и если это удар, кэшированные данные будут возвращены клиенту. В противном случае ACL будет протестирован, и если он пройдет тест, ответ будет кэшироваться.
Nuster можно использовать в качестве спокойного сервера Cache NoSQL, используя HTTP Post/get/delete
Чтобы установить/получить/удалить объект ключа/значения.
Основные операции
Набор
curl -v -X POST -d value1 http://127.0.0.1:8080/key1 curl -v -X POST --data-binary @icon.jpg http://127.0.0.1:8080/imgs/icon.jpg
Получить
Curl -V http://127.0.0.1:8080/key1.
Удалить
Curl -v -x удалить http://127.0.0.1:8080/key1
Ответ
Проверьте код состояния.
- 200 ОК
- Опубликовать/получить: преуспевать
- Удалить: всегда
- ошибка 400, неверный запрос
- пустое значение
- Неправильный ACL, правила и т. Д.
- 404 не обнаружена
- Пост: не удалось по всем тестам правила
- Получить: нет нашел
- 405 Метод не допускается
- другие методы
- внутренняя ошибка сервера 500
- Любая ошибка возникает
- 507 недостаточное хранение
- превышает максимальный размер данных
Заголовки
Поддерживаемые заголовки по запросу
Тип содержимого | любой | Будет возвращен как в получении запроса |
Cache-Control. | S-Maxage или максимальный возраст | используется для установки TTL, когда правило .ttl — авто |
Данные по пользователю
Используя заголовок или файл cookie в клавише, вы можете сохранить данные для пользователей на одну и ту же конечную точку.
nuster rule r1 key method.scheme.host.uri.header_userId if { path /mypoint } nuster rule r2 key method.scheme.host.uri.cookie_sessionId if { path /mydata }
Набор
curl -v -X POST -d "333" -H "userId: 1000" http://127.0.0.1:8080/mypoint curl -v -X POST -d "555" -H "userId: 1001" http://127.0.0.1:8080/mypoint curl -v -X POST -d "userA data" --cookie "sessionId=ijsf023xe" http://127.0.0.1:8080/mydata curl -v -X POST -d "userB data" --cookie "sessionId=rosre329x" http://127.0.0.1:8080/mydata
Получить
curl -v http://127.0.0.1:8080/mypoint < 404 Not Found curl -v -H "userId: 1000" http://127.0.0.1:8080/mypoint < 200 OK 333 curl -v --cookie "sessionId=ijsf023xe" http://127.0.0.1:8080/mydata < 200 OK userA data
Клиенты
Вы можете использовать любые инструменты или Libs, которые поддерживают http: Curl
, почтальон
, Python Запросы
пойти Net/http
, и т.д.
Nuster можно управлять через API менеджера, какие конечные точки определяются URI
и можно получить доступ, сделав HTTP-запросы вместе с некоторыми заголовками
Включить и определить конечную точку URI и очистить метод
nuster manager on uri /internal/nuster purge-method PURGEX
Использование матрицы
ПОЛУЧИТЬ | / внутренний / настер | получить статистику |
ПОЧТА | / внутренний / настер | Включить и отключить правило, обновить TTL |
УДАЛИТЬ | / внутренний / настер | Усовершенствованный кэш чистки |
Пургекс | / Любой / реальный / путь | базовая чистка |
Статистика
Nuster Cats можно получить доступ, создавая HTTP-запрос на конечную точку, определяемую URI
;
использование
Curl http://127.0.0.1/nuster.
Вывод
**NUSTER** nuster.cache: on nuster.nosql: on nuster.manager: on **MANAGER** manager.uri: /nuster manager.purge_method: PURGE **DICT** # The size of the memory used by the cache dict in bytes defined by dict-size dict.cache.size: 1048576 # The length of the cache dict array dict.cache.length: 131072 # The number of used entries in the cache dict dict.cache.used: 0 dict.cache.cleanup_idx: 0 dict.cache.sync_idx: 0 dict.nosql.size: 1048576 dict.nosql.length: 131072 dict.nosql.used: 0 dict.nosql.cleanup_idx: 0 dict.nosql.sync_idx: 0 **STORE MEMORY** # The size of the cache memory store in bytes, approximate equals to dict-size + data-size store.memory.cache.size: 2098200576 # The size of used memory of the cache memory store store.memory.cache.used: 1048960 # The number of stored cache entries store.memory.cache.count: 0 store.memory.nosql.size: 11534336 store.memory.nosql.used: 1048960 store.memory.nosql.count: 0 **STORE DISK** store.disk.cache.dir: /tmp/nuster/cache store.disk.cache.loaded: yes store.disk.nosql.dir: /tmp/nuster/nosql store.disk.nosql.loaded: yes **STATS** # The total number of requests stats.cache.total: 0 # The total number of HIT requests stats.cache.hit: 0 # The total number of MISS requests stats.cache.fetch: 0 # The total number of bypass requests stats.cache.bypass: 0 # The total number of aborted requests stats.cache.abort: 0 # The total response size in bytes served by cache stats.cache.bytes: 0 stats.nosql.total: 0 stats.nosql.get: 0 stats.nosql.post: 0 stats.nosql.delete: 0 **PROXY cache app1** app1.rule.rule1: state=on memory=on disk=off ttl=10 app1.rule.rule2: state=on memory=on disk=on ttl=10 app1.rule.rule3: state=on memory=on disk=sync ttl=10 app1.rule.rule4: state=on memory=off disk=on ttl=10 app1.rule.rule5: state=on memory=off disk=off ttl=10 **PROXY nosql app2** app2.rule.ruleA: state=on memory=on disk=off ttl=10 app2.rule.ruleB: state=on memory=on disk=on ttl=10 app2.rule.ruleC: state=on memory=on disk=sync ttl=10 app2.rule.ruleD: state=on memory=off disk=on ttl=10 app2.rule.ruleE: state=on memory=off disk=off ttl=10
Включить и отключить правило
Правило можно отключить во время выполнения через Manager URI. Правило отключенного пользователя не будет обработана, и не будет создан кеш.
заголовки
включить | государство | Включить правило |
запрещать | Отключить правило | |
Название правила | название | правило, которое будет включено / отключено |
Имя прокси | Все правила имени прокси | |
* | Все правила |
Имейте в виду, что если имя не уникально, все Правила с этим именем будут отключены/включены.
Примеры
- Отключить правило R1
Curl -x post -h «Имя: R1» -H «Состояние: Отключить «http://127.0.0.1/nuster.
- Отключить все правила, определенные в Proxy App1b
Curl -x post -h «Имя: app1b» -h «Состояние: Отключить» http://127.0.0.1/nuster
- Включить все правила
Curl -x post -h «Название: *» -H «Состояние: включить» http://127.0.0.1/nuster
Обновление TTL.
Изменить TTL. Это только влияет на TTL ответов, чтобы быть кэшированным, не Обновите TTL существующих кэшей.
заголовки
Новый TTL. | ттл | Смотрите TTL в правиле настера |
Название правила | название | правило, которое будет изменено |
Имя прокси | Все правила имени прокси | |
* | Все правила |
Примеры
curl -X POST -H "name: r1" -H "ttl: 0" http://127.0.0.1/nuster curl -X POST -H "name: r2" -H "ttl: 2h" http://127.0.0.1/nuster
Обновление состояния и TTL
Состояние и TTL могут быть обновлены одновременно
curl -X POST -H "name: r1" -H "ttl: 0" -H "state: enabled" http://127.0.0.1/nuster
Очистка
Существует два режима продувки: базовый и продвинутый.
- базовый: Отправить HTTP-метод, определенный
Очистка-метод MyPurge
на путь, который вы хотите удалить - Advanced: Отправить Удалить метод в УРИ менеджера, определяемый
уваживание
Базовая продувка
Этот метод удаляет конкретный URL, который требуется, как это:
Curl -xpurge http://127.0.0.1/imgs/test.jpg.
Ключ создается таким же образом, когда кеш создан, за исключением того, что Метод
это Получить
Отказ
Примечание по умолчанию Cache Cache содержит Хозяин
Если вы кэшируете запрос, как http://example.com/test
и очистить от localhost, вам нужно указать Хозяин
Заголовок:
Curl -xpurge -h «Хост: example.com» http://127.0.0.1/test
Работает как для кеша, так и для NoSQL, это псевдоним Удалить
в режиме NoSQL.
Расширенная продувка: продувка по имени
Кэш может быть очищен, сделав HTTP Удалить
просит менеджеру URI вместе с Имя
Заголовок
заголовки
Настере имя правила | название | Кэши, созданные правилом $ {name}, будут очищены |
Имя прокси | кеши прокси $ {имя} |
Примеры
# purge all caches of proxy applb curl -X DELETE -H "name: app1b" http://127.0.0.1/nuster # purge all caches of rule r1 curl -X DELETE -H "name: r1" http://127.0.0.1/nuster
Расширенная продувка: очистить хост
Вы также можете очистить кеш-хост, все кэши с этим хостом будут удалены:
заголовки
ХОЗЯИН | хозяин | $ {хозяин} |
ХОЗЯИН | застенчик | Настер-хост имеет более высокий приоритет над хостом |
кэш, NoSQL | Режим | Шутер Cache или NoSQL Data |
Примеры
curl -X DELETE -H "nuster-host: 127.0.0.1:8080" http://127.0.0.1/nuster
Продвинутая продувка: продувка по пути
По умолчанию часть запроса также используется в качестве клавиши кэша, поэтому будет несколько кеши, если запрос отличается.
Например, для правила Настере правило IMGS, если {path_beg/imgs/}
, и запрос
curl http://127.0.0.1/imgs/test.jpg?w=120&h=120 curl http://127.0.0.1/imgs/test.jpg?w=180&h=180
Поскольку клавиша по умолчанию будет два объекта кэша.
Для того, чтобы удалить это, вы может
Удалить один на один, если вы знаете все запросы
curl -XPURGE http://127.0.0.1/imgs/test.jpg?w=120&h=120 curl -XPURGE http://127.0.0.1/imgs/test.jpg?w=180&h=180
Это не работает, если вы не знаете все запросы.
Используйте настроенный ключ и удалите один раз в случае, если часть запроса не имеет значения
Определите ключ, как Настере правило IMGS ключевой метод .scheme.host.Path Если {path_beg/imgs}
Таким образом, будет создан только один кеш, и вы можете очистить без запроса:
Curl -xpurge http://127.0.0.1/imgs/test.jpg.
Это не работает, если требуется часть запроса.
Удалить по имени правила
Curl -x удалить -H «Имя: IMGS» http://127.0.0.1/nuster
Это не работает, если правило настерна определяется что-то вроде Настере правило статическое Если {path_beg/imgs//css/}
Отказ
Этот метод обеспечивает способ очистки только по пути:
заголовки
ДОРОЖКА | дорожка | кэши с $ {путь} будет очищен |
ХОЗЯИН | хозяин | и хозяин $ {хозяин} |
ХОЗЯИН | застенчик | Настер-хост имеет более высокий приоритет над хостом |
кэш, NoSQL | Режим | Шутер Cache или NoSQL Data |
Примеры
#delete all caches which path is /imgs/test.jpg curl -X DELETE -H "path: /imgs/test.jpg" http://127.0.0.1/nuster #delete all caches which path is /imgs/test.jpg and with host of 127.0.0.1:8080 curl -X DELETE -H "path: /imgs/test.jpg" -H "nuster-host: 127.0.0.1:8080" http://127.0.0.1/nuster
Расширенная очистка: очистка по регуляторам Regex
Вы также можете очистить кеш по Regex, кэширует, какой путь соответствует Regex, будет удален.
заголовки
Regex. | regex. | кэширует, какой путь соответствует с $ {Regex} будет очищен |
ХОЗЯИН | хозяин | и хозяин $ {хозяин} |
ХОЗЯИН | застенчик | Настер-хост имеет более высокий приоритет над хостом |
кэш, NoSQL | Режим | Шутер Cache или NoSQL Data |
Примеры
#delete all caches which path starts with /imgs and ends with .jpg curl -X DELETE -H "regex: ^/imgs/.*\.jpg$" http://127.0.0.1/nuster #delete all caches which path starts with /imgs and ends with .jpg and with host of 127.0.0.1:8080 curl -X DELETE -H "regex: ^/imgs/.*\.jpg$" -H "127.0.0.1:8080" http://127.0.0.1/nuster
Очистить осторожность
Включить ограничение доступа
Если есть смешанные заголовки, используйте приоритет
Имя
,Путь и хост
,путь
,Regex & Host
,regex.
,хозяин
Curl -x delete -h "Имя: pault1" -h "Путь:/imgs/a.jpg"
: очистить по имени
- Если есть избыточные заголовки, используйте первое вхождение
Curl -x delete -h "Имя: rue1" -h "Имя: reval2"
: очистить от правило
Regex
это НЕТ Глобай
Например, все файлы JPG под/imgs должны быть ^/IMGS/.* \. JPG $
вместо /imgs/*.jpg.
- Очистные файлы кэша по имени прокси или имени правила или правила или хостом или пути или Regex работает только после завершения процесса дискового загрузчика. Вы можете проверить статус через статистику URL.
Настер (оба кеша, так и NoSQL) поддерживает различные бэкэндские магазины. В настоящее время поддерживается память и диск. Больше магазинов будут добавлены.
объем памяти
Данные хранятся в область памяти, размер которой определяется Размер данных
Отказ Данные не сохраняются в памяти и проиграют после перезапуска.
Диск
Данные хранятся на диске и по пути, определенным дир
. Данные сохраняются после перезагрузки.
Есть 3 режима:
- OFF: по умолчанию, отключить настойчивость диска.
- на: Сохраните данные на диск.
- Синхронизация:
Память на
должен быть установлен, чтобы использовать этот режим. Сохранить данные в память, сначала и данные будут синхронизированы на диск позже главным процессом. Одна итерацияДиск-заставка
Данные проверяются и сохранены на диск.
Nuster представил следующие образцы
[Cache] Nuster.cache.hit: логический
Возвращает логическое значение, указывающее, является ли это хитом или нет и может использоваться как
http-response set-header x-cache hit if { nuster.cache.hit }
[кэш | NoSQL] nuster.host: string
Так же, как haproxy req.hdr (хозяин)
кроме этого nuster.host
Может использоваться как в запросе, так и в ответ на ответ.
[Кэш | NoSQL] Nuster.uri: нить
Так же, как haproxy Capture.req.uri
Отказ
[кэш | noSQL] nuster.path: string
Так же, как haproxy путь
кроме этого nuster.path
Может использоваться как в запросе, так и в ответ на ответ.
[Кэш | NoSQL] Nuster.Query: нить
Так же, как haproxy Запрос
кроме этого Nuster.Query
Может использоваться как в запросе, так и в ответ на ответ.
Не может начать: не в режиме мастера-работника
Установить Мастер-работник
в глобальный
раздел или начать настраивать
с -W
.
Как отлаживать?
Установить Отладка
в глобальный
раздел или начать настраивать
с -d
.
Связанные настраиваемые сообщения об отладки начнутся с [Настерет
Отказ
Как кэшировать запрос на запрос?
Включить Опция HTTP-буфер-запрос
и установить Тело
В кеше правил ключ
.
По умолчанию ключ кэша не включает в себя тело запроса, не забудьте поставить Тело
в ключевом поле.
Обратите внимание, что размер тела запроса должен быть меньше Tune.bufsize - Tune.maxrewrite - request_header_size
, который по умолчанию это 16384 - 1024 - request_header_size
Отказ
Обратитесь к Опция HTTP-буфер-запрос и Tune.bufsize Раздел в Конфигурация HAProxy для деталей.
Кроме того, это может быть хорошая идея, чтобы поставить его отдельно на выделенную бэкэнду, как пример.
Как ограничить доступ?
Вы можете использовать мощный Haproxy ACL, что-то вроде этого
acl network_allowed src 127.0.0.1 acl purge_method method PURGE http-request deny if purge_method !network_allowed
Как включить http2
bind :443 ssl crt pub.pem alpn h2,http/1.1
global nuster manager on uri /_/nuster purge-method MYPURGE nuster cache on data-size 100m nuster nosql on data-size 100m master-worker # since v3 # daemon # debug defaults retries 3 option redispatch timeout client 30s timeout connect 30s timeout server 30s frontend web1 bind *:8080 mode http acl pathPost path /search use_backend app1a if pathPost default_backend app1b backend app1a balance roundrobin # mode must be http mode http # http-buffer-request must be enabled to cache post request option http-buffer-request acl pathPost path /search # enable cache for this proxy nuster cache # cache /search for 120 seconds. Only works when POST/PUT nuster rule rpost key method.scheme.host.uri.body ttl 120 if pathPost server s1 10.0.0.10:8080 backend app1b balance roundrobin mode http nuster cache on # cache /a.jpg, not expire acl pathA path /a.jpg nuster rule r1 ttl 0 if pathA # cache /mypage, key contains cookie[userId], so it will be cached per user acl pathB path /mypage nuster rule r2 key method.scheme.host.path.delimiter.query.cookie_userId ttl 60 if pathB # cache /a.html if response's header[cache] is yes http-request set-var(txn.pathC) path acl pathC var(txn.pathC) -m str /a.html acl resHdrCache1 res.hdr(cache) yes nuster rule r3 if pathC resHdrCache1 # cache /heavy for 100 seconds if be_conn greater than 10 acl heavypage path /heavy acl tooFast be_conn ge 100 nuster rule heavy ttl 100 if heavypage tooFast # cache all if response's header[asdf] is fdsa acl resHdrCache2 res.hdr(asdf) fdsa nuster rule resCache ttl 0 if resHdrCache1 server s1 10.0.0.10:8080 frontend web2 bind *:8081 mode http default_backend app2 backend app2 balance roundrobin mode http # disable cache on this proxy nuster cache off nuster rule all server s2 10.0.0.11:8080 frontend nosql_fe bind *:9090 default_backend nosql_be backend nosql_be nuster nosql on nuster rule r1 ttl 3600
- Присоединяйтесь к развитию
- Дать обратную связь
- Отчет о проблемах
- Отправить запросы на потяну
- Распространять настере
Copyright (C) 2017 подарок, Цзян Вэньюань
Все права защищены.
Лицензированные под GPL, так же, как Haproxy
Haproxy и другие источники лицензионные уведомления: см. Соответствующие отдельные файлы.
Оригинал: «https://dev.to/nuster/nuster—a-high-performance-http-proxy-cache-server-and-restful-nosql-cache-server-based-on-haproxy—4aa2»