什么是API网关
API网关(API Gateway),从本质上讲是一个技术产品,旨在提供API托管服务,覆盖设计、开发、测试、发布、运营、运维监测、安全管控、下线等API各个生命周期阶段,帮助开发人员快速建设以API为核心的系统架构。常见的应用场景有:(1)构建集成中台,即利用API网关丰富的适配组件和强大集成能力,实现复杂业务系统的统一调用及管理;(2)构建多种类技术架构,融合Serverless架构、微服务架构、前后台分离架构等;(3)构建API生态,以企业核心业务打通上下游企业的数据流,帮助企业实现从传统供应链到价值链转型。
应运而生的API网关
在从中国制造到中国智造的创新之路上,大量的传统经济实体正在逐步逐步地数字化转型,撇开组织意识形态的数字化转型不谈,聚焦在传统IT领域的数字化转型,基本的策略就是ABC战略,即AI、BigData和Cloud,而这三者又以Cloud作为基础架构必须为先行者,且最容易落地,加之企业的数据安全考虑等多种因素,在Cloud战略层面,实体经济绝大部分都选择混合云架构,传统制造型、IoT物联网等应用会选择落地在企业专有云(Azure Stack/Ali Apsara等)或者私有云(Openstack/vmWare等)。而面向C端用户、营销领域等应用因为必须面对激烈的市场竞争环境,所以往往会选择能力成熟度更高的公有云落地。在ABC战略之下,企业的数字化转型的一个重要举措就是从服务2b到2c的延展,其核心思想就是缩短供应链的链路,减少中间成本,因此传统的monolithic应用在2c应用场景下,无论是并发、吞吐量还是可用性都在全面经受挑战,此时微服务应运而生。而2c转型直白一点说就是直面消费者,移动app就成为了2c服务的最重要的触点。前后端的绝对分离,要求的就是后端服务的暴露的安全性管控的同时又能方便地进行管理。此时API网关就在微服务和移动app之间构建起来了一个最重要的分层,而对于一个实体经济而言API网关也必然面临着混合云架构的挑战。
双擎微服务的最佳搭档
上一段落已经简述了微服务如何催生了API网关,关于这一点从两大微服务体系的崛起过程也可以看出,Dubbo2012年开源的时候主要以阿里的大厂效应,被众多互联网公司推崇,当时也没有明显地提出微服务网关的概念,基本上都是自家开发open api。2014年微服务的概念被Martin Fowler提到以后,Pivotal团队以Spring Boot为核心简化开发之后对分布式组件进行了整合(服务发现/注册,路由,负载均衡等),并要求所有请求都统一通过API网关(Zuul)来访问内部服务,网关接收请求后,从Eureka获取可用服务,由Ribbon进行负载均衡后,分发到后端的具体实例,微服务之间通过Feign进行通信处理业务,至此微服务体系的脚手架逐步被众多Spring开发者所接受。而API网关之于Dubbo或者Spring Cloud而言都是一个毋庸置疑的必要组件,否则无法实现严格的前后端分离、无法满足安全需求等,当然Dubbo的微服务网关时至今日始终没有全家桶的套餐,在Dubbo官网的生态系统上可以看到API网关有三个:Kong/Dubbo Proxy/zuul。
Figure-1 Dubbo生态系统中API GatewaySpring Cloud已经放弃了Zuul,虽然Netflix升级为Zuul2,同时Spring Cloud也更推荐Spring Cloud Gateway,同时支持整个Sping生态,这个命名颇有些耍流氓的感觉,正如Zippo。Dubbo Proxy对于开发而言需要大量的代码,其纯Code风格正在变得越来越不亲民,正其时Kong大行其道。
Figure-2 Spring Cloud全家桶典型架构目前由于Spring的生态较好,使用Kong直接作为微服务网关无法直接对接注册中心(无论是zookeeper还是Nacos或者etcd都需要独立开发Plugins),因此直接将Kong作为微服务网关的案例还较少,但是基于Nginx的Kong在性能上无论是理论还是实测其tps在同等硬件消耗的条件下,都好于zuul或者spring cloud gateway。通过插件开发统一对接了Dubbo的ZK注册中心和Spring Cloud的Nacos注册中心,将异构的微服务统一注册到Kong API网关,同时减少了Http请求链路长度。
Figure-3 双擎微服务API网关Monolithic应用的救赎
这边2C应用的微服务建设的如火如荼,好似传统单体应用可以偏安一隅,然而实际上2C应用的触点的直接下一层是微服务不错,也有效解决了并发、高可用等问题,但是不可避免地要将部分请求下探到传统单体应用,比如BOM、主数据等。而反应迟钝的传统2B应用此时才发觉大火已经烧到了家门口,匆忙之间进行微服务化显然是不现实的,如何化解燃眉之急呢?
场景一:利用API网关的快速DB2API功能,实现数据库到API的直接转化,同时注册到Kong API网关,根据请求方分配不同的access id,对不同的access id进行一定级别的限流,可以快速满足2C的快速应用场景。
场景二:直接将原有单体应用的接口(SOAP居多)注册到Kong API网关,同样根据请求方分配不同的access id,对不同的access id进行一定级别的限流,可以防止单体应用系统应用负载过多而影响其正常业务操作。
上述两个场景可以以最小的代价,最快的速度响应2C应用的急速扩张,从而留下喘息的时间进行微服务改造、接口改造、资源扩充等。
混合多云下的多面手
作为一个API网关,既可以直接作为微服务网关用,亦可以兼容异构的微服务体系,同时将传统数据库变现API快速满足业务需求,单体应用接口上架API网关防止上游请求击穿传统应用服务。下图是一个混合云环境下分布式微服务API网关为中心的最佳实践。主要要素解释如下:
1、各类中间件:缓存、消息、数据库等
2、基于适配原则的中间适配代码层
3、微服务网关、注册中心、配置中心等关键组件
4、统一的管理平台:
4.1、API内管平台:前后端开发和测试的协作平台,面向全生命周期的API实践
4.2、统一日志平台:通过同构的分布式网关将不同数据中心的日志回传至统一的日志平台
4.3、统一链路追踪平台:提供从前后端分离的网关到链路底层的追踪平台
Figure-4 混合云API架构微服务网关最佳实践写在最后
企业级的API网关解决方案往往不能像互联网那样干脆利索,因为企业有着悠久辉煌的历史,自然包袱也是少不了的,长久以来作为成本中心的企业IT,在全面进行数字化转型的过程中,必然不能太过于激进,兼容并蓄才能更有落地性,因此API网关在企业的实践需要考虑更复杂的应用场景,既要面向未来的技术趋势,也要兼顾到遗留系统的自然延续性。
网友评论