分布式-api网关
Posted 这才是技术啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式-api网关相关的知识,希望对你有一定的参考价值。
前几天讲了和。这次从头(api网关)开始讲一下分布式架构。
为什么需要api网关
上次讲过了分布式系统的本质就是将一个大型系统拆分成各个模块,每个模块只负责单一的功能,并且单独部署,通过约定的通讯协议来交互。
这里举一个电商的栗子:
用户进入购物车,点击下单按钮,这里涉及到需要从商品模块查询生成订单的商品->通过商品查询运营模块里的优惠信息->在订单模块中生成订单。
我们有两种方式完成这个操作:
1、由APP或是WEB发起查询商品的请求->发起查询优惠信息的请求->将两次请求的结果组装->请求生成订单
这样做最大的问题是客户端需要维护每个请求的路由规则和数据拼装逻辑。
2、由APP或是WEB发起生成的请求->订单模块通过RPC接口调用商品模块->订单模块通过RPC接口调用运营模块->订单模块拼装数据返回结果
这样做最大的问题是各模块间的依赖关系将变得非常复杂,服务难以治理。依赖关系变得复杂后,一个模块的错误,很容易导致整个系统的雪崩。
我的理解api网关就好像大户人家的管家,可以帮主人安排各种琐事,什么时候叫主人起床,今天主人的行程规划,今天晚饭吃什么,让哪个女仆给主人暖床...
api网关可以来协调我们的系统如何来处理和响应客户端的一个请求。
api网关可以降低客户端和服务端依赖关系的复杂性。api弯管可以保存所有客户端的路由规则,由api网关根据路由规则向后端模块一一发起请求,并组装数据后返回客户端。
api网关主要有哪些作用
1、数据拼装和路由规则。上述说过了。
2、身份权限验证。当你的系统越来越庞大的时候,你会发现接口的权限验证越来越细化,有专为内部系统提供的接口,有为合作伙伴提供的接口,有开放平台公开的接口。而模块本身不应该去为这些事情操心,api网关可以在源头上做到控制。
3、流量控制。当一个模块提供的服务已经不可用的时候,如果这个模块还调用了其他模块,继续请求的话就会级联故障,我们通常把它叫做雪崩。api网关可以清楚的判断出哪些模块已经不可用,对于不可用模块,api网关可以不去请求而是直接发送固定的返回信息,就好像dubbo的mock模式。
4、灰度。也许你的系统刚经历了一次大规模的版本更新,你不想将所有的用户更新到新版本上,这样风险太大。通过api网关,你可以引入指定的流量到你的新版本,在新版本稳定后,你再将所有流量都切换过来。这也就是我们常说的,灰度发布。
有哪些好用的开源api网关
- APIAxle ( http://apiaxle.com/ )
- Tyk ( http://tyk.io/ )
- WSO2 API Manager ( http://wso2.com/products/api-manager/ )
- MicroGateway ( https://github.com/strongloop/microgateway )
- Kong ( https://getkong.org/ )
如果你使用的是SpringCloud,那恭喜你,Netflix的Zuul是亲儿子。
以上是关于分布式-api网关的主要内容,如果未能解决你的问题,请参考以下文章