为了支撑业务的飞速发展,分布式系统架构不断演进,业务链路日趋复杂,服务间相互调用,增加了服务联调的复杂性;
在如此研发背景下,作为研发过程中不可或缺的一环业务链路联调,面临越来越多的挑战:
假如研发团队有 3套开发环境用于联调; 每套环境都部署了一套完整的N个服务;
这时候公司同时有4个需求开发联调;feature_1~4 ;那么环境占用情况如下
每个feature占用了一个环境,而feature_4却被阻塞联调了,只能等待环境空闲出来,或者再让运维增加一套环境 dev4 来使用;但是新增一套环境不仅增加了运维的工作量;而且又增加了研发成本;
难道就没有解决方法吗?
为了解决上述问题,小企业最常用最省事的方法是:
拉一个新的分支 feature_1_2, 将多个分支都一起合并到这个分支上来进行联调;共用一套环境;
确实,这是最省事的方法,但是这个方法存在它的局限性
正常来说,严格按照约定操作,也不会出现什么问题,但是我们有更好的解决方案
上面的方法虽然可以操作,但是使用太复杂;我们可以将没有收到需求迭代而变更的服务复用起来;
首先我们把所有服务都部署在一套环境里面;跟stable环境(或者生产环境)保持一致;
这些服务永远都是部署master稳定分支,这些服务就是用来被复用的;
假设我们有4个需求并行开发联调,那调用链就是下面这种
上图假设的feature_1只变更了 S1 S3 S4 的服务,那么没有变更的S2 S5就可以直接复用master的稳定服务 M2 M5
上图假设feature_2 只变更了 S3;其余的服务都可以服务稳定版本的服务;
看到上面服务复用的模型,我们来算一个账;
假设最初的时候 一个需求占用一套环境; 一套环境可能部署了N套服务;
想要并行联调Y个需求,那么就需要 N*Y个服务器资源;
用了服务重用之后;同样支持Y个需求占用的服务器资源要远远少的多;
因为每个需求中服务变更的是少数,假如一套环境100个服务,一次需求的变更服务数目一般不超过10个,我们只需要提供变更服务的部署资源就行;
而且不需要完整的重新搭建一套环境,只需要部署变更服务
上面介绍的是实现的思路,同一个环境下(指的是同一个zk下注册的服务)
因为不同的RPC的实现不一样,我这里主要讲解Rpc为dubbo的情况下,如何实现上述需求;
因为文字篇幅过长,故新开一篇文章讲解 Dubbo下的多版本并行开发测试解决方案
http请求访问
统一网关访问
先占个坑 有空再写 TODO…