接口调度者——API 网关

本文涉及的产品
云原生 API 网关,700元额度,多规格可选
简介:

背景

我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的服务他们自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api 风格的接口来被 H5, Android, IOS 以及第三方应用程序调用。

在《浅入浅出消息队列》这一篇文章中,我提到了消息队列是方便服务与服务之间的通信解耦,如下图所示:

那么这时候问题来了,如果一个外部的应用(浏览器、App)要去访问这个大应用怎么办?

很简单啊,直接通过 HTTP 请求不就完了?

问题

真的这么简单吗?我们以淘宝的商品详情页为例:

如上图所示,这个页面包含了视频、库存、商品价格、商品评价等内容,这些数据都来自不同的微服务中,所以没办法像传统单体应用一样依靠数据库的 join 查询来得到最终结果,因此就需要多次调用以检索数据,如下图所示:

这就会引发几个严重的问题:

  • 不同的客户端设备可能需要不同的数据。Web,H5,APP,需要单独写一套 API
  • 多次客户端请求导致用户体验不佳。移动网络相较于服务于服务间的局域网,有更低的带宽和更高的延时,如果可以同时执行请求倒也还好,但如果客户端要按照顺序执行请求,就会让用户体验变得异常糟糕。
  • 缺乏封装导致前后端不协调。过分的拆分 API,会导致客户端和服务端过度耦合,再加上移动端 APP 的新版本迭代到每个手机用户时需要很久,这样会使后端很难更改服务的 API。

这样显然是不好的设计,因此,本期的“天降猛男”就出现了——API 网关。

API 网关

在介绍 API 网关前,我们先来介绍一个设计模式——外观模式。

外观模式(Facade Pattern)它向现有的系统添加一个接口,来隐藏系统的复杂性。类图如下所示:

之所以要在说 API 网关前说一下外观模式,是因为二者的设计理念是类似的。

和外观模式类似,API 网关封装了应用程序的内部架构,并为其客户端提供 API,他还可能具有其他职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。下图展示了客户端、API 网关和服务之间的关系。

所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。其出现也是侧面贯彻了软件工程中"高内聚,低耦合"的思想。

核心作用

API 网关负责请求路由、API 组合和协议转换。来自外部客户端的所有 API 请求首先会先转到 API 网关,后者再将请求路由到相应的服务。API 网关使用 API 组合模式处理其他请求,调用多个服务并聚合结果。同时他还可以在客户端友好的协议(例如 HTTP)与客户端不友好的协议之间进行转换。

请求路由

当 API 网关收到请求时,随机会查询路由映射,该映射将指定请求路由到哪个服务。例如,路由映射可以将 HTTP 方法和路径映射到服务的 HTTP URL,这一点和 Nginx 提供的反向代理的功能是一样的,后面我们也会对其进行一个比较。

既然有路由映射,那存放在哪就是一个问题了,我们需要为 API 网关设置一个路由映射的存储位置,通过可能会用 zookeeper 等作为注册中心来使用,文末我们也会提一下弊端。

API 组合

除去反向代理这个功能外,API 网关还提供了 API 组合的操作。以上面的淘宝详情页为例,如果我们单独获取视频、商品价格、商品评论等信息,需要发多个请求(getVideo,getPrice,getComments)。有了 API 网关后我们就可以将 API 接口组合起来,通过一次请求(getItemDetail)来获取需要的信息,如下图所示,这样可以极大的改善由于网络延时导致的差用户体验。

协议转换

API 网关可以为外部客户端提供 RESTful API,即使内部的服务使用混合的通信协议,例如 REST、gRPC 等。这样做的好处是,对于外部客户端而言,服务端更像是一个不可见的黑盒。

API 网关和 Nginx

本质上看 API 网关也是做了请求的转发,那既然 Nginx 也可以做请求转发,这两者有什么区别?

一张图就可以很好的理解了。

Nginx 做负载均衡时,考虑到 API 网关在系统中不止一个(以集群的方式做高可用),我们可以将 Nginx 至于 API 网关前,负责对 API 网关的负载均衡,然后再由网关决定进入到哪个真实的 web 服务器。
这样就可以让两者的分工更加明确:API 网关聚合服务,Nginx 请求转发

API 网关的优缺点

API 网关封装了应用程序的内部结构,使得客户端只需要同网关交互,而不必调用特定的服务。同时 API 网关为每一类客户端提供了特定的 API ,从而减少客户端与应用程序间的交互次数,简化客户端代码的处理。

但就和所有中间件一样,他们都存在一个共同的问题,API 网关的存在使系统增加了一个必须开发、部署和维护的高可用组件。如果这个组件没有处理好,那么 API 网关就会变成了应用的性能瓶颈。

而且为了暴露每个微服务,开发人员必须更新 API 网关,所以就有可能会搭配其他服务发现类的中间件使用,例如 zookeeper,这样就又引入了新的中间件。所以我们需要保证 API 网关的更新过程要尽可能地简单,否则为了更新网关,开发人员将不得不排队等待。

由此可见,API 网关也并不是一颗"银弹",我们在中间件的选择上还是需要结合项目的实际情况,万不可追求新颖就滥用中间件,适合自己的才是最好的。不过,API 网关虽然仍有不足,但对于大多数现实世界的应用程序而言使用 API 网关是合理的。

最后

以上就是本文的全部内容了,如果你觉得本文对你有所帮助,不妨点个赞关注一下,你们的支持是我原创的最大动力!

相关文章
|
1月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
1月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
1月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
2月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
407 152
|
1月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
1月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
2月前
|
人工智能 运维 监控
阿里云 API 聚合实战:破解接口碎片化难题,3 类场景方案让业务响应提速 60%
API聚合破解接口碎片化困局,助力开发者降本增效。通过统一中间层整合微服务、第三方接口与AI模型,实现调用次数减少60%、响应提速70%。阿里云实测:APISIX+函数计算+ARMS监控组合,支撑百万级并发,故障定位效率提升90%。
262 0
|
2月前
|
JSON 自然语言处理 监控
淘宝关键词搜索与商品详情API接口(JSON数据返回)
通过商品ID(num_iid)获取商品全量信息,包括SKU规格、库存、促销活动、卖家信息、详情页HTML等。
|
2月前
|
人工智能 API 监控
告别多接口拼凑!阿里云 API 模型聚合实现技术能力协同跃迁
API聚合整合400+国内外AI模型,统一接口、屏蔽差异,降低开发与维护成本,提升效率与系统稳定性,助力开发者高效应对多API调用困境。
324 0
|
2月前
|
人工智能 供应链 API
淘宝API商品详情接口全解析:从基础数据到深度挖掘
淘宝API商品详情接口不仅提供基础数据,更通过深度挖掘实现从数据到洞察的跨越。开发者需结合业务场景选择合适分析方法,利用AI标签、区块链溯源等新技术,最终实现数据驱动的电商业务创新。

热门文章

最新文章