Знания меняют судьбу, программирование делает меня счастливым, и я продолжу шагать в мире открытого исходного кода в 2020 году.
Ставьте лайк и смотрите снова, формируйте привычку
дай мне звезду,Нажмите, чтобы понять пример каркаса базового решения платформы управления, основанного на интерфейсной сервисной инфраструктуре нового поколения «ApiBoot» («Vue + ElementUI»).
предисловие
Переадресация пользовательских запросов — это шаг, который необходимо выполнить при развертывании службы интерфейса.
Шаги переадресации запроса можно условно разделить на следующие этапы:
- Разрешение доменного имени на сервер переадресации
- Сервер пересылки будет пересылать на единый шлюз в соответствии с конфигурацией веса (веса) и резервного копирования (резервной копии).
- Если унифицированный шлюз имеет конфигурацию оттенков серого, ему необходимо фильтровать запросы на основе информации об идентификаторе или заголовке.
- Переадресация на конкретную бизнес-службу
Лучшее на рынке请求转发
Есть много видов, таких как:Nginx
,F5
,Kong
,Tengine
и т. д., гдеTengine
АлибабаNginx
Чтобы резюмировать, наше содержание в этой главе основано наNginx
Чтобы объяснить, давайте сначала подготовимсяnginx
тестовая среда.
Подготовьте среду
Если ваша тестовая среда не установленаNginx
, конкретный процесс установки я опишу двумя способами.
Установите Nginx с Brew
Что, если выOSX
система, может использоваться напрямуюbrew
Инструмент управления установлен.Этот метод относительно прост.Он автоматически загружает последнюю стабильную версию с удаленного сервера для распаковки и настройки среды.
# 安装nginx
➜ ~ brew install nginx
подожди тихо~
После завершения установки давайте сначала изменим номер порта (установочный пакет brew изменил номер порта прослушивания по умолчанию на8080
, как правило, при использовании распаковки для установки порт прослушивания80
).
Нам нужно найтиnginx.conf
Расположение этого файла:
➜ ~ sudo find / -name nginx.conf
/usr/local/etc/nginx/nginx.conf
Найдя файл, переходимsudo vi /usr/local/etc/nginx/nginx.conf
команда для изменения номера порта по умолчанию, расположение выглядит следующим образом:
server {
listen 80;
server_name localhost;
#...
}
Сохраните и выйдите после модификации.
Наконец, не забудьте перезагрузитьсяNginx
Служить.
➜ ~ brew services restart nginx
Разархивируйте пакет
Иди первымnginx
Официально предоставленоnginx.org/downloadадрес загрузки, чтобы выбрать вашу любимую версию, следующие1.17.7
Пример версии:
Нажмите, чтобы загрузить, распаковать и установить его (обратите внимание на среду компиляции, могут отсутствовать некоторые библиотеки зависимостей, вы можете установить соответствующие зависимости локально)
# 解压nginx
tar -xvf nginx-1.17.7.tar.gz
# 进入目录
cd nginx-1.17.7
# 配置
./configure --prefix=/usr/local/nginx
# 编译
sudo make
# 安装
sudo make install
# 进入nginx执行目录
cd /usr/local/nginx/sbin
# 启动nginx
./nginx
Установка завершена, если вы посетитеhttp://127.0.0.1можно увидетьWelcome to nginx!
Слова означают, что мы успешно установили.
Пример проекта
Для того, чтобы продемонстрировать безболезненное восприятие пользователями службы обновлений, сначала создадим простойSpringBoot
Пример проекта, добавить в проект тестовый интерфейс, проектpom.xml
Зависимости следующие:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Пример интерфейса
СоздатьTestController
Тестовый контроллер выглядит так:
/**
* 测试控制器
*
* @author 恒宇少年
*/
@RestController
@RequestMapping(value = "/test")
public class TestController {
@Autowired
private ServerProperties serverProperties;
@GetMapping
public String hello() {
return "请求分发到了,端口号:" + serverProperties.getPort() + "的服务,接口访问成功.";
}
}
Настроить переадресацию
Интерфейс запроса, который нам нужен для тестирования, готов, а затем нам нужно получить доступ кnginx
При пересылке запроса на протестированный нами интерфейс нам нужно использовать его при настройке переадресацииnginx
Два ключевых слова , являютсяupstream
,location
.
- upstream: Группа серверов, запрос конфигурации распространяется на несколько серверов в группе.
-
location: префикс пути переадресации, например: «/user/», когда мы посещаем
http://127.0.0.1/user/1
, он выполнитlocation
экспедиторский бизнес.
Процесс переадресации вверх по течению показан на следующем рисунке:
Настроить восходящий поток
существуетnginx.conf
документhttp
добавил в ретвит服务器组
(вверх по течению), следующим образом:
# 负载配置
upstream test {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:9090 weight=2;
server 127.0.0.1:9000 backup;
}
Настроить местоположение
Группа серверов была настроена выше, нам нужно назвать ееtest
Группа серверов настроена как прокси вlocation
,существуетlocation
изserver
добавить один следующийlocation
,Следующим образом:
# 配置"/lb/"路径的请求全部转发到本地8080端口
location /lb/ {
proxy_pass http://test/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 50;
proxy_read_timeout 50;
proxy_send_timeout 50;
}
Перезапустите Nginx
я используюbrew
установленnginx
, Команда перезапуска выглядит следующим образом:
brew services restart nginx
Что, если вы安装包
Способ установки:
# 进入安装包目录
cd /usr/local/nginx/sbin
# 重载
./nginx -s reload
Конфигурация веса
существуетnginx
Существует понятие веса, которое управляет трафиком запросов в соответствии с размером значения веса, чем больше значение веса, тем больше распределение трафика.test
Интерпретация весов конфигураций в группах серверов:
-
server 127.0.0.1:8080 weight 1;
Соотношение веса1/3
, каждые 3 запроса будут перенаправляться на этот сервер один раз. -
server 127.0.0.1:9090 weight 2;
Соотношение веса2/3
, каждые 3 запроса будут перенаправляться на этот сервер 2 раза.
Альтернативная конфигурация
когда мыupstream
внутриserver
Хвост добавилbackup
Когда это означает, что этот сервер является резервным сервером, он будет включен только тогда, когда другие серверы не работают.Мы фактически используем это при обновлении.
запустить тест
Для удобства демонстрации мы будем непосредственно тестировать проект в этой главе.package
После упаковки пройти--server.port
чтобы указать номер рабочего порта для имитации сценария нескольких серверов.
# 启动127.0.0.1:8080服务器
java -jar target/use-nginx-loadbalance-upgrade-service-0.0.1-SNAPSHOT.jar --server.port=8080
# 启动127.0.0.1:9090服务器
java -jar target/use-nginx-loadbalance-upgrade-service-0.0.1-SNAPSHOT.jar --server.port=9090
# 启动127.0.0.1:9000备用服务器
java -jar target/use-nginx-loadbalance-upgrade-service-0.0.1-SNAPSHOT.jar --server.port=9000
Примечание. Используйте несколько окон терминала для запуска службы.
существуетnginx.conf
>server
Средняя конфигурацияlocation
Условие переадресации/lb/
префикс пути, поэтому мы получаем доступhttp://127.0.0.1/lb/test(из-заnginx
Номер порта прослушивания80Так сквозьnginx
Вам не нужно указывать номер порта при доступе к переадресации) будет переадресован наtest
на сервере в группе серверов.
Контрольная точка: пересылка веса
curl http://localhost/lb/test
端口号:8080,接口访问成功.
curl http://localhost/lb/test
端口号:9090,接口访问成功.
curl http://localhost/lb/test
端口号:9090,接口访问成功.
curl http://localhost/lb/test
端口号:8080,接口访问成功.
По результатам визита,8080
Услуга номера порта запрашивается каждые 3 раза1次
,а также9090
запрашивается каждые 3 раза2次
, то есть именно тот вес, который соответствует нашей конфигурации (weight
), тест пройден.
Контрольная точка: режим ожидания вступает в силу
мы кладем8080
,9090
Обе службы остановлены, зайдите сноваhttp://127.0.0.1/lb/test.
curl http://localhost/lb/test
端口号:9000,接口访问成功.
curl http://localhost/lb/test
端口号:9000,接口访问成功.
curl http://localhost/lb/test
端口号:9000,接口访问成功.
Вы можете видеть, что наш сервер резервного копирования включен и перенаправил весь трафик запросов на9000
На этом сервисе тест прошел.
Постучать по доске, нарисовать ключ
когда мы ставим8080
,9090
Когда оба остановлены, сервер резервного копирования будет включен, и тогда мы сможем обновить8080
,9090
Рабочий код этих двух служб перезапускается после завершения обновления, если8080
,9090
Один из двух серверов работает,nginx
трафик не будет распределяться на бэкап9000
и так далее, чтобы обновить все службы.
пример кода
Если вам понравилась эта статья, нажмите на репозиторий исходного кодаStar
,Спасибо! ! !
Образец исходного кода этой статьи можно получить по следующим каналам, каталогuse-nginx-loadbalance-upgrade-service
:
- Гостиница:git ee.com/sh-wave-with/spr…
автор личноблогИспользуйте фреймворк с открытым исходным кодомApiBootПомочь вам стать архитектором сервисов интерфейса API