引言
本文旨在给不了解网关的人以宏观上的了解,使大家从整体上去认识网关,以及网关涉及的技术。
API网关
正向代理和反向代理
- 正向代理:是一种客户端的代理技术,帮助客户端访问无法访问的服务资源,可以隐藏用户真实IP。比如:Charles、VPN等
- 反向代理:是一种服务端的代理技术,帮助服务器做负载均衡、缓存、提供安全校验等,可以隐藏服务器真实IP。比如:LVS技术、nginxproxy-pass等
什么是网关
API网关位于客户端和服务器集群之间,作为唯一的服务入口,除了充当反向代理外,通常还用来处理非业务功能,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。
网关的作用
请求转发:
- 分层解耦,使客户端对服务端的接口变更操作无感知,如修改路由或变更调用接口,只需修改网关部分即可。
- 您可能采用微服务架构,因此,单个请求可能需要调用数十个不同的应用。当客户端发出请求时,API 网关会将其分解为多个请求,然后将它们路由到正确的位置,生成响应,并跟踪所有内容。
- 网关内部请求可能会使用其他的通讯协议,如gRPC等。
非业务功能
API网关实现功能
api_gateway_1.jpg请求转发
连接复用:后端服务如果是 HTTP 协议,尽量采用连接池或者 Http2,测试连接复用和不复用性能有几倍的差距。(TCP 建立连接成本很高)
协议转换:如HTTP->GRPC
服务发现
服务发现,指的是只通过服务名获取服务列表(IP+端口),一般使用分布式存储系统实现,如Etcd,zookeeper等。
-
服务注册
:同一service的所有节点注册到相同目录下,节点启动后将自己的信息注册到所属服务的目录中。 -
服务发现
:通过服务节点能查询到服务提供访问的 IP 和端口号。比如网关代理服务时能够及时的发现服务中新增节点、丢弃不可用的服务节点。
负载均衡
负载均衡,将请求合理的分配给下游服务器,实现资源利用的最大化。
随机负载:随机挑选目标服务器IP
轮询负载:ABC三台服务器, ABCABC依次轮询
加权负载:给目标设置访问权重,按照权重轮询
一致性hash负载:相同的请求尽可能落到同一个服务器上,相同的请求指的是请求是进行hash的key值,如user_id,ip等。
限流熔断
限流
限流:通过对并发限速,以达到拒绝服务,排队或等待、降级等处理
漏桶限流:本质是限制消费速率,可类比水龙头。
漏桶.jpg令牌桶限流:首先,令牌桶也是以恒定的速率消费。区别于漏桶,当令牌桶中有token积攒的时侯(生产速率>消费速率),这些token可以用于突增的请求。
- 接口请求时间和放入token时间间隔关系:由于不放回token,相当于token过期时间和产生token时间的关系。如果token过期时间>产生时间,则token会越来越多,导致消费速率不断增大,达不到限流的目的。
如果token过期时间<产生时间,则token会越来越少,导致消费速率过低;
所以,两者速率应该相等。
- 限流的平均速率为r tokens/sec,允许突增的最大请求量为 b 。
熔断降级
权限认证
JWT
网友评论