《架构修炼之道》——第一章-网关之道

api网关

1. 概括

第一章主要介绍了什么是API网关,不同架构场景下网关的功能,API的生命周期,网关的理论基石“泛化调用”,网关中的管道概念,介绍了管道的概念,管道的实现,管道的优缺点,又引申介绍了责任链模式,介绍了网关宕机的三种情况:cpu满载、磁盘满载、网路异常,又引申介绍了servlet3中异步从而实现全异步的网关,最后介绍了网关的脱库与缓存,概括了网关的七大功能:降级、限流、熔断、线程池隔离、管道技术,配置热更新和异步。

2. 什么是网关

网关是将所有的API的调用统一接入API网关层,由网关负责接入和输出。

网关与代理的区别:代理是纯粹的数据透传,协议不会发生变化;网关在数据透传的背景下,还会涉及协议的转换。

API网关的核心功能包括:统一接入、协议适配、流量管控与容错、以及安全防护。

3. API的生命周期

设计→构建→文档→测试→分析→运行→下线

4. 泛化调用

这里的泛化指的是一个动作,不使用具体的POJO,直接使用Map这个集合对象来装配对象。使用泛化调用以后,我们不需要接口提供方的Jar包即可实现远程调用。

5. 管道技术

这里的管道不是指操作系统的管道,而是一个抽象的概念,就是把在API网关内的线性的功能(如:参数校验、黑白名单、流量限制、接口调用等)都等封装成一个管道,按照顺序组织起来,消息按照管道池里的排列顺序进行。

使用管道的优点在于:代码层次更加清晰,省去了大量的if-else逻辑判断;同时可以对这些管道进行热插拔。

管道的实现思想和责任链模式类似。

6. 责任链模式

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。

在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

责任链模式类图

责任链模式与管道技术的区别在于:管道技术更加灵活,它是我们自定义的一种方式,责任链的使用相对受限。

7. 传统网关宕机的三种情况

7.1 CPU满载

cpu利用率:程序运行时期间实时占用的cpu百分比。

cpu负载:一段时间内正在使用和正在等待使用的cpu平均任务数(top命令)

API网关的访问量大且依赖系统多,如果调用的API性能突然变差,在大访问量的情况下,线程数会逐渐升高,直至将cpu的资源耗尽,蔓延至整个网关集群,这就是雪崩效应

7.2 磁盘满载

当网关API中日志打印不合理的情况下,一旦API出错,就会有大量的error日志写入磁盘,导致磁盘资源耗尽。

7.3 网络异常

网络异常将导致API网关返回给用户时间变长,调用时间变长,这会导致网关系统的线程数增多,如果短时间内不能恢复,则整个网关集群内的cpu都将资源耗尽。

8. 全异步网关

对于一个API网关来说,它属于I/O密集型场景,我们使用全异步网关使我们无需再关注CPU和网络,全异步网关下线程数不再会成为网关性能的瓶颈。

9.脱库和缓存

这里指的脱库实际上是指的脱离传统数据库如MySQL,使用缓存如Redis,并且利用Redis的过期失效功能实现多级缓存或者使用缓存持久化实现多级缓存。





©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容