API网关初探

作者: lizhuoming | 来源:发表于2020-10-19 21:36 被阅读0次

    引言

    本文旨在给不了解网关的人以宏观上的了解,使大家从整体上去认识网关,以及网关涉及的技术。

    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 。
    令牌桶.jpg
    熔断降级

    权限认证

    JWT

    数据统计

    参考资料

    相关文章

      网友评论

        本文标题:API网关初探

        本文链接:https://www.haomeiwen.com/subject/anblmktx.html