网关系统是指处于系统架构中,作为应用程序和外部系统之间的接口,负责协调和转发请求和相应的系统。
是位于客户端与后端之间的一种中间层系统,简单来说就是请求要在这里过一遍水,本质就是过滤器,一个复杂的if else.
一、网关系统的功能
1、路由转发
将来自客户端的请求按照预先定义的路由规则进行转发,使请求能够到达正确的后端服务。
要实现一个路由转发的逻辑,需要进行如下几个步骤
a、先定制路由规则,比如/a请求进来的,后台转发到/g-a/a
b、对请求的url进行分析判断,可用正则匹配
c、根据分析判断的结果,结合路由规则进行转发
d、转发的时候可以进行负载均衡
e、还可以对请求进行监控管理
2、协议转换
网关系统应该支持多种协议,比如HTTP,WebSocket,RPC等,并进行协议的转换。比如后台服务是RPC,但是我们可以通过网关暴露http的接口出去,客户端可以通过HTTP调用,网关再转成RPC调用。
公司内部之间的调用可能是http,但是外部会是https,以及http和dubbo的转换这些,
3、安全控制
根据定义的安全策略对请求进行控制,比如对请求进行身份验证,加解密,黑名单,限流,鉴权等。
对于鉴权,主要是对用户合法和数据合法,对于用户合法可以进行用户认证,对于需要进行鉴权的请求,网关系统可以调用具体业务的用户系统来实现,让用户系统给网关进行反馈。对于数据的合法,这个一般都会建议在具体业务系统中来实现,而不会在网关来实现。
对于网关的黑名单,作用是用来限制特定的请求,黑名单可以存储在数据库,配置文件,内存,或者缓存中,存在数据库和配置文件因为涉及磁盘的IO读写,可能会比较慢,这个要看业务系统对性能的要求高不高,要结合具体的业务场景来,存在内存中的话,可能需要考虑重启内存失效的问题,可以重启的时候从数据库或者配置文件加载这些。
还需要考虑黑名单实时更新的问题,可以直接修改数据库或者配置,也可以用消息队列,还有钩子webhooks来,比如管理端添加了一个黑名单,会回调网关系统的一个黑名单更新接口进行更新,或者登记消息队列让后台消费程序更新。
黑名单的实现主要是通过request请求获取ip,url,用户,body信息等来处理,可以通过日志和监控进行动态调整,比如某个ip访问频率异常就可以自动加入黑名单中。
4、流量控制
对请求进行限流,熔断,降级等操作,保证系统的稳定性。还可以对用户进行优先级调度,比如vip会员优先等这些逻辑。
对于限流,主要是根据ip或者设备进行限流,有些会对用户进行限流,以及对内的api接口调用进行限流,可以使用固定时间窗口,滑动时间窗口,令牌桶,漏桶等算法来实现。
5、缓存
对热点数据进行缓存,减轻后端服务的压力,提高系统的性能。
比如访问频繁的接口,相应时间比较慢的接口,需要频繁访问的静态资源。
二、网关的部署
网关通常是多个节点,我们可以通过Nginx的upstream进行部署,但是nginx又会有单点的问题,当然可以通过lvs来解决nginx单点的问题。
我们还可以通过DNS来对网关进行负载,还有F5硬件负载均衡,或者用keepalived来实现一个虚拟IP(VIP)来漂移到多个实际的ip。