API调用路由
场景描述
假设某个客户有北京、上海2个机房,分别有对应的服务器,需要采用一套API平台+Gateway进行管理,希望调用方调用「北京的API」时,将请求分发至北京的机房。「北京的API」指的是此API是基于北京机房的数据源来建立的。
部署架构
部署架构如下图所示:
实现原理
一套API Web页面连接1套分布式的API Gateway和分布式的API Server:
前提条件:
- 在配置API时,需使用自定义URL的方式,将北京的API URL中拼接
/beijing/
一段,将上海的拼接/shanghai/
- 提前在Nginx配置转发策略,根据不同的URL路径进行转发,分别转发到不同机房的Gateway地址。
- Gateway本身为分布式架构,可以部分节点部署在北京机房,部分节点部署在上海机房。北京机房的Gateway节点,将访问北京机房的数据库(MySQL),上海机房访问的是上海的Oracle数据库。
调用时的响应流程:
① 某个用户调用API时,由Nginx转发请求,根据URL中包含beijing
或shanghai
来分发至不同机房的Gateway。
② 本机房内的API Gateway请求本机房的API Server或缓存库。
③ 本机房内的 Server请求本机房的数据库。
④ API结果的缓存,可配置一个共用的缓存库(可基于Redis或HBase),也可以在2个机房中分别配置缓存库,每个机房访问自己的缓存库。
note
- 如何自定义API的URL,可参考自定义API path
- API Gateway主要负责限流、鉴权、查询缓存库等,API Serve主要负责连接数据库查询数据。
danger
注意,2个机房内分别部署缓存库时,此缓存库只能用于API请求结果的缓存,不可用于API平台本身的缓存(例如鉴权信息),否则会导致API平台的信息在2个机房内不一致。