介绍前面提到我们需要介绍一个API网关。事实上,无论是微服务、服务网格,还是云原生、数字化建设,API网关都是绕不开的话题。由于网上对API网关的介绍参差不齐,今天我们不再简单介绍API网关的基础知识和功能,而是切入点,聊一聊ESB、ServiceMesh、微服务和API网关的关系。01API网关的核心随着微服务场景的广泛使用,API网关也逐渐被大家所重视。聚合接口和服务,提供前端调用和业务封装,是API网关的主要场景。API网关是连接业务内外或系统前后端的桥梁。API网关除了建立通信和路由转发外,还承担了很多非业务功能,如安全、流控、过滤、缓存、监控等;在服务模式上,也会增加一些运营功能,比如API管理、计量计费、服务订阅等。可以看出我们可以在API网关上做很多文章,因为它接受和转发流量,这也是API网关的核心。这样的角色并不陌生。我前面两篇文章提到的ESB和ServiceMesh都有基于流量接收和转发功能的解决方案。同样的工具,放在不同的位置,有自己不同的表现形式,APIGateway就是这样一个工具。02API与ESB、ServiceMesh、微服务的关系ESB替代ESB的场景无需做深入介绍。ESB的核心是路由、转发、转换、流控。在ESB逐渐退出数字化舞台的同时,大部分企业也在思考如何逐步用替代品替代ESB。博云在多个项目中通过微服务框架和服务网格框架做了各种平滑。继承了ESB的模式和功能。同时涵盖了其原有的路由转发、协议转换、限流控制等功能。最直接的方案就是通过API网关来实现。ESB架构还承担了东西向服务之间的访问控制和南北向流量控制。使用API??网关的方案更加灵活。其可大可小、动态配置的灵活性、自助式消费模式更符合多变多样的新数字架构。如果规划得当,在取代ESB的同时,API网关也可以作为整个网络域,甚至整个企业级的网关,这是服务集中化的第一步。在服务网格中应用ServiceMesh的概念其实很容易理解。通过代理服务接管所有流量,同时通过代理服务实现非业务管理、监控等功能。那么这个代理服务(proxy)就是API网关的另一个应用场景。劫持流量,然后添加所需的自定义项。与其他场景相比,这里的网关功能并没有太大的变化,只是使用的位置有很大的不同。在ServiceMesh场景下,网关是一个非常小巧轻量级的代理单元,每个业务运营单元都会从代理单元开始,所以在ServiceMesh场景下,通常称之为边车(Sidecar)。也就是说ServiceMesh中的Sidecar是一个API网关应用。比如在Istio框架下,数据面的sidecar就是Envoy(一种基于C++语言的API网关)。值得一提的是,微服务网关就是微服务场景下的API网关。这个场景不就是最基本的应用吗?微服务网关其实也是API网关场景化改造的结果,比如SpringcloudGateway、Zuul等,两者都是基于netty框架用Java语言开发的微服务网关,主要用于Springcloud微服务场景。在微服务场景下,服务间通信的寻址需要依赖注册中心。微服务网关在进行路由转发时,还需要从注册中心获取上游地址。同时,微服务访问网关时,也可以直接通过注册中心进行搜索。因此,微服务网关需要符合微服务框架的注册和发现机制。03总结三个网关的核心是通信代理和转发。替换ESB时,带来协议转换的特性。与微服务对接时,增加注册中心同步功能。作为sidecar时,需要做流量劫持和控制面。沟通。另外还有API市场没有提到的场景。在该场景下,需要补充计量计费等功能。因此,根据不同的使用场景和不同的应用方式,可以根据API网关自由调整。在博云内部,至少涉及三个网关和各种场景的使用。第一种:企业级API网关,主要侧重于服务能力的提供,承担着整个企业的流量,因此对网关的性能要求极高。我们使用的组件都是基于openresty+lua的kong来解决的,在性能上保证了整个企业的交互压力。第二种:微服务的网关,主要是微服务的封装,但不是重点和难点。通过很多项目的交付,发现微服务的需求很容易满足,而过渡方案比较难。所谓过渡方案,是指非微服务应用需要与微服务应用统一管理时,通过API网关的sidecar方案。我们博云内部使用了SpringcloudGateway,在其上进行协议转换、服务检测等功能,实现单体应用和传统架构系统的统一管理和治理。第三种:服务网格,主要是数据平面的sidecar部分。与上面不同的是,上面的微服务框架已经基本确定为Springcloud,而服务网格原本使用的是博云内部的Istio框架。Istio框架下的Sidecar使用了Envoy。我们在Envoy上扩展ESB场景和传统架构兼容场景,增加协议支持、协议转换、数据采集、链接采集等功能,满足复杂的微服务改造需求。战而后战,兵法之规律,巧妙运用,尽在一心。API网关的技术已经接近成熟,在合适的场景下合理应用会起到很大的作用。
