巧用api网关构建大型应用体系架构

阿里云云栖号 阿里云云栖号     2022-12-06     243

关键词:

近期阿里云重磅发布了BizWorks一体化的云原生应用的开发和运营平台,内置阿里巴巴业务中台构建的最佳技术实践。BizWorks提供的产品能力,普遍适用于企业云原生应用高效开发以及企业业务能力沉淀和复用的场景。BizWorks提供业务架构师一整套的可视化业务建模工具,极大提升设计效率;同时,基于这套建模产出,形成代码框架,让业务中台复杂的变成过程简化为填空题,减低开发难度、提升研发效率,并在部署环节完成设计与实现的一致性校验,保证实现质量。BizWorks已经将API网关作为关键组件融入其中,并且基于API网关为用户提供能力开放平台。那么API网关是如何在BizWorks中起到作用?API网关在实际业务中又起到怎样帮助?本文就此展开详细说明。

阿里云API网关是阿里云自研的一款高性能网关,主要面向公有云用户提供API托管服务、流控、认证、安全等能标准的API网关能力。阿里云的API网关原生对接了阿里云的非常多的标准云产品,能够将阿里云的多款产品聚合起来为用户提供一套整体解决方案,提供业务数据完全打通的能力强大的整套基础设施。本文详细描述了以API网关作为中枢的应用体系架构,用户可以参考本文快捷地搭建一套服务于大型应用的功能全面的服务器侧架构。

1、应用体系架构的主要诉求

我们运营一个成熟的APP,对服务器端大致有五种类型的主要诉求:

  • 处理业务类请求:处理用户自己业务系统的业务,比如客户端向服务器端发送的用户注册、登录、获取用户资料等请求,Web客户端向服务器端发送获取商品描述等请求;
  • 处理文件类请求:这个比较好理解,就是客户端向服务器端发送上传、下载文件的请求,比如图片,语音等多媒体文件;
  • 处理数据统计类请求:运营平台需要统计一些运营数据,业务大屏需要展示一些统计数据等,需要服务器端将业务数据经过聚合等处理后通过接口形式提供给Web客户端;
  • 调用三方接口处理特定请求:比如调用三方的人脸识别接口,三方的天气查询接口等专业接口;
  • 业务可监控,遇到异常情况可以自动报警对业务运行情况的监控和报警是一个服务器端架构必须要考虑的方面,

这五类主要诉求都能通过API网关原生集成阿里云的其他标准产品来统一完成,下面我们来讲讲具体如何实现。

2、API网关作为中枢的应用体系架构

2.1、整体架构

上图是利用API网关构建一个标准的APP服务器端架构图,我们可以看到API网关处于业务流量入口,原生集成了多款阿里云的标准产品。所有客户端的请求先发送到API网关,由API网关根据用户配置的API元数据将请求路由到不同的类型的后端实现不同类型的业务分发,API网关和这些后端类型产品是原生集成,默认内网通信,大幅降低用户配置难度的同时也提高了通讯效率。同时经过API网关的API调用日志都会被API网关实时同步到用户的SLS日志、云监控和ARMS业务监控中,大幅增强用户的业务监控与报警能力。

2.2、统一的域名接入与业务分发

API网关提供实用的域名与证书托管能力,用户可以将自有的域名和对应的证书托管到API网关上,所有的API均可以通过统一的自有域名对外提供基于HTTPS的服务,包括业务类请求,文件类请求和数据类型请求,由API网关将不同类型的API请求分发到不同的后端服务中去。API网关的域名与证书托管在业务接入方面为用户提供了一系列增强能力:

  • API网关提供基于标准的跨域插件配置能力,用户可以在自有域名上为不同API配置不同的跨域策略,便于将自己的API提供给第三方或者自有的其他域名在浏览器上进行调用;
  • API网关除了可以托管用户的单域名,还支持托管泛域名及其对应的SSL证书,适配利用泛域名提供业务的平台型业务,比如阿里的个人网盘业务就是使用的API网关进行的接入,API网关可以将泛域名的自定义部分作为参数传递给后端服务;
  • API网关支持HTTP2的接入,可以大幅提高和客户端之间的通讯效率;
  • API网关基于用户的不通需求提供三套不通的SSL接入算法选项,用户可以根据自己的业务安全级别来选择不通的安全策略;
  • API网关同时支持HTTPS双向认证(Mutual TLS authentication),在API网关验证客户端发送的SSL证书是否由用户的根证书颁发的。

3、融合多款标准产品提供整套基础设施

