跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > 【架构师】零基础到精通——网关策略

【架构师】零基础到精通——网关策略

时间:2024-05-04 10:01:07 来源:网络cs 作者:利杜鹃 栏目:卖家故事 阅读:

标签: 精通  策略  基础 
阅读本书更多章节>>>> 1、流量治理

1-1、API鉴权

请求安全是API网关非常重要的能力,集成了丰富的安全相关的系统组件,包括有基础的请求签名、SSO单点登录、基于SSO鉴权的UAC/UPM访问控制、用户鉴权Passport、商家鉴权EPassport、商家权益鉴权、反爬等等。业务研发人员只需要简单配置,即可使用。

1-2、集群隔离

API网关按业务线维度进行集群隔离,也支持重要业务独立部署。如下图所示:

1-3、请求隔离

服务节点维度,API网关支持请求的快慢线程池隔离。快慢线程池隔离主要用于一些使用了同步阻塞组件的API,例如SSO鉴权、自定义鉴权等,可能导致长时间阻塞共享业务线程池。快慢隔离的原理是统计API请求的处理时间,将请求处理耗时较长,超过容忍阈值的API请求隔离到慢线程池,避免影响其他正常API的调用。除此之外,也支持业务研发人员配置自定义线程池进行隔离。具体的线程隔离模型如下图所示:

在这里插入图片描述

1-4、灰度发布

API网关作为请求入口,往往肩负着请求流量灰度验证的重任。

灰度场景

在灰度能力上,支持灰度API自身逻辑,也支持灰度下游服务,也可以同时灰度API自身逻辑和下游服务。如下图所示:

在这里插入图片描述

灰度API自身逻辑时,通过将流量分流到不同的API版本实现灰度能力;灰度下游服务时,通过给流量打标,分流到指定的下游灰度单元中。

灰度策略

支持丰富的灰度策略,可以按照比例数灰度,也可以按照特定条件灰度。

2、监控告警

2-1、立体化监控

API网关提供360度的立体化监控,从业务指标、机器指标、JVM指标提供7x24小时的专业守护,如下表:

监控模块主要功能
1统一监控Raptor实时上报请求调用信息、系统指标,负责应用层(JVM)监控、系统层(CPU、IO、网络)监控
2链路追踪Mtrace负责全链路参数透传、全链路追踪监控
3日志监控Logscan监控本地日志异常关键字:如5xx状态码、空指针异常等
4远程日志中心API请求日志、Debug日志、组件日志等可上报远程日志中心
5健康检查Scanner对网关节点进行心跳检测和API状态检测,及时发现异常节点和异常API

2-2、多维度告警

有了全面的监控体系,自然少不了配套的告警机制,主要的告警能力包括:

告警类型触发时机
1限流告警API请求达到限流规则阈值触发限流告警
2请求失败告警鉴权失败、请求超时、后端服务异常等触发请求失败告警
3组件异常告警自定义组件处理耗时长、失败率高告警
4API异常告警API发布失败、API检查异常时触发API异常告警
5健康检查失败告警API心跳检查失败、网关节点不通时触发健康检查失败告警

3、关键设计

3-1、异步外调

在这里插入图片描述

基于Netty实现异步外调主要有两种方式可以实现:

方式一:建立全局Map,上线文传递(不参与远程传输)requestId,响应时使用requestId进行映射上游信息方式二:直接将上游信息包装成Context进行上线文传递(不参与远程传输)

方式一需要独立维护一个全局映射表,同时需要考虑请求超时和丢失的情况,否则会出现内存不断增长问题。

3-2、外调链接池化

在这里插入图片描述

使用Netty实现API网关外调微服务时,因建立连接需要极度消耗资源,所以需要考虑将外调的链接进行池化管理,设计时需要注意以下几点:

初始化适当连接(过多过少都不适合)考虑连接能随流量增减而进行自动扩缩容取出的连接需要检查是否可用连接需要考虑双向心跳探测

3-3、释放连接

http的链接是独占的,所以在释放的时候要特别小心,一定要等服务端响应完了才能释放,还有就是链接关闭的处理也要小心,总结如下几点:

Connection:close

空闲超时,关闭链接

读超时关闭链接

写超时,关闭链接

Fin,Reset

写超时:writeAndFlush包含Netty的encode时间和从队列里把请求发出去即flush的时间。因此后端超时开始需要在真正flush成功后开始计时,这样才最接近服务端超时时间(还有网络往返时间和内核协议栈处理时间)

3-4、对象池化设计

针对高并发系统,频繁创建对象不仅有分配内存开销,还对gc会造成压力。因此在实现时,会对频繁使用的对象(如线程池的任务task,StringBuffer等)进行重写,减少频繁的申请内存的开销。

3-5、上下文切换

在这里插入图片描述

整个网关没有涉及到IO操作,但在IO编解码和业务逻辑都用了异步,是有两个原因

防止开发写的代码有阻塞业务逻辑打日志可能会比较多

在突发的情况下,但是我们在push线程时,支持用Netty的IO线程替代,这里做的工作比较少,这里由异步修改为同步后(通过修改配置调整),CPU的上下文切换减少20%,进而提高了整体的吞吐量,就是不能为了异步而异步,Zuul2的设计类似。

3-6、监控告警

协议层

攻击性请求。只发头,不发/发部分body,采样落盘,还原现场,并报警Line or Head or Body过大的请求。采样落盘,还原现场,并报警

应用层

耗时监控。有慢请求,超时请求,以及tp99,tp999等QPS监控和报警带宽监控和报警。支持对请求和响应的行、头、body单独监控响应码监控。特别是400和404链接监控。对接入端的链接,以及和后端服务的链接,后端服务链接上待发送字节大小也都做了监控失败请求监控流量抖动报警。流量抖动要么是出了问题,要么就是出问题的前兆

4、解决方案

在这里插入图片描述

4-1、Shepherd API网关

在这里插入图片描述

4-2、Mashape Kong

访问地址:https://github.com/Kong/kong

在这里插入图片描述

4-3、Soul

访问地址:https://github.com/Dromara/soul

在这里插入图片描述

4-4、Apiman

访问地址:https://apiman.gitbooks.io/apiman-user-guide/user-guide/gateway/policies.html

在这里插入图片描述

4-5、Gravitee

访问地址:https://docs.gravitee.io/apim_policies_latency.html

在这里插入图片描述

4-6、Tyk

访问地址:https://tyk.io/docs

4-7、Traefik

访问地址:https://traefik.cn

Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。 它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

在这里插入图片描述

功能特性

它非常快无需安装其他依赖,通过Go语言编写的单一可执行文件支持 Rest API多种后台支持:Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, 并且还会更多后台监控, 可以监听后台变化进而自动化应用新的配置文件设置配置文件热更新。无需重启进程正常结束http连接后端断路器轮询,rebalancer 负载均衡Rest Metrics支持最小化官方docker 镜像后台支持SSL前台支持SSL(包括SNI)清爽的AngularJS前端页面支持Websocket支持HTTP/2网络错误重试支持Let’s Encrypt (自动更新HTTPS证书)高可用集群模式

4-8、小豹API网关

访问地址:http://www.xbgateway.com

小豹API网关(企业级API网关),统一解决:认证、鉴权、安全、流量管控、缓存、服务路由,协议转换、服务编排、熔断、灰度发布、监控报警等。

在这里插入图片描述

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-05-04/164655.html,文章来源:网络cs,作者:利杜鹃,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇:Draw.io和Visio比较

下一篇:返回列表

文章评论