服务化了,没想到耦合更加严重?

通过“库”来实现业务,可能会引发业务系统之间耦合,需要通用业务服务化,将通用业务下沉,详见《小小的公共库,大大的耦合,你痛过吗》。

通过“join”来实现业务,可能会导致数据库之间耦合,需要基础数据服务化,实现数据库私有化,解除数据库之间的耦合,详见《小小的数据库,大大的耦合,你通过吗》。

但如果服务化不合理,将部分个性化业务下沉到了底层,耦合与瓶颈会更加严重

场景还原

业务1,业务2,业务3,因为join导致数据库实例耦合在了一起。

为了实现通用数据库table-user的解耦,实施了服务化,将通用user数据的访问抽象出了服务。

由于服务化不合理,会有很少很少的个性化业务逻辑,实现在底层的服务中,典型的伪代码是:

switch(biz_type){
 case(1) : exec_logic1();
 case(2) : exec_logic2();
 case(3) : exec_logic3();
 default : exec_default();
}

为什么会引发耦合呢?

不妨设,业务1来了一个新的个性化需求,这个需求本来实现在业务1自己的代码里是合理的,但工程师S想到,底层的通用服务里也有业务1的一小撮个性化代码,评估后,发现实现在底层新的需求改动的代码最小,时间最短,于是来找底层服务的负责人工程师B。

  • 业务1工程师S:“有个小需求,帮个忙呗”
  • 底层工程师B:“个性化实现在底层不合理”
  • 业务1工程师S:“反正都有switch case的代码了,再改一点也不麻烦,在我这边实现特别复杂,要xxoo这么搞”
  • 底层工程师B:“确实很复杂,那我来吧”

遗留了不合理的代码,就会有第一次妥协,妥协了业务1,就会妥协业务2,随着时间的推移,底层服务越来越复杂

  • 业务1,业务2,业务3的个性化代码越来越多
  • 业务1,业务2,业务3的需求越来越多提给底层工程师
  • 底层工程师慢慢成了项目瓶颈,业务1,业务2,业务3的项目逐步delay,但逐步都怪到了底层工程师的头上

直到有一天,底层服务出了一个小bug,影响了业务1,业务2,业务3,历史总是惊人的相似:

  • 业务1的大boss在群里首先发飙:“技术都干啥了,怎么系统挂了”
  • 业务1的工程师S一脸无辜:“底层系统改造,工程师S的bug”

额,然而,这个理由,好像在大boss那解释不通…

  • 底层服务工程师B一脸委屈:“...”。明明需求是业务方的,为什么修改代码的是我底层呢,业务代码出了问题,为什么责怪的是我底层呢,每每心中骂娘,系统中很可能就存在耦合。

如何解耦呢?

业务代码上浮,通用代码下沉,服务化彻底。

解决方案并不复杂,分层架构中,每一层都有自己的职责,每一层都应该守住自己的底线。

启示

一、讨论技术方案时,不要总以:

“放在你那边做代码少”

“放在你那边做时间短”

作为设计折衷的理由,而要多问:

“怎么做合理”

二、尽量杜绝底层出现switch case(biz_type)走不同分支的代码。

业务代码上浮,通用代码下沉,服务化彻底,只是一个很小的优化点,但对于底层服务解耦却是非常的有效。

原文发布于微信公众号 - 架构师之路(road5858)

原文发表时间:2017-12-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏京东技术

京东技术沙龙系列之二 | 深度解析京东微服务组件平台

21540
来自专栏WeTest质量开放平台团队的专栏

WeTest新版上线,新功能三弹连发!

腾讯WeTest质量开放平台新版本正式上线了,该版本最大的变化在于:各位开发者期待已久的以及已经可以正常使用啦。并且美化了界面,优化了使用流程,使WeTest...

10710
来自专栏喔家ArchiSelf

面向数据架构的云演变

现代数据架构的概念在过去的10多年里发生了巨大的变化,具体可以参见公众号“补天遗石”的《从数据仓库到数据湖——浅谈数据架构演进》一文。

13220
来自专栏技巅

毕业工作五年的总结和感悟(中)

24250
来自专栏java一日一条

微服务和容器对企业带来什么样的影响?

IT经理、架构师和开发者都尝试妥协于微服务和容器对企业IT方式的改变。在某一个层面来说这是一件好事,但是事实上,一些更深层次的东西在驱动着技术和IT。

10130
来自专栏Java技术栈

搭建“双11”大型网站架构必须掌握的 5 个核心知识

在这个互联网开发时代,作为一名软件工程师,我们经常会听到大型网站架构这个字眼,那到底什么是大型网站呢,这样的网站又是一种什么样的架构设计呢?

9410
来自专栏灯塔大数据

App运营者不可不知的33款数据分析工具

如今的移动应用早已不再是某种结构单一、功能简单的工具了。当我们的移动应用变得越来越庞杂,我们便会需要借用分析工具,来跟踪和分析App内的每一个部分。幸运的是,...

52750
来自专栏云计算D1net

如何构建多云日志记录策略

日志是迁移到云计算服务(用户实际上并不控制基础设施)的安全性和合规性的关键,并且这使得日志对于运营、风险和安全团队来说更为重要。但这些问题非常有意义,这是因为登...

6410
来自专栏悦思悦读

持续发布那些事儿

什么是持续发布 持续发布这个说法,一般情况下确实是和敏捷开发联系在一起。敏捷开发的scrum模式的一个重要概念就是持续发布。 按照理论上的说法:scrum的每一...

32960
来自专栏CSDN技术头条

详述从IaaS到PaaS的三种实现方法

随着云计算平台的优势变得越来越清晰,从IaaS到PaaS似乎是一项比较轻松的工作了。但是,方法各有不同,而找到实施PaaS最好的方法就意味着在三个可能的选项中进...

28260

扫码关注云+社区

领取腾讯云代金券