多环境下标签路由落地
目录目录 背景 我们的目标:同时可并行多项目开发 为了实现这个功能,我们解决了2个路由问题!WEB服务路由 和 Dubbo服务路由?解决WEB服务路由问题?解决Dubbo服务路由的问题? 实现思路 接入方式前端(Daily和UAT)Nginx后端服务 案例实践 背景
在开发过程中,经常遇到的事情就是抢占环境,或是某个特性的变更对其他业务有影响,阻塞了其他项目的联调等。
核心原因是服务没有隔离,这里的服务包括应用程序服务和中间件服务。
我们的目标:同时可并行多项目开发
在一个调用链非常长的功能中,如果想修改其中的一个特性,并进行测试,而又不影响该环境的其他用户使用功能、特性,
例如:服务之间的调用关系链路:A->B->C→D
以上,三个项目同时进行,三个项目的标签分别是:Feature1、Feature2、Feature3
Feature1项目:涉及到B、C、D三个服务,所以,整体链路的数据流是:A(Daily标准环境)-》B(Feature1新环境B)-》C(Feature1新环境C)
-》D(Feature1新环境D)
Feature2项目:只涉及到A服务更新,所以,整体链路的数据流是:A(Feature2新环境A)-》B(Daily标准环境)-》C(Daily标准环境)-》D(Daily标准环境)
Feature3项目:只涉及到C服务更新,所以,整体链路的数据流是:A(Feature2新环境A)-》B(Daily标准环境)-》C(Feature3新环境C)-》D(Daily标准环境)为了实现这个功能,我们解决了2个路由问题!WEB服务路由 和 Dubbo服务路由?解决WEB服务路由问题?
第一步:Web服务标签路由切换
我们主要利用了nginx的map hash配置来区分,根据请求header中的X-Feature-Tag不同值,来区分不同的标签服务
流程:
解决Dubbo服务路由的问题?
第二步:Dubbo服务路由标签切换
(1)引入frxs-ec-feature-1.0.0-RELEASE.jar包
(1)Feature tag上报流程
服务启动时JVM参数中添加启动参数,-Dfeature.tag=v1.1.1,为当前服务打上v1.1.1的标签
启动命令:java -Dfeature.tag=v1.1.1 -jar svcC.jar
开发环境:
(2)利用Dubbo的特性,分别对Dubbo的Router和Filter做了扩展了,进行对consumer服务和provider服务打标,意思就是把服务进行Tag标记
router扩展: com.frxs.ec.feature.router.CustomTagRouter
filter扩展: com.frxs.ec.feature.filter.CustomTagFilter
整体流程:
设想中的Daily环境:
当下部门正在构建开发的Daily环境,也就是想通过隔离的手段规避上述的问题,提升大家的开发效率。