API网关除了可以对接用户自己的后端服务,还可以原生对接多款标准云产品,包括函数计算,OSS,及一系列数据类型的产品,用户可以轻易在控制台进行后端服务进行配置后就能完成对接,提供多款产品融合的强大综合服务能力。API网关与这些后端产品默认使用高效的内网通信。

3.1、函数计算集成

使用API网关与函数计算提供服务是业内标准的Serverless实现,可以充分利用API网关强大的接入能力和函数计算的代码托管能力和弹性收缩能力搭建大规模业务的Serverless服务器侧架构。Serverless架构大幅降低了用户的运维成本,将更多精力聚焦到业务逻辑的开发整合上,大大缩短开发周期。2019 年 双11 过后,世纪联华快速上云,将线上核心业务改造为全 Serverless 架构的中台模式,采用“函数计算+API 网关+OTS”作为计算网络存储核心,弹性支撑日常和大促峰谷所需资源,轻松支撑 618 / 双11 / 双12 大促。

用户可以在API网关上直接配置已经在函数计算中定义的函数,直接选择对应的服务和其中的函数即可,配置非常简便:

3.2、OSS集成

去年API网关原生集成了OSS产品,用户可以使用API网关对其客户端提供文件管理API。OSS产品本身就对用户提供了文件管理API,为什么还要通过API网关去暴露用户的文件管理API呢,主要有以下几条原因:

  • 用户可以在API网关为每个文件、文件夹设置跨域策略,在Web类场景非常实用;
  • 用户可以通过API网关为每个文件、文件夹设置访问控制策略,可以规定某些文件只能通过鉴权后才能访问,API网关提供的鉴权方式比较丰富,除了AK签名方式,还提供了JWT方式和BasicAuth方式,能适应更多的实际使用场景;同时也可以为每个文件设置IP黑白名单策略;
  • API网关提供了后端文件缓存功能,用户可以通过这个功能将热点文件缓存起来,大幅提升文件访问效率;
  • 统一的日志、监控、报警管理;

用户可以在API网关上直接选择已经在OSS中创建的Bucket,API网关允许将整个Bucket配置成一个API,配置方式非常简便:

3.3、数据类型产品集成

用户通过自建的应用或者在函数计算上托管的服务对客户端提供业务类请求API,业务数据存储在阿里云的云数据库内。API网关目前已经与Dataworks,Quick BI等大数据分析平台进行原生集成,同时也和数据管理服务DMS进行了集成。用户可以将自己的业务数据通过大数据分析平台得到分析后的数据,然后通过API网关将这些数据能力通过API的形式开放给自己的运营平台或者开放给第三方。Dataworks直接将API网关嵌入到自己的产品中,用户在DataWorks生成数据API默认通过API网关对外开放能力。用户可以在API网关控制台看到这些API,并对其进行精细化管理,比如绑定流控、访问控制等插件来适配不同的业务场景。

3.3、云市场API类商品集成

API网关与阿里云的云市场做了深度集成,云市场的API类商品都是通过API网关对其消费者提供服务。用户可以将自己的能力、数据通过云市场的API类商品形式上架到阿里云的云市场来获取收益,也可以在云市场上购买三方API类商品,将这些三方公司开发的特定的能力集成到自己的APP中去,比如非常实用的人脸识别API,身份证识别和认证API,天气类API,IP识别API等等,这些通用能力有专业的公司去开发,直接借力这些三方公司的专业能力可以节省自己的研发成本而获得专业的服务。

API网关在为用户生成调用API的SDK的时候,将用户自己API和在云市场上购买的所有API聚合在一起后生成一个统一的SDK供用户下载使用。

3.4、SLS日志同步与监控报警

用户可以通过配置,将所有经过API网关的调用日志同步到用户自己的SLS日志服务中去,通过SLS日志服务您可以进行实时日志查询、下载、多维度统计分析等,您也可以将日志投递到OSS或者MaxCompute进行远期备份或深度分析。用户还可以使用这些日志作为日志审计的数据源,日志审计是法律刚性需求,是客户安全合规依赖的基础,是一些项目的必选项,可以轻松通过配置实现。用户除了可以在日志中看到调用的基本信息,包括域名、调用者身份、调用耗时,应答状态码等基本信息外,还可以配置记录整个请求和应答,便于排查问题。

用户将API网关的调用日志同步到SLS后,就可以在SLS中配置监控报警项了,配置内容比较简单:

3.5、集成云监控

