巧用API网关构建大型应用体系架构
简介: 近期阿里云重磅发布了BizWorks一体化的云原生应用的开发和运营平台,内置阿里巴巴业务中台构建的最佳技术实践。它已经将API网关作为关键组件融入其中,并且基于API网关为用户提供能力开放平台。那么API网关是如何在BizWorks中起到作用?API网关在实际业务中又起到怎样帮助?本文就此展开详细说明。
近期阿里云重磅发布了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的能力开发平台的核心组件。
巧用API网关构建大型应用体系架构的更多相关文章
- 微服务系列(二):使用 API 网关构建微服务
编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨:微服务架构是如何影响客户端到服务端的通信,并提出一种使用 API 网关的方法. 作者介绍:Chris Richardso ...
- 0102-使用 API 网关构建微服务
一.移动客户端如何访问这些服务 1.1.客户端与微服务直接通信[很少使用] 从理论上讲,客户端可以直接向每个微服务发送请求.每个微服务都有一个公开的端点(https ://.api.company.n ...
- 怎么用API网关构建微服务
选择将应用程序构建为微服务时,需要确定应用程序客户端如何与微服务交互.在单体应用程序中,只有一组端点.而在微服务架构中,每个微服务都会暴露一组通常是细粒度的端点.在本文中,我们将讨论一下这对客户端与应 ...
- 使用 API 网关构建微服务-2
「Chris Richardson 微服务系列」使用 API 网关构建微服务 Posted on 2016年5月12日 编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨: ...
- 使用API网关构建微服务
使用传统的异步回调方法编写API组合代码会让你迅速坠入回调地狱.代码会变得混乱.难以理解且容易出错.一个更好的方法是使用响应式方法以一种声明式样式编写API网关代码.响应式抽象概念的例子有Scala中 ...
- API网关+Kubernetes集群的架构替代了传统的Nginx(Ecs)+Tomcat(Ecs)
API网关为K8s容器应用集群提供强大的接入能力_最佳实践_API 网关-阿里云 https://help.aliyun.com/document_detail/71623.html 在最后一节,我们 ...
- Chris Richardson微服务翻译:构建微服务之使用API网关
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- 谈谈微服务中的 API 网关(API Gateway)
前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...
- 微服务中的 API 网关(API Gateway)
API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...
- 服务中的 API 网关(API Gateway)
我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...
随机推荐
- Ambiq Micro-AMA3B2KK-KBR芯片可穿戴产品解决方案开发之RTC时钟
一 RTC RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片.绝大多数mcu芯片都集成了这个功能.在可穿戴产品中,时间往往是非常重要的因素,怎么让时间保持一直在运行,那就是 ...
- vim下删除swp文件
vim下删除swp文件 几个选项的内涵 [O]pen Read-Only 只读的方式打开 (E)dit anyway 编辑模式打开,但是不会载入存盘的内容 (R)ecover 编辑模式打开并且加载暂存 ...
- 3DCAT实时渲染云在虚拟展会中的应用
随着互联网技术的不断发展,实时3D可视化技术在日常生活中应用越来越广泛,越来越多的行业开始转向线上.今年受新冠肺炎疫情影响很多展会都无法在线下举办,而3d线上虚拟展会采用了全新的在线展示产品方式,将展 ...
- 3DCAT首届行业生态交流会|爱智慧科技有限公司CEO梁新刚:工业元宇宙的”形“与”神“
2021年12月17日下午,由深圳市瑞云科技有限公司主办,深圳市虚拟现实产业联合会协办的 云XR如何赋能元宇宙--3DCAT实时云渲染首届行业生态合作交流会 圆满落幕.此次活动围绕"云XR如 ...
- 记录--uni-app App端半屏连续扫码
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本文用一个简单的 demo 讲解 App端 半屏连续扫码 的实现方式,包括(条形码.二维码等各种各样的码). 我会从实现思路讲起,如果你比 ...
- 记录--这样封装列表 hooks,一天可以开发 20 个页面
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这样封装列表 hooks,一天可以开发 20 个页面 前言 在做移动端的需求时,我们经常会开发一些列表页,这些列表页大多数有着相似的功能: ...
- C# 日志监控软件 基于 FileSystemWatcher 02
基于上一篇<C# 日志监控软件 基于 FileSystemWatcher>改进 using System; using System.Collections.Generic; using ...
- 记一次 .NET某防伪验证系统 崩溃分析
一:背景 1. 讲故事 昨晚给训练营里面的一位朋友分析了一个程序崩溃的故障,因为看小伙子昨天在群里问了一天也没搞定,干脆自己亲自上阵吧,抓取的dump也是我极力推荐的用 procdump 注册 AED ...
- Scala 函数至简原则
(1)return 可以省略,Scala 会使用函数体的最后一行代码作为返回值(2)如果函数体只有一行代码,可以省略花括号(3)返回值类型如果能够推断出来,那么可以省略(:和返回值类型一起省略)(4) ...
- #Multi-SG#HDU 3032 Nim or not Nim?
题目 有\(n\)堆石子,每次可以从一堆中取出若干个或是将一堆分成两堆非空的石子, 取完最后一颗石子获胜,问先手是否必胜 分析 它的后继还包含了分成两堆非空石子的SG函数,找规律可以发现 \[SG[x ...