Web Gateway

设计的真正价值在于输出公共的原则和标准

API 网关杂记

微服务最近很火,一些公司暴露API供用户使用,按量或调用次数计费来获得收益。

API网关作用

类似一个组织内运行服务的保安部门。

  • 统一的认证和授权
  • 请求转发(负载均衡)
  • 请求调用限流(防止系统过载和预防DDos攻击)
  • 协议转换 HTTPS(SSL/TLS 流量)外部请求 -> 非加密Plain HTTP
  • 处理服务内部错误(防止异常栈信息泄露)
  • 请求响应合并(客户端发送一个请求,网关发起一堆请求进行响应合并)
  • 请求统一化访问日志(因为网关是请求同一访问入口,非常方便)
  • 服务发现(高级功能,基于服务注册中心进行请求动态分发)
  • 告警
  • 清晰的Rest API(用于实例启动注册,可以基于网关做管理UI)

你可以看到原来应用访问控制全部都在网关做了

在这里插入图片描述

1. API 网关 & DevOps

当然部分遵循DevOps规范的公司,开发微服务。那么微服务API就是微服务之间交互的语言,进行CI/CD的时候,顺便就会将服务注册到API网关上。

API网关的部署模式

来源:Choosing the Right API Gateway Pattern for Effective API Delivery

1. 单体网关(edge gateway)

在这里插入图片描述
全部功能都在上做单体网关,一般南北流量(外部->服务)优化度较高,东西流量(服务之间)优化度感人。

2. 双层网关

根据单体网关的特点,我们发现只有认证之后,负载均衡等高级功能才有意义,于是基础的功能放到第一层网关去做,第二层做剩下的功能。

在这里插入图片描述
第一层:

  • SSL/TLS termination
  • Authentication
  • Centralized logging of connections and requests
  • Tracing injection

第二层:

  • Authorization
  • Service discovery
  • Load balancing

这种部署模式有个缺点,分离度不高。团队和团队之间相互影响。

3. 微服务网关

既然大家相互影响,那就各自用各自的呗。

在这里插入图片描述
网关规则是团队自治的,不过不是完全自由,需要满足统一的接入规范(最好是每个微服务网关都是一个实例,由自动化软件去管理转发规则,安全限制等)。

这里可以引入API管理规范 (API management),管理微服务网关API的整个声明周期,包括API的定义与发布,性能监控,调用情况等。

网关评测指标

指标单位说明
并发量同时在线用户数量
请求延迟ms用户请求发起到收到响应的RTT时间
平均响应时间ms平均响应时间
吞吐量req/s每秒完成请求处理次数
功能支持-日志,认证,监控等支持能力
兼容性-硬件兼容情况
资源占用-CPU与内存在相同负载下的占用情况

网关功能考虑方面

1. 服务发现

在这里插入图片描述
服务发现的实现方式一般做法是使用注册中心(比如etcd,nacos,zookeeper,Eureka), 请求发送到网关,网关从注册中心(registry)获取实例信息,根据LB算法进行请求路由。

从注册中心拿到的实例列表需要进行筛选,目的是避免请求被路由到不健康的实例。可以通过健康检查来辅助筛选。

健康检查分为主动和被动两种方式。一种是周期性巡检,一种是请求到来时再探测。一般可以让用户设置如下参数

参数-
周期多长时间检查一次(仅主动)
成功阈值请求多少次就认为实例健康
失败阈值请求多少次就认为实例不健康
超时时间允许最大的请求响应时间
成功响应状态码比如HTTP 2xx
失败响应状态码比如HTTP 5xx ,4xx
重试次数-

2. 可扩展

不论你的核心做的性能如何的好,为了适应复杂的业务需求,都要为自定义逻辑留下口。更准确的来说,整个请求的周期,包括路由规则匹配之前,路由成功匹配之后,路由转发前,路由转发响应收到后都要留下接口。

开源社区我看使用的都是插件机制,就是让用户自己用lua脚本实现一个SPI函数。

Phase名字
BEFORE_ROUTE路由规则匹配之前
ROUTE_MATCH路由成功匹配之后
BEFORE_ROUTE路由转发前
AFTER_ROUTE路由转发响应收到后

3. 公共Rest API

提供如Rest API这种开放接口能够被其他应用调用。这点也很重要,这可以使得更多系统如CI/CD,监控,告警系统etc.的接入方式清晰而一致。

4. 网关服务的高可用性

网关可以保证其后面的服务的高可用性,那么网关的高可用性怎么保证?

4.1 硬件LB

硬件LB背后挂载多个无状态nginx实例。这种方式单点故障也是存在的,不过可以保证可以把这种类型的锅甩给运维(手动狗头)。

4.2 VIP+KeepAlived

主从模式,VIP永远在主节点。当主节点失效,失效转移,将VIP转移到备节点。不过这是所有高可用服务的通用解决方式。
优点: 解决了单点故障。
缺点是:无法线性扩展,同时只有一个实例在用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值