API会自动将调用日志同步给阿里云云监控产品,用户可以在云监控产品上直接配置报警规则,监控报警的指标包括:Http应答码,API响应时间,请求次数,流入流量,流出流量。如果需要对该API分组下的所有API应用相同的报警规则,进入API分组详情页,点击详情页右上角的开启云监控:

云监控报警可设置多级报警,阈值处于不同区间时,对应Critical 、Warning、Info三个不同级别,不同级别通过不同渠道发送报警通知。

3.6、全链路追踪平台

用户可以配置将调用日志上传到阿里云链路追踪平台,分析全链路调用情况。链路追踪 Tracing Analysis 提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助用户提高开发诊断效率。

配置好之后,就可以在全链路追踪平台上看到整个调用链每个节点的耗时情况了:

4、API网关自身核心能力

API网关除了提供API元数据和API生命周期管理能力外,在API调用环节贡献了一些主流架构中不可缺少的能力,以下任何一项能力要想做好都非常麻烦。API网关在线上为数万公有云用户提供服务的同时,也将自己的基本功打磨到好用的程度。

4.1、流控

流控是标准网关的基本能力,保护后端服务避免遭受过载请求的情况。API网关使用标准的令牌桶算法为用户提供多维度流控能力,下面是API网关提供的流控能力细项:

  • 支持API级别流量控制
  • 支持秒、分钟、小时、天等时间维度流量控制
  • 支持基于APP/用户维度流量控制
  • 根据请求参数(UserId等)、系统参数(IP等)设置流控策略
  • 使用标准漏斗算法,可以选择被流控请求缓存模式或立即返回模式

4.2、鉴权

API网关为用户提供多种形式的鉴权能力:

  • 通过托管用户的Public JWK实现对请求进行JWT认证,并将JWT解密出来的claim作为参数传给后端;
  • 在API网关生成AK/SK并且与API建立授权关系,客户端使用AK/SK对请求进行签名后才能调用授权后的API
  • 支持BasicAuth认证方式

4.3、缓存

用户将后端返回的应答缓存在API网关服务层面,有效降低后端的负荷,增加平滑度:

  • 支持根据请求参数、Header等维度来生成、获取缓存
  • 允许客户端通过Cache-Control头来影响缓存策略
  • 遵守后端应答中的Cache-Control头的约定来处理缓存

4.4、安全

API网关为用户的API调用提供多项安全保障:

  • 支持API级别IP黑名单和白名单
  • 支持前后端支持签名验证来确保请求在链路上不被篡改
  • 具备防重放能力,拒绝重放请求
  • 根据请求参数或上下文,来执行条件判断,用于过滤不希望传递到后端的请求
  • 支持读取JWT解密出来的claim中的参数作为判断条件来过滤请求

4.5、性能

  • API网关连接数和RPS支持无限制扩容
  • 专享实例中,请求在API网关的平均耗时为1ms

5、API网关融入BizWorks成为能力开放平台

API网关嵌入到DataWorks中,同时承接了BizWorks南北向流量和东西向流量的治理工作。商业能力上架的时候,商业能力下的所有API的元数据会自动注册到API网关,由API网关向外部开放其能力。开发者登录到运营平台的开发者门户去浏览搜索所有商业能力,查看商业能力的API定义,下载商业能力下所有API对应的SDK。API的调用数据也会同步到SLS中,BizWorks的能力运营数据平台会去分析调用数据,将调用数据中的价值挖掘出来,供决策人员参考。

6、总结

API网关是阿里云的一款在线上平稳运行六年多的成熟云产品,为广大用户提供标准的高性能网关服务,它除了能提供API托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等API各个生命周期阶段,还集成了阿里云的众多标准云产品,能够将众多云产品连接起来搭建成一个功能强大的、省心的服务器侧架构。API网关后端原生集成了OSS、函数计算、Dataworks等数据分析类产品,满足用户业务处理,文件处理,数据分析等基本诉求。API网关将调用日志同步给了SLS,云监控,全链路追踪平台,满足用户多维度业务监控报警的需求。API网关同时融入了阿里云最新发布的强大的云原生应用的开发和运营平台BizWorks,成为BizWorks的能力开发平台的核心组件。

原文链接

本文为阿里云原创内容,未经允许不得转载。

高性能云服务器 精品线路独享带宽,毫秒延迟,年中盛惠 1 折起

springcloud构建微服务架构—服务网关过滤器

...器作用我们的微服务应用提供的接口就可以通过统一的API网关入口被客户端访问到了。但是,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都需要有一定的限制,系统并不会将所有的微服务接口都对它们开... 查看详情

基于springcloudgateway定制的微服务网关

