首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >最烦别人说“在你那边实现代价小”!(第62讲)

最烦别人说“在你那边实现代价小”!(第62讲)

作者头像
架构师之路
发布2025-05-10 10:41:28
发布2025-05-10 10:41:28
1590
举报
文章被收录于专栏:架构师之路架构师之路

《架构师之路:架构设计中的100个知识点》

62.微服务耦合与拆分

服务化,是架构中很常见的分层解耦手段,但如果服务化不合理,将部分个性化业务下沉到了底层,耦合与瓶颈会更加严重。

场景还原

业务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. 业务1,业务2,业务3的个性化代码越来越多;

2. 业务1,业务2,业务3的需求越来越多提给底层工程师;

3. 底层工程师慢慢成了项目瓶颈,业务1,业务2,业务3的项目逐步delay,但逐步都怪到了底层工程师的头上;

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

1. 业务1的大boss在群里首先发飙:“技术都干啥了,怎么系统挂了”;

2. 业务1的工程师S一脸无辜:“底层系统改造,工程师S的bug”;

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

底层服务工程师B一脸委屈:“...”。

明明需求是业务方的,为什么修改代码的是我底层呢,业务代码出了问题,为什么责怪的是我底层呢,每每心中骂娘,系统中很可能就存在耦合。

如何解耦呢?

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

图片
图片

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

启示

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

“放在你那边做代码少”

“放在你那边做时间短”

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

“怎么做合理”

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

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

知其然,知其所以然。

思路比结论更重要。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档