多环境下标签路由落地
目录目录背景我们的目标:同时可并行多项目开发为了实现这个功能,我们解决了2个路由问题!WEB服务路由和Dubbo服务路由?解决WEB服务路由问题?解决Dubbo服务路由的问题?实现思路接入方式前端(Daily和UAT)Nginx后端服务案例实践背景
在开发过程中,经常遇到的事情就是抢占环境,或是某个特性的变更对其他业务有影响,阻塞了其他项目的联调等。
核心原因是服务没有隔离,这里的服务包括应用程序服务和中间件服务。
我们的目标:同时可并行多项目开发
在一个调用链非常长的功能中,如果想修改其中的一个特性,并进行测试,而又不影响该环境的其他用户使用功能、特性,
例如:服务之间的调用关系链路:ABCD
以上,三个项目同时进行,三个项目的标签分别是: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的maphash配置来区分,根据请求header中的XFeatureTag不同值,来区分不同的标签服务
流程:
解决Dubbo服务路由的问题?
第二步:Dubbo服务路由标签切换
(1)引入frxsecfeature1。0。0RELEASE。jar包
(1)Featuretag上报流程
服务启动时JVM参数中添加启动参数,Dfeature。tagv1。1。1,为当前服务打上v1。1。1的标签
启动命令:javaDfeature。tagv1。1。1jarsvcC。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环境,也就是想通过隔离的手段规避上述的问题,提升大家的开发效率。