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的过期失效功能实现多级缓存或者使用缓存持久化实现多级缓存。