Знания меняют судьбу, программирование делает меня счастливым, и я продолжу шагать в мире открытого исходного кода в 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