Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)
50年已经过去了,康威定律依然适用。
应用早期,应用单体,团队成员之间沟通方便,随着系统演进,对单体应用进行服务拆分,每个服务有独立的团队进行开发、维护,不同服务之间的依赖关系错综复杂,不同服务的成员之间首要面对的问题就是沟通。
1、服务增多,人员沟通成本,不确定因素变多(原来的单体应用,到现在多服务,多集群)当然同时也带来了性能上的极大提升。
2、单体服务对外依赖越来越重,联调需要协调一堆的人,搭建一堆服务。这样就很难得到一个既稳定又快速响应的环境。而且同一个服务可能有不同的版本同时在线,所以也有可能调用不到自己想调用的服务。
产生问题的原因,就是对远程服务的依赖太过。
解决的关键:在本地构建远程服务的模拟。
1.传统方法:通过mock把本地服务队远程的调用全mock掉,并且随着业务逻辑不断变化,还要不断的写mock代码,并且等到其他的服务上线了,还需要把mock的连接层去掉。调测语句的需要在开发过程中不断的修改。还有就是如果某一个服务的接口变了,或服务内的实现变了,没有通知到你,那么只有部署到环境上才会知道这个变化。
2.如果自己打一套完整的环境,沟通协调搭建成本太高。
3 .构建一套mock系统,将服务的所有对外请求消息转发到mock系统,mock系统再返回其想要的结果。(由于其复杂度,在这里不做过多),要处理的场景比多,消息只是一种,还有数据库,kafka之类的服务。或者是公司自己的框架系统
下面列出了在服务化过程中的常见问题: