持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
前言
在上一篇文章我介绍了Api网关设计:
在这个设计里
需要单独部署一套API Gateway 额外节点,API Gateway负责服务的发现和健康检查,服务调用的负载均衡
Nginx 只是作为一个纯粹的反向代理,将请求转发给API Gateway
基于nginx的设计
基于nginx 的设计,实现流程是和 <<API网关设计>> 一致的,不同的地方是去掉了API Gateway的部署节点,把Nginx 本身就当成API Gateway来使用,充分利用nginx 的能力和降低开发,运维的难度
基于side agent实现原来API Gateway需要实现的功能
- 管理生产环境注册和后端微服务的发现
- 操作路由
side agent 和nginx运行在同一台机器上,不需要额外部署节点
原理描述
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的有如下职责:
- 负责读取和监听nacos的配置,重新生成nginx 的upstream(微服务节点) 和location(路由)配置
- 执行nginx -s reload刷新nginx 的配置
- 提供 API网关操作接口 中定义的API,修改Nacos中的配置,下发配置到nginx