Я читал о Nginx Fabric Model, и это привлекает мое внимание к перенастройке того, как приложение взаимодействует с MySQL и Redis. Если локальный экземпляр Nginx может эффективно и быстро проксировать HTTP-трафик, теперь он также может использовать TCP-прокси, не беспокоясь о сети, даже используя ведомое устройство базы данных в качестве главного в случае чрезвычайной ситуации и потенциально инкапсулируя разбиение базы данных. Все преимущества могут упростить настройку приложения, и его логика, сеть (перегрузка, задержка, время ожидания, повторные попытки) больше не будет фокусироваться на разработке функций.
Я использую последний Docker и набор контейнеров: Nginx, Redis, MySQL. Я попробовал следующую конфигурацию:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream redis {
# prefer first server but limit connections
server 172.17.0.8:6379 weight=2 max_conns=1;
server 172.17.0.3:6379;
}
upstream mysql {
# use second server in case of failure
server 172.17.0.4:3306;
server 172.17.0.5:3306 backup;
}
server {
listen 6379 so_keepalive=on;
proxy_pass redis;
}
server {
listen 3306 so_keepalive=on;
proxy_pass mysql;
}
}
У меня есть несколько вопросов:
ведение журнала. Как узнать, какая конечная точка используется, сколько раз Nginx повторял определенный запрос?
статистика в реальном времени - возможно ли получить пропускную способность для потокового модуля?
с точки зрения сегментирования базы данных - возможно ли отправить запрос в базу данных с сегментированием на основе некоторой логики, кроме $ remote_addr?
Последний вопрос очень важен, я нашел модули ngx_stream_map_module и ngx_stream_split_clients_module, но $ remote_addr не подходит для разделения, можем ли мы перехватить cookie из раздела http и повторно использовать в разделе потока, где у нас нет заголовков? Можем ли мы ввести код Lua в секцию потока? Является ли ngx_stream_ssl_preread_module решением этой проблемы, как заставить его работать для соединения без шифрования?