0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊这个有趣的话题:分布式单体

jf_ro2CN3Fa 来源:程序猿DD 2023-08-16 16:08 次阅读

这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

视频教程:https://doc.iocoder.cn

分布式单体为什么不好

改造走样的元凶

1. 领域拆分的不合理,引出了过多的同步远程调用

2. 简单粗暴的实现,缺少分布式的保护机制

昨晚睡觉前,顺手撸了几个群聊的聊天记录。发现一个很有意思的名词“分布式单体 ”,顺藤摸瓜看了一下之前的聊天记录,由于内容骂骂咧咧,我就不贴出来了。大致内容就是某公司在做微服务改造,但改的不伦不类,形式上像微服务,而本质上依然是单体,甚至连单体都不如。

这样的改造现象,其实在国内还是蛮多见的。今天我们就来聊聊这个有趣的话题分布式单体 。各位看官,看看你们公司是不是也犯了这样的错误?

分布式单体为什么不好

先思考一个问题:从单体改造到微服务的时候,你们是不是按这样的步骤来的?

确定业务领域,拆分存储,定义各微服务的边界

改造代码逻辑,将原来的内部service调用改成dubbo或feign这样的远程调用

通过这样的改造,我们得到了很多好处,比如:

代码库分开了,减少了麻烦的解决代码冲突的困扰

CI/CD分开了,每个拆分后的服务都可以独立开发、部署、运行

数据库分开了,独立运行,不同业务模块不会互相影响

这样一顿操作,我们把一个臃肿的单体应用变成了多个精炼的分布式应用,似乎完美的实现了改造?但这样就实现了微服务的核心目标了吗?继续思考下面的问题:

代码库是分开了,但每个服务都在独立迭代吗?是不是每个需求都要协调一大堆同步接口?

CI/CD是分开了,但每次发布都是自由的吗?是不是每次功能的发布都拖上了一大推的服务要一起发布?

数据库是分开了,但似乎有个服务挂了,依然导致很多功能就都不正常了?

看似我们得到了很多好处,但我们的开发效率真的得到了提升吗?虽然我们以前一个单体应用启动要3分钟,现在拆分后,一个项目启动30秒,但每次开发调试要同时开好几个项目同时启动?这样的开发体验真的爽到了吗?

看似完成了微服务改造,实则依然是个单体应用,只是从原本的集中式实现,变成是分布式实现。原来我们只是做了一次无用功,真正的收益微乎其微。

而实际上,这样的改造,除了收益不高之外,还带出了更多的坏处。如果你们公司是这样做的,有没有发现,这样做之后,好像系统故障的频率更高了?稳定性似乎比单体应用还差?(如果没有,那一定要感谢你们的运维团队真的很给力,同时建议把这篇转给运维团队,采访下这样的改造是不是他们变得更累了?!)

为什么这样的改造会导致系统更加不稳定呢?其实道理很简单,原本我们在单体应用中,未拆分的远程调用都是内部调用,这个内部调用所能引发的故障率是微乎其微的,而将这部分内容拆成了远程调用后,每一个调用都增加了网络IO的因素,每一次调用的故障率都增加了。那么系统的整体故障率是随着系统拥有多少同步远程调用的数量增加而增加的。当运维团队与开发水平没有支持好这部分增加的复杂度时,那么改造的系统,必然稳定性会比原来的单体应用更差。

所以,这样改造的结果,不但没有得到很多的收益,反而会带来很多稳定性上的损失。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

项目地址:https://github.com/YunaiV/ruoyi-vue-pro

视频教程:https://doc.iocoder.cn/video/

改造走样的元凶

那么为什么会造成上面所说的问题呢?我觉得主要有两方面:

1. 领域拆分的不合理,引出了过多的同步远程调用

这个是最根本的问题,也是在改造过程中最常见的。这部分说实话是整个改造过程中最难的,因为需要对业务有非常深入的认识,对系统设计的领域模型、用户行为有足够的理解。在做拆分的时候,尽可能的减少同步远程调用,取而代之的是走消息的异步交互,同时根据业务需要也可以做适当的数据冗余。这样就能保证,每个被拆分后的微服务之间可以获得更低耦合度。

因为更低的耦合度,我们才能在不做任何优化的情况下,获得更少的分布式所带来的稳定性损失。对于后面要将的第2点的工作量也就越少。同时,对于真正的独立开发、部署、运行也成为可能。

2. 简单粗暴的实现,缺少分布式的保护机制

在很多团队里,因为业务需求多与人员配置少的矛盾之下,开发人员很容易出现对远程调用不做足够的保护机制,比如:接口提供方的限流策略(保护自己不被别人搞死),接口调用方的降级策略(保护业务更高的可用性),接口调用方的熔断策略(保护自己不被别人拖死)。只有认真对待每一个分布式环境下的依赖点,那么才能解决因为分布式改造所牵连出的诸多问题。

但要做好这一点的核心,还是对第一点的把握,只有在领域模型上做更合理的拆分规划,才能支持开发人员做好这个点,不然随意的拆分,一大堆接口调用压给本就压力很大的开发人员,那这部分的开发质量肯定很难保障了,自然而然的系统稳定性就开始随着接口复杂度的增加而不断下降了。最后,开发人员就会开始来我们群里吐槽了...甚至大家也开始怀疑微服务根本带不来效率的提升!

