网关的实现以及优化
程序员文章站
2024-02-11 20:43:04
...
网关的作用?
例子:就像公司的保安:检查人员身份,引导新人员找到相关的部门。减少人员直接冲进办公室
实际:提供统一的API,可以屏蔽真实调用的服务信息,隐藏保护,屏蔽内部细节
反向路由:能够将外部调用转换成内部服务,通过负载均衡分发请求到服务器
认证安全:拦截无效流量的请求。爬虫,黑客。突发流量的限流熔断,保障服务稳定
灰度发布:对于版本迭代进行灰度发布控制
性能监控:可以查看api的调用时间,次数,耗时等
降级限流:防止突发流量暴增。进行限流。保障系统的稳定
系统日志:流量都经过网关,可以记录审计日志,通过日志可以查看到性能问题流量都经过网关
数据缓存:
如果传输协议不一致,需要对协议进行转换
网关的分类
springcloud的zuul, gateWay, Kong, nginx+lua, 自研网关
自研网关基于:netty,servlte等技术
zuul: java语言开发,方便二次开发。并发能力不强,基于tomcate部署,或通过springboot将项目跑起来。
nginx:是C语言开发实现,需要理解C语言,并发能力强,很难从nginx内核等方面定制
整体简单项目架构
网关路由实现架构
改造zuul的网关:
因为每次新增服务,都需要配置网关路由到服务的地址规则,这样就需要重启网关就行生效。但是实际项目中,不能频繁的重启网关服务。所以,需要一套可视化系统进行配置。这样一套实现方案。
解决的问题: 1.api的存储 2.api列表的时时更新
思路:数据落地db存储,修改网关路由加载路由的规则(配置文件读取url,加载到网关列表)。
为了提高网关的高可用,做副本集群容错。可高网关的并发能力,做网关的量扩容。
这部分和其他的业务高可用方案一致
通过定时任务, 重写locateRoute加载网关api数据的接口方法,
去加载数据库中的api,进行解析,格式化成配置的url,parh格式。封装返回结果Map<String,prperties>。
灰度发布:线上服务仍然旧的代码。部署部分机器为新代码,通过流量比例的通过。将部分流量分发到部署新代码的机器,经过验证没有问题,在全部部署,流量打开。
上一篇: Java DOM4J方式生成XML的方法
下一篇: STL源码剖析——基本算法copy