服务依赖
一般来讲,还有就是客位客户比较关心的问题:海关估价方式,在拆分为微服务后。经历一段时间的业务规模发展后,进口旧设备海关商检主要查什么,我们的服务都是具有比较多的依赖。像是:
一个服务依赖其他多个服务
我们发现业务初始依赖的是 ServiceA,哪些机械设备不能进口及交税的问题,结果跑了一段时间后。服务依赖越来越多,这些在伟益都能你给一一解决五金加工类:代理立式/卧式CNC加工机床、数控钻床、数控磨床、数控车床、冲床等二手设备。电子设备类:代理自动贴片机 、全自动IC邦定机、固晶机 ,还出现了更进一步依赖,电路板清洗机等旧电子设备的进口备案。塑料生产类:代理注塑机 、热熔机 、押出机 、花样机、 挤出机等塑料加工设备的国外中检。纺织设备类:我司代理高速喷气纺织机、摩擦纺纱机、气流纺纱机、 绣花机等二手纺织设备进口报关有着丰富的案例支持!生产线类:制造显示屏的生产线、制造涂料的生产线、组装生产线、喷涂生产线等二手生产线进口代理报关。下面就客户对旧设备进口比较关心的几个问题做下简单分析:二手设备进口报关,旧设备进口报关流程:准备旧设备进口资料—-从国外安排货运到码头-—在进口港,Service A 依赖 B、C,进行商检查货—-海关进口审核—海关现场查验核对—提货放行—陆运配送厂家。二手机械设备进口过程需要时间:安排中检,他们背后又调用了堆的服务。
同时 ServiceA 依赖的服务,2-4天。驳船,还存在跨业务组的情况,1—3个天。申报,也就是一个普通的业务调用,在单证和审价没有问题的情况下,可能关系到多个业务组的协调:
一次调用涉及 3 个业务组
虽然从图示来看,约3—7天。指定港口清关后内陆陆运配送至厂家,只有 3 个业务组。但,一个月前可是都是依赖自己。
说明小咸鱼作为业务组 A 的维护方,他所依赖的业务团队正在不断地增,家都在用力产生新的服务依赖。
假以时日,这个服务的依赖必然变的非常多(不过,小咸鱼并没有意识到这一点)。
环境
终于,在小咸鱼维护了一段时间后。这一个业务产品,成功走过了尝试期。他有了好几位新同事,在迭代的过程中,联调的诉求出现了。
小咸鱼麻利的利用组织里的公共环境搭建起了服务:
公共环境
小咸鱼辛辛苦苦的找了其他几个组,让家都往上面 Push 自己的服务,解决了这一个迭代的联调的问题。
但,好景不长。业务压力总是的,家都维护着复数的 f 分支。这时候就遇到了新问题:
不同业务组期望依赖不同
业务组A,期望依赖的是:
ServiceA:v0.1.0。
ServiceB:v0.2.0。
ServiceC:v0.3.0。
业务组B,期望依赖的是:
ServiceA:v1.1.0。
ServiceB:v1.2.0。
ServiceC:v1.3.0。
好家伙,在同一个集成环境中,家期望依赖的服务版本压根不一样。联调起来挺费劲,甚至存在一些风险。
例如:你在环境,联调时你以为你依赖的 ServiceB 的 v0.2.0 版本,跑的也好好的。结果其实其他业务在晚上把他更新为 v0.5.0 版本了,接口还是兼容的,但内在逻辑是变了的。当然,你也没有发现这个问题,因为是 “细微” 的修改。
但上到测试环境后,很快就会出现被测试同学打回来的情况。以此往来多了,你就会成为团队里质量不好的那一位 TOP1 了...
这问题怎么解决呢?
解决方案
针对微服务架构下的环境,核心还是要看公司内的基础设施的怎么样。
公共 dev 分支
若只是基础底蕴不够深厚,钞能力也不够的,一般会采取 dev 分支合并的方式。也就是在 ServiceA 上建立 dev 分支,专门用于集成环境。由同学配合脚本等,进行维护和应用。
虽然容易出现不同分支,影响到同一块的内容。但由于同一个 Service 一般会由 1~3 个人(小团队)经手维护,都坐在附近,基本可以控制冲突。
甚至有的小伙伴,为了谨慎起见。合并前会反向合并到自己 f 分支,再跑一遍自己的自动化接口测试,以确保正确。
当然,测试环境也是一样的问题。在业务迭代的过程中,常常有多个功能在同时,会拉多个分支。
如果、测试环境只有一套,就意味着要么团队内商量好时间。
轮流使用测试环境,要把不同功能的分支代码合到某个分支再统一解冲突,再联调和测试。
这个方案只能治标,但不能完全治本。
多泳道环境
说白了,可能还是需要多套环境来解决。当你期望是某一个泳道用来发布某一个特性分支时。对应的发布系统就会给其相关联的组件打上泳道标识,自然也就能知道依赖的是谁了。
如下图:
一个服务存在多个泳道
一般客户端会带上泳道标识的 Header,再透传下去。所有相关 Proxy 会根据 Header 内的标识进行选择。
考虑到有的服务在功能特性中并没有变更,因此会有 master 和功能泳道的区别,会再根据 Proxy 的规则进行选择。
当然在这块也可以结合服务发现的机制去做,具体看技术选型上的差距了。
总结
微服务化后,N 个服务如何联调,就是人员的一个头疼问题。而人一多,业务压力,很可能会出现一个服务同时多个分支并行的情况。
也就会导致、测试环境同一时间遇到这个烦人问题,我们可以通过公共分支,又或是多泳道的方式解决。
但两者都存在不同程度的缺点:
公共环境,需要公共分支,需要人为的一定介入。
多泳道环境,需要的基础设施较多,同时 MySQL、Redis 等公共介质也是一个问题,成本也是运维的一个考虑因素。
免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!