Api网关:基于nginx的API网关

988 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情

前言

在上一篇文章我介绍了Api网关设计:

# Api:网关设计

在这个设计里

需要单独部署一套API Gateway 额外节点API Gateway负责服务的发现和健康检查,服务调用的负载均衡

Nginx 只是作为一个纯粹的反向代理,将请求转发给API Gateway

image.png

基于nginx的设计

基于nginx 的设计,实现流程是和 <<API网关设计>> 一致的,不同的地方是去掉了API Gateway的部署节点,把Nginx 本身就当成API Gateway来使用,充分利用nginx 的能力和降低开发,运维的难度

基于side agent实现原来API Gateway需要实现的功能

  1. 管理生产环境注册和后端微服务的发现
  2. 操作路由

side agent 和nginx运行在同一台机器上,不需要额外部署节点

image.png

原理描述

nginx 做蓝绿可以这么做

假设有两个环境

A 环境的地址是 172.26.0.7-172.26.0.8

B 环境的地址是 172.26.0.9-172.26.0.10

可以在主环境是A环境的时候做如下配置

upstream env_a {
   server 172.26.0.7;
   server 172.26.0.8;
}
upstream env_b {
   server 172.26.0.9;
   server 172.26.0.10;
}
 
set $active_env = env_a;
location /bcs {
   proxy_pass http://$active_env;
}

需要激活B环境为主环境时,修改 $active_env的配置为env_b即可


upstream env_b {
   server 172.26.0.9;
   server 172.26.0.10;
}
 
location /bcs {
   proxy_pass http://env_b;
}

然后执行nginx -s reload 即可完成服务发布

但是这里面有个问题是 nginx 本身并不支持nacos的服务发现,通过在nginx机器上添加side agent的方式,可以做到实时更新nginx 的配置,从而实现环境的动态切换

side agent的有如下职责:

  1. 负责读取和监听nacos的配置,重新生成nginx 的upstream(微服务节点) 和location(路由)配置
  2. 执行nginx -s reload刷新nginx 的配置
  3. 提供 API网关操作接口 中定义的API,修改Nacos中的配置,下发配置到nginx