各种企业级API⽹关的设计对⽐
1.1API⽹关背景介绍
API Gateway(APIGW / API ⽹关),顾名思义,是出现在系统边界上的⼀个⾯向API的、串⾏集中式的强管控服务,这⾥的边界是企业IT系统的边界,主要起到隔离外部访问与内部系统的作⽤。在微服务概念的流⾏之前,API⽹关的实体就已经诞⽣了,例如银⾏、证券等领域常见的前置机系统,它也是解决访问认证、报⽂转换、访问统计等问题的。
API⽹关的流⾏,源于近⼏年来,移动应⽤与企业间互联需求的兴起。移动应⽤、企业互联,使得后台服务⽀持的对象,从以前单⼀的Web应⽤,扩展到多种使⽤场景,且每种使⽤场景对后台服务的要求都不尽相同。这不仅增加了后台服务的响应量,还增加了后台服务的复杂性。随着微服务架构概念的提出,API⽹关成为了微服务架构的⼀个标配组件。
1.2⽹关的⼏种使⽤场景
我司王延炯博⼠的⽂章中,提到了⽹关的⼏种使⽤场景:
1、⾯向Web App的⽹关
这类场景,在物理形态上类似前后端分离,此时的Web App已经不是全功能的Web App,⽽是根据场景定制、场景化的App。
2、⾯向MobileApp的⽹关
这类场景,移动App是后端Service的使⽤者,此时的APIGW还需要承担⼀部分MDM(此处是指移动设备管理,不是主数据管理)的职能。
3、⾯向PartnerOpenAPI的⽹关
这类场景,主要为了满⾜业务形态对外开放,与企业外部合作伙伴建⽴⽣态圈,此时的API GW需要增加配额、流控、令牌等⼀系列安全管控功能。
4、⾯向PartnerExternalAPI的⽹关
这类场景,主要是为了满⾜企业⾃⾝业务的需要,实现对企业⾃有业务的映射。⼀个典型的例⼦就是使⽤「合作⽅账号登录」、「使⽤第三⽅⽀付平台⽀付」等等。此时的APIGW就需要在边界上,为企业内部Service 统⼀调⽤外部的API做统⼀的认证、授权、以及访问控制。
5、⾯向IoTSmartDevice的⽹关
这类场景主要在传统企业,尤其是⼯业企业,传感器、物理设备从⼯业控制协议向IP转换,导致物理链路上会存在⼀部分公⽹链路。此时的API GW 所需要满⾜的「内外兼修」的双向数据流,设备⼀般通过⼀个「客户侧」的集中⽹关在和企业的接⼊⽹关进⾏通信。
在我们讲的微服务架构下的API⽹关,⼀般指的是前两种使⽤场景。即,主要是把企业内部的API能⼒,暴露给其他应⽤或合作伙伴使⽤。
⼆、⽹关的作⽤和价值
⽹关层作为客户端与服务端的⼀层挡板,主要起到了三⼤类作⽤:
第⼀类作⽤是隔离作⽤,作为企业系统边界,隔离外⽹系统与内⽹系统。
第⼆类作⽤是解耦作⽤,通过解耦,使得微服务系统的各⽅能够独⽴、⾃由、⾼效、灵活地调整,⽽不⽤担⼼给其他⽅⾯带来影响。
第三类作⽤是脚⼿架作⽤,提供了⼀个地点,⽅便通过扩展机制对请求进⾏⼀系列加⼯和处理。
2.1内外的隔离
企业为了保护内部系统的安全性,内⽹与外⽹都是隔离的,企业的服务应⽤都是运⾏在内⽹环境中,为了安全的考量,⼀般都不允许外部直接访问。API⽹关部署在防⽕墙外⾯,起到⼀层挡板作⽤,内部系统只接受API⽹关转发过来的请求。⽹关通过⽩名单或校验规则,对访问进⾏了初步的过滤。相⽐防⽕墙,这种软件实现的过滤规则,更加动态灵活。
2.2多⽅的解耦
在微服务架构下,整个环境包括服务的提供者、服务的消费者、服务运维⼈员、安全管理⼈员等,每个⾓⾊的职责和述求都不同。例如:服务消费者已经需要提出⼀些新的服务需求,以快速应对业务变化;服务提供者,作为业务服务的沉淀⽅,希望保持服务的通⽤性与稳定性,很难应对快速的变化。有了API⽹关这⼀层,可以很好的解耦各⽅的相互依赖关系,让各⽅更加专注⾃⼰的⽬标。
1、解耦功能与⾮功能
企业在把服务提供给外部访问时,除了实现业务逻辑功能外,还⾯临许多⾮功能性的要求。例如:需要防范⿊客攻击,需要应对突发的访问量、需要确认⽤户的权限,需要对访问进⾏监控等。这些⾮功能逻辑,不能与业务逻辑的开发混在⼀起,需要有专业的⼈员甚⾄专业的团队来处理。
2、解耦客户端与服务提供者
客户端与服务提供者分属于不同的团队,⼯作性质要求也不相同。对于服务提供者来说,他主要的职责是对业务进⾏抽象,提供可复⽤的业务功能,他们需要对业务模型进⾏深⼊的思考和沉淀,不能轻易为了响应外部的需求⽽破坏业务模型的稳定性。⽽业务的快速变化,⼜要求企业快速提供接⼝来满⾜客户端需求。这就需要⼀个中间层,来对服务层的接⼝进⾏封装,以及时响应客户端的需求。
通过解耦,服务层可以使⽤统⼀的接⼝、协议和报⽂格式来暴露服务,⽽不必考虑客户端的多种形态。
3、⽹关层是否需要实现服务的编排?
在介绍API⽹关的⼀些⽂章中,提到了⽹关层的服务编排能⼒。从解耦的⾓度出发,服务的编排不适合在⽹关层进⾏。对服务的编排,其实是提供了⼀种业务能⼒,如果把服务的编排放在了⽹关层,实际上是把⼀部分业务能⼒放在了⽹关层,这样⼀来,服务层、⽹关层都有⼀些业务能⼒,造成团队职责的不清,也不利于业务能⼒的沉淀。
2.3插件的脚⼿架
⽹关层除了请求的路由、转发外,还需要负责安全、鉴权、限流、监控等。这些功能的实现⽅式,往往随着业务的变化不断调整。例如权限控制⽅⾯,早期可能只需要简单的⽤户+密码⽅式,后续⽤户量
⼤了后,可能会使⽤⾼性能的第三⽅解决⽅案。⼜例如,针对不同的监控⽅案,需要记录不同的⽇志⽂件。
所以,这些能⼒不能⼀开始就固化在⽹关平台上,⽽应该是⼀种可配置的⽅式,便于修改和替换。这就要求⽹关层提供⼀套机制,可以很好地⽀持这种动态扩展。
2.4带来的好处
这⾥总结下⽹关的价值:
⽹关层对外部和内部进⾏了隔离,保障了后台服务的安全性。
对外访问控制由⽹络层⾯转换成了运维层⾯,减少变更的流程和错误成本
减少客户端与服务的耦合,服务可以独⽴发展。通过⽹关层来做映射。
通过⽹关层聚合,减少外部访问的频次,提升访问效率。
节约后端服务开发成本,减少上线风险。
为服务熔断,灰度发布,线上测试提供简单⽅案。
便于扩展。
三、企业级API⽹关需要具备的条件
3.1微服务架构下,企业API⽹关的定位
API⽹关作为对外提供服务的⼊⼝,就像企业服务的⼤门。⼀⽅⾯,要有⾜够的能⼒,应对⼤量的对外访问,另⼀⽅⾯,还要给对内的服务提供⼀定的安全保障。
除此之外,企业提供的API服务多种多样,API⽹关要能够对这些API的全⽣命周期进⾏便捷的管理,例如服务发布、调整、下架、计费、监控等。3.2企业环境下,API⽹关需要考虑哪些要素
1、安全性问题
企业在把服务暴露给外部使⽤时,⾸先要确保服务使⽤的安全,防⽌外部的恶意访问对公司业务的影响,特别是涉及交易⽅⾯的服务,更是要全⾯考虑安全性。为确保安全,需要考虑在通讯链路的建⽴、通讯数据的加密、数据的完整性、不可抵赖性等⽅⾯。
2、性能问题
作为企业API的⼊⼝,所有的请求都会经过API⽹关进⾏转发,可想⽽知,对API⽹关的访问压⼒是巨⼤的,有的⽹站甚⾄达到每分钟上千万的访问量。特别是在⼀些互联⽹企业,海量的移动终端每时每刻都需要与后端的服务进⾏交互,如果不能保证⽹关的⾼性能,企业在⽹关层需要投⼊⼤量的设备和成本。曾在⼀家互联⽹公司发⽣过,由于⽹关性能问题,⽹关的机器数量,需要与后台服务器的数量保持同步增长。这种情况显然是企业服务忍受的。
3、⾼可⽤问题
API⽹关作为逻辑上的单点,⼀旦发⽣问题,将造成企业服务的不可⽤,对企业来说可能造成的致命的影响。计算短时间的不可⽤,也会给企业带来直接的经济损失。所以,如何保证API⽹关的7*24⼩时的稳定运⾏,⽹关的⾃动伸缩、API的热更新等问题,都是企业级的⽹关需要考虑的。
4、扩展性问题
前⾯说到,企业⽹关提供了⼀个脚⼿架,⼀些⾮功能性的问题,例如⽇志、安全、负载均衡策略、鉴权等。这些插件会随着企业业务规模等的变化进⾏不断的强化与调整。这就需要⽹关层提供这样⼀种机制,使得可以灵活地进⾏这些调整和变化,⽽不⽤频繁对⽹关层进⾏改动,确保⽹关层的稳定性。
5、API⾼效运维的问题
nginx和网关怎么配合使用
API在上线、发布过程中,都需要涉及到⽹关层的配合,例如,需要⽹关层知道API发布的地址,API的接⼝形式、报⽂格式,也需要⽹关层对后台API进⾏封装。在API调整后,需要作出相应的修改。所以,API⽹关设计时,需要明确⽹关层与服务层的职责切分与协作模式,使得API的管理、发布更加⾼效。
6、API全⽣命周期管理的问题
API服务的全⽣命周期,包括服务的开发、测试、上线发布;服务使⽤的申请、开通;服务分类分级别的管理、服务使⽤情况的监控、计费等等。
⼀个企业可能会暴露成百上千个API,⽇常也会经常进⾏API的发布、升级、改造、下架等操作。对不同的服务,不同的访问者,需要提供不同的服务访问策略。有的商业API公司,还需要对API的使⽤进⾏付费。所以,与API⽹关配套的,需要⼀套完善的⾃助系统,提供给服务的提供者、管理者、使⽤者,来对服务的发布、使⽤、和运营。
四、业界常⽤的API⽹关⽅案
业界API⽹关解决⽅案有很多,包括商业的、开源的。例如Tyk、Kong、api-umbrella、apiaxle、Netflix zuul、WSO2 API Manager、clydeio 等。下⾯介绍三种常见的 API ⽹关⽅案。
4.1Nginx+ Lua
Nginx是由IgorSysoev为俄罗斯访问量第⼆的Rambler.ru站点开发的,⼀个⾼性能的HTTP和反向代理服务器。2012年,Nginx荣获年度云计算开发奖,并成长为世界第⼆⼤Web服务器。全世界流量最⾼的前1000名⽹站中,超过25%都使⽤Nginx来处理海量的互联⽹请求。
Nginx基本功能:
静态web资源服务器,能够缓存打开的⽂件描述符
⽀持http/imap/pop3/smtp的反向代理;⽀持缓存、负载均衡
⽀持fastcgi(fpm)
模块化,⾮DSO机制,⽀持过滤器zip压缩,SSI以及图像⼤⼩调整
⽀持SSL
Nginx通过插件的扩展功能:
基于名称和IP的虚拟主机
⽀持keepalive的保持机制
⽀持平滑升级
定制访问⽇志,⽀持使⽤⽇志缓存区提⾼⽇志存储性能
⽀持url rewrite
⽀持路径别名(root或alias指定)
⽀持基于IP以及⽤户的访问控制
⽀持传输速率限制,并发限制
Nginx在性能和⾼可⽤性上的表现:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。