在构建微服务的架构体系过程中,API网关是一个非常重要的组件。那我们应该怎样实现一个微服务API网关,本文主要介绍SpringCloudGateway的功能,以及如何基于SpringCloudGateway定制自己的网关。SpringCloudGatewaySpringCloudGateway提供的是一... 查看详情

API 网关在微服务架构中处理 Web 服务

】API网关在微服务架构中处理Web服务【英文标题】:APIGatewayhandlingWebservicesinaMicroserviceArchitecture【发布时间】:2017-03-1918:11:16【问题描述】:我有一个架构问题。我们正在将旧的单体应用转变为微服务架构。因此,我们计划识别... 查看详情

【分享】啥是api网关?大公司为啥都有api网关?

参考技术A在这篇文章中将我们一起来探讨当前的API网关的作用。一、API网关的用处API网关我的分析中会用到以下三种场景。二、API网关在企业整体架构中的地位一个企业随着信息系统复杂度的提高,必然出现外部合作伙伴应用... 查看详情

使用netty构建api网关实践之路

...变化,支持业务发展,并将框架升级为微服务架构。“API网关”核心组件是架构用于满足此些需求很多互联网平台已基于网关的设计思路,构建自身平台的API网关,国内主要有京东、携程、唯品会等,国外主要有Netflix、Amazon等... 查看详情

netcore体系-api-1ocelot-项目实战(代码片段)

首先,让我们简单了解下什么是API网关?   API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它... 查看详情

springcloud构建微服务架构服务网关

通过之前几篇SpringCloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了。比如下图所示:我们使用SpringCloudNetflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现... 查看详情

如何构建 API 服务应用架构

】如何构建API服务应用架构【英文标题】:HowtostructureAPIserviceapparchitecture【发布时间】:2020-09-2816:38:14【问题描述】:背景:我正在构建一个API服务应用。该应用程序与其他应用程序一样,您发送HTTP请求并接收响应。这似乎很... 查看详情

大型网站架构演变

...统高可用参考指标:2、架构演变历程2.1.第一阶段【单机构建网站】网站程序用到的开源框架如maven+spring+struct+hibernate、maven+spring+springmvc+mybatis;网站初期,我们经常会用单机跑所有的程序和软件。通常由appserver和DBserver组成,如... 查看详情

10分钟!构建支持10万/秒请求的大型网站

简介: 应用网关作为应用的统一接入层,它的发展和演进也是伴随着应用架构的变化,大家都知道企业应用从最早期SOA时代发展到微服务的时代。在SOA时代,传统的企业服务总线承担了企业应用的统一接入层ÿ... 查看详情

10分钟!构建支持10万/秒请求的大型网站

简介:应用网关作为应用的统一接入层,它的发展和演进也是伴随着应用架构的变化,大家都知道企业应用从最早期SOA时代发展到微服务的时代。在SOA时代,传统的企业服务总线承担了企业应用的统一接入层;... 查看详情

java的三大体系架构:深入剖析java的三大体系架构,包括javasejavame和javaee等

...且安全的服务器端Java应用程序。JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信 查看详情

如何构建以应用为核心的运维体系

在微服务的架构模式下,我们的运维视角一定转到应用这个核心概念上来,一切要从应用的角度来分析和看待问题。微服务架构一般都是从单体架构或分层架构演进过来的。软件架构服务化的过程,就是我们根据业务模型进行细... 查看详情

架构师必读书单,收藏自用

文章目录一、构建架构知识体系1、《架构之道:软件构建的设计方法》2、《架构师的自我修炼》3、《软件架构:架构模式、特征及实践指南》4、《架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2... 查看详情

springcloud构建微服务架构服务网关

通过之前几篇SpringCloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了。比如下图所示:alt我们使用SpringCloudNetflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实... 查看详情

dubbo想要个网关怎么办?试试整合springcloudgateway(代码片段)

一、背景在微服务架构中API网关非常重要,网关作为全局流量入口并不单单是一个反向路由,更多的是把各个边缘服务(Web层)的各种共性需求抽取出来放在一个公共的“服务”(网关)中实现,例如安全认证、权限控制、限流熔断... 查看详情

用于事件驱动架构的 API 网关

】用于事件驱动架构的API网关【英文标题】:APIgatewayforevent-drivenarchitecture【发布时间】:2017-09-2118:36:37【问题描述】:我们正在尝试将我们的单体核心拆分为微服务,并添加一些使用消息系统(例如Kafka)相互连接的新服务。下... 查看详情

大型网站架构演变和知识体系

...讲述,个人感觉看后还是很有感触的:之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更 查看详情