经过这一段时间的思考、实践、受挫、再思考、再实践,现将api网关的方案总结一下。
总的目标
主要为了解决SOA服务框架对外提供api相关问题,主要涉及如下几个方面:
- 统一鉴权
- 限流
- 防攻击
- 系统拆分
- api横向扩展、高可用、负载均横
- 服务自动扩缩
- …
为了解决上面的一系列问题,所以需要一个网关系统来作为外部服务调用的统一入口。本方案分两部分:
第一部分
具体代码请参见
https://github.com/zhuzhong/gateway-dubbox.git
后端服务采用dubbox的SOA服务框架,服务之间的内部调用协议为dubbo协议,而对于前端h5提供接口采用的为rest协议,数据传输格式为json,即http+json技术。第一部分主要解决就是rest协议所提供的服务对外的网关问题。
目的
我们服务框架使用的是dubbox(这个不用再多描述了),内部系统调用使用的是dubbo协议;而对于前端提供服务则使用rest协议。前端应用面临许多rest服务,为了解决调用的统一,所以需要一个网关系统。
为什么自己写
- 对于api网关,现在已有框架可以解决该类问题,但是基于java语言开源的没有(除了zuul,也有可能我没有找到).
- 不会C++,无法扩展nginx
- 不会C,无法扩展nginx
- 不会LUA,无法扩展nginx