且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

多点生活的分布式服务框架DSF(上)

更新时间:2022-08-22 13:54:18

 

背景


多点生活成立于2015年初,1亿美元天使轮,和物美超市深度合作,目标是打造线上线下一体化的全渠道零售平台。技术研发团队基本上全  在成都,在成都JAVA好招人,所以基本上在多点内部就是JAVA一统天下了,也没有去考虑其他的语言了。10几个人,2个月时间,上线了第一版的业务系统,麻雀虽小五脏俱全,从APPH5,从商品到购物车,从订单到交易,从会员到配送履约,十几个系统。为了快速开发,全部基于REST API,通过一个叫API Center的中心服务进行中转服务调用。


多点生活的分布式服务框架DSF(上)


1、早期的API Center

 

随着业务量的增长,3个月时间用户量就超过200万,业务系统不断增加,服务之间的调用变得越来越复杂,没有谁能完全理清楚服务之间的关系了。同时APICenter慢慢成为瓶颈,也占用了我们不少服务器资源,作为创业公司,还是要精打细算的。而且APICenter作为服务中心路由节点,所有的服务调用都走这里通过。有一次,我们的一个工程师出了一个bug,在一个死循环中不停调用某个服务,直接把APICenter搞挂了,所有服务都不能提供服务,只能简单粗暴重启服务或干掉问题服务。


多点生活的分布式服务框架DSF(上)


2、业务发展一年后的全景图

 

创业公司,时间宝贵,拿来主义

为了解决上面的问题,迫切要有一套分布式服务框架来解决这些问题,由于时间紧,人手有限,从头开发一个肯定是来不及了。所以我们本着拿来主义的原则选择了一个开源的框架来用,那就是dubbo。虽然dubbo并不是市面上***、最新的服务框架,但是我们很多人对dubbo都很熟悉,使用成本低,于是就选择了它,本身我们只需要支持JAVA语言就够了。

 

先做减法,再做加法

dubbo相对来说是一个很老的框架了,功能很庞杂,有很多我们用不上的东西,同时有很多我们想要的功能却没有。于是我们第一步先做减法:精简内核,去掉所有不要的功能,干掉了差不多一半的功能;第二步:调整策略,修改测试发现的bug;第三步:添加我们必要的功能。2个人,1个月时间,就基本上改造完成了符合我们预期的分布式服务化框架。


多点生活的分布式服务框架DSF(上)


3、多点服务化框架DSF


核心功能点:

1RPC [保持不变]

这块基本上没有做什么调整,直接沿用dubbo基于netty的长连接的传输,hessian的序列化,在满足我们的业务调用量的前提下,不引入更多的依赖,保持简单就好。

 

2、服务注册和发现 [改进]

我们是基于Zookeeper来做服务注册与发现,也没有什么大的问题,而且几乎是现成的解决方案,不需要开发什么代码。随着我们开始多机房(混合云)部署,就创建了一个大的ZK集群,不同机房的应用优先连本地的ZK节点,优先调用本地机房的服务,当本地机房的服务不可用的时候,自动跨专线调用另外机房的服务。

这些功能本身dubbo并没有提供,需要我们代码来实现。但是由此带来了不少的运维复杂度,我们需要针对不同机房的应用部署打包配置不同的参数,以适应优先本地机房配置。于是我们就开发了我们自己的配置中心(Admiral),可以用同一个打包部署文件,自动适配不同机房不同的参数来达到本地机房优先的原则。


多点生活的分布式服务框架DSF(上)


4、优先注册和调用本地服务


多点生活的分布式服务框架DSF(上)


5、基于配置中心,自动获取配置参数