最后,思考一下,你们的微服务改造有出现这里我说的情况吗?还是有其他不一样的问题呢?欢迎留言区说说你们的问题,聊聊你的观点!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 分布式
    +关注

    关注

    1

    文章

    895

    浏览量

    74498
  • 模型
    +关注

    关注

    1

    文章

    3229

    浏览量

    48812
  • 微服务
    +关注

    关注

    0

    文章

    137

    浏览量

    7341

原文标题:你以为在做的是微服务?不!你只是做了个比单体还糟糕的分布式单体!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    分布式软件系统分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式
    发表于 07-22 14:53

    分布式发电技术与微型电网

    几种分布式发电简介2.分布式发电与配电网互联问题3.微型电网技术4.分布式发电(电源)技术应用的障碍和瓶颈5.分布式发电(电源)技术发展方向6.结语
    发表于 03-11 13:37

    分布式光伏发电安全性

    的特殊性,还是需要业主关心分布式光伏发电系统的整体安全性能,养成定期维护的良好习惯。南京研旭作为专业的光伏产业厂商之一,在光伏发电系统的建设方面也积累了深厚的行业经验。如果您对分布式光伏发电产业的安全性有疑问的话,欢迎致电南京研
    发表于 10-12 15:35

    如何设计分布式干扰系统?

    ”的电子战系统,共同完成对敌信号的探测、定位、干扰任务。因此,嵌入网关是分布式干扰系统研究的关键技术之一。目前国内对分布式干扰系统的研究还停留在理论基础上,而对其关键技术的研究不多。怎么利用嵌入
    发表于 08-08 06:57

    分布式系统的优势是什么?

    当讨论分布式系统时,我们面临许多以下这些形容词所描述的 同类型: 分布式的、删络的、并行的、并发的和分散的。分布式处理是一个相对较新的领域,所以还没有‘致的定义。与顺序计算相比、并行的、并发的和
    发表于 03-31 09:01

    HarmonyOS应用开发-分布式设计

    设计理念HarmonyOS 是面向未来全场景智慧生活方式的分布式操作系统。对消费者而言,HarmonyOS 将生活场景中的各类终端进行能力整合,形成“One Super Device”,以实现
    发表于 09-22 17:11

    各种分布式电源的电气特性

    PS:渗透率的概念:从字面上理解,“渗透”就是由分布式电源发出的功率进入(渗入)到配电系统,所谓的“率”就是由分布式电源发出的电和整个系统所消耗的电(或者说总发电量)的一个比值。各种分布式电源的电气
    发表于 07-12 07:54

    如何高效完成HarmonyOS分布式应用测试?

    作者:liuxun,HarmonyOS测试架构师HarmonyOS是新一代的智能终端操作系统,给开发者提供了设备发现、设备连接、跨设备调用等丰富的分布式API。随着越来越多的开发者投入到
    发表于 12-13 18:07

    聊聊关于架构的话题

     技术需要架构,芯片的架构,软件需要架构,公司需要架构,建筑需要架构,产品需要架构,人也需要架构,聊聊架构的话题
    的头像 发表于 09-28 02:48 2222次阅读

    关于分布式系统的几个问题

    本文摘自:华为云社区 作者:华为加拿大研究院软件专家 Jet老师 小引 分布式系统是一个古老而宽泛的话题,而近几年因为 大数据 概念的兴起,又焕发出了新的青春与活力。本文将会通过对如下几个问题展开谈
    的头像 发表于 09-23 16:28 3061次阅读

    什么是鸿蒙分布式游戏?为什么要做分布式游戏?

    “鸿蒙”(Harmony)无疑是近期以来最为热点的话题之一,而在技术层面上,“分布式”又是鸿蒙最核心的关键点之一,无论应用还是游戏都与之息息相关。
    的头像 发表于 01-30 09:49 4619次阅读

    华为鸿蒙系统之分布式游戏详解

    “鸿蒙”(Harmony)无疑是近期以来最为热点的话题之一,而在技术层面上,“分布式”又是鸿蒙最核心的关键点之一,无论应用还是游戏都与之息息相关。
    的头像 发表于 01-30 10:42 7182次阅读

    为什么需要分布式锁 基于Zookeeper锁安全吗

    这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。 Redis 分布式的话题,很多文章已经写烂了,我为什么还要写这篇文章呢? 因为我发现网上 99% 的文章,并没有把这个
    的头像 发表于 08-10 18:06 5604次阅读

    分享一个有趣的鸿蒙分布式小游戏

       今天给大家分享一个有趣的鸿蒙分布式小游戏:你画我猜。       开发心得(如有错误还请大佬及时指正):   分布式流转: 一个 APP 应用在设备之间互相拉起迁移,只在一个终端上运行
    的头像 发表于 11-01 14:29 2543次阅读
    分享一个<b class='flag-5'>有趣</b>的鸿蒙<b class='flag-5'>分布式</b>小游戏

    为什么需要分布式ID?求一种分布式ID生成方案

    对于单体系统来说,主键ID可能会常用主键自动的方式进行设置,这种ID生成方法在单体项目是可行的,但是对于分布式系统,分库分表之后,就不适应了
    的头像 发表于 01-09 10:43 1209次阅读