一、业务背景分析
前一段时间,需要开发一套业务系统,此系统需要对外统一提供api服务,但这些服务在内部是由多个业务子系统分别提供。
经过分析,此业务系统需要具有以下这么几个特性
1、不同的api服务由不同的子系统负责
2、每一个服务之间是相互独立的
3、每一个服务都需要支持横向扩展和负载均衡
4、每一个服务都需要高可用
这么一分析,我们发现这里需要一个api网关,这个api网关需要具有以下几个特点:
1、api服务器自注册,需要满足以下两个特点(当然也可以由运维在api网关管理平台上进行管理,此部分不影响本文的技术探讨,这里不进行详细的描述)
1)新增一个服务时,api服务器可以将相应的服务自注册到api网关上
2)某服务新增一个服务器或删除一个服务器时,api服务器可以在进行自注销或自注册
2、api网关需要支持对同一个服务子系统的多个服务器进行负载均衡
3、api网关需要支持对同一个服务子系统的多个服务器中的故障服务器进行检测和切换,也就是高可用
4、api网关系统本身需要支持横向扩展
二、方案的选择
对于任何团队来讲,方案不一定是自己开发的就是最好的(牛A和牛C之间的技术团队除外),需要综合考虑各种因素,这个API网关也不例外,中间经历了一点曲折,过程如下:
1、系统是部署在云上面的(具体的云这里就不透露了),原本想着看这个云服务端是否有提供此功能服务,不过遗憾的是此云未提供此服务(好像亚马逊云有提供,没有用过不知道怎么样)
2、使用开源的方案,在开源方案上找到了一个叫kong的方案,此方案是基于nginx的反向代理开发的一套方案,经过调研,此套方案不支持负载均衡和高可用方案(当然不是很深入的调研),此方案本身是基于nginx的lua扩展模块进行开发的,对于api网关的配置是使用cassandra数据库进行存储,对于团队的技术背景来说,这个不是那么合适。(ps:团队本身还不是很强大,业务工作量比较多,整个团队对lua和cassandra没什么积累,
前一段时间,需要开发一套业务系统,此系统需要对外统一提供api服务,但这些服务在内部是由多个业务子系统分别提供。
经过分析,此业务系统需要具有以下这么几个特性
1、不同的api服务由不同的子系统负责
2、每一个服务之间是相互独立的
3、每一个服务都需要支持横向扩展和负载均衡
4、每一个服务都需要高可用
这么一分析,我们发现这里需要一个api网关,这个api网关需要具有以下几个特点:
1、api服务器自注册,需要满足以下两个特点(当然也可以由运维在api网关管理平台上进行管理,此部分不影响本文的技术探讨,这里不进行详细的描述)
1)新增一个服务时,api服务器可以将相应的服务自注册到api网关上
2)某服务新增一个服务器或删除一个服务器时,api服务器可以在进行自注销或自注册
2、api网关需要支持对同一个服务子系统的多个服务器进行负载均衡
3、api网关需要支持对同一个服务子系统的多个服务器中的故障服务器进行检测和切换,也就是高可用
4、api网关系统本身需要支持横向扩展
二、方案的选择
对于任何团队来讲,方案不一定是自己开发的就是最好的(牛A和牛C之间的技术团队除外),需要综合考虑各种因素,这个API网关也不例外,中间经历了一点曲折,过程如下:
1、系统是部署在云上面的(具体的云这里就不透露了),原本想着看这个云服务端是否有提供此功能服务,不过遗憾的是此云未提供此服务(好像亚马逊云有提供,没有用过不知道怎么样)
2、使用开源的方案,在开源方案上找到了一个叫kong的方案,此方案是基于nginx的反向代理开发的一套方案,经过调研,此套方案不支持负载均衡和高可用方案(当然不是很深入的调研),此方案本身是基于nginx的lua扩展模块进行开发的,对于api网关的配置是使用cassandra数据库进行存储,对于团队的技术背景来说,这个不是那么合适。(ps:团队本身还不是很强大,业务工作量比较多,整个团队对lua和cassandra没什么积累,