V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xhwdy26
V2EX  ›  程序员

从微服务走向单体化

  •  
  •   xhwdy26 · 1 天前 · 4399 次点击

    CEO 觉得微服务部署极其繁琐,什么 nacos 、mq 、redis 都好复杂,远不如零几年的开发一条龙从后台到前端那么简单。

    要求把十来个微服务(用户、订单、后台、网关等)合并成一个。

    简化部署,只一台机器搞定。

    试问,这种单体程序最后以怎样的方式崩溃。

    89 条回复    2025-01-19 23:32:38 +08:00
    ruxuan1306
        1
    ruxuan1306  
       1 天前   ❤️ 12
    系统架构本质是组织架构的表现。
    lucasj
        2
    lucasj  
       1 天前
    降本增效
    loveyu
        3
    loveyu  
       1 天前 via Android
    挺好的,崩溃无非就是某段代码 cpu 或内存占用过高,然后 boom 。微服务崩了也没啥差别。
    sagaxu
        4
    sagaxu  
       1 天前   ❤️ 1
    2020 年之后,确实涌现出一堆从微服务回归单体的尝试,其中包括 amazon 这样的微服务先锋大厂。在提出微服务概念之前,就有大量比你们系统复杂十倍甚至一百倍以上的单体系统,一个单体程序几个 GB ,启动时间按十分钟为基本单位,他们崩溃了吗?
    yinmin
        5
    yinmin  
       1 天前 via iPhone
    看用户量和并发量,如果用户量在几百万量级,每秒并发在 1000 以下,单体还是很好用的。

    如果找网红直播,同一时间突发上万人在线,单体大概率会崩溃。因为,单体通常不会用消息队列,高并发无法转化为队列依次处理,然后就堵塞崩溃了。
    lqw3030
        6
    lqw3030  
       1 天前   ❤️ 1
    提供一个思路,你建立一个独立 moduel 把所有模块都引了,然后 scan 里扫所有子模块的包,这样就可以快速实现“单体服务”,并且在想要水平扩容时仍可以模块独立打包
    mbeoliero123
        7
    mbeoliero123  
       1 天前
    @yinmin 几百万,单体扛不住吧
    csys
        8
    csys  
       1 天前   ❤️ 2
    微服务的两个最大的意义:独立发布和独立伸缩

    你们如果不需要,就可以不搞微服务呗

    不过我觉得你们 CEO 大概率只是因为“零几年的开发一条龙”是他认知的舒适区,而你们没有一个有能力的 CTO 或者架构师来把 DevOps 和基础设施做起来?
    yinmin
        9
    yinmin  
       1 天前
    @xhwdy26 你问问领导: (1) 会不会找网红直播 (2) 会不会同一时间突发上万人在线下单 (3) 要不要用消息队列应对高并发。如果都是 NO ,改单体问题不大。
    csys
        10
    csys  
       1 天前
    等等

    > 简化部署,只一台机器搞定。

    ???是字面意义的一台机器吗?

    我以为是要从微服务转向分布式同构单体,合着你们是直接退分布式回归单机吗?啥业务啊,这么不要求可用性的
    yinmin
        11
    yinmin  
       1 天前
    @mbeoliero123 #7 单体是否能扛住,主要看每秒并发,用户总量百万只是参考值。每秒并发 1000 以下,大致上限是 5000-1 万人同时在用系统,单体大致也就这个量级了,并发再上一个量级,就需要用消息队列 mq 将并发事务转换成队列,而单体基本上是不太会用 mq 的。
    me1onsoda
        12
    me1onsoda  
       1 天前
    @yinmin 这跟单体微服务有什么关系?会不会崩溃取决于内存,配置不够微服务也崩给你看
    mbeoliero123
        13
    mbeoliero123  
       1 天前
    @yinmin #11 单体服务怎么部署?还是走 k8s 那套吗?好像没有必要?
    xhwdy26
        14
    xhwdy26  
    OP
       1 天前
    单体部署就是一个超级 jar 包加启动脚本加大内存

    我觉得苦了开发人员,因为每个人都负责不同的模块,有的负责订单,有的负责后台等等
    me1onsoda
        15
    me1onsoda  
       1 天前
    Java 搞微服务是最傻 X 的,本身就重再加上 spring 这个庞然大物,还要分开搞微服务,每一个服务冗余了这么重基础设施,浪费了不知道多少内存。历史问题属于没办法,现在还这么干真是没苦硬吃
    cj323
        16
    cj323  
       1 天前
    1. IO 或 CPU 扛不住
    2. 服务器硬件问题
    3. 网络问题
    4. 受到攻击
    yinmin
        17
    yinmin  
       1 天前
    @me1onsoda #12 微服务有同步通讯(API)和异步通讯(MQ),如果在高并发下使用异步通讯(MQ),系统是不会崩溃的,通过微服务伸缩机制能够在秒级快速克隆出几十/上百个容器(微服务)去处理队列,最坏情况就是队列过长 timeout 直接抛弃掉部分。如果微服务使用同步通讯(API),就和单体区别不大了,高并发延时导致雪崩,重启服务引发更高并发再次崩溃。
    cj323
        18
    cj323  
       1 天前
    朋友公司就是,单体转分布式又转回单体,垂直扩展转水平又转垂直,代码从集中到分开又集中。

    不同时期有不同需求,分久必合合久必分。
    NotLongNil
        19
    NotLongNil  
       1 天前
    你们并发多少?
    yinmin
        20
    yinmin  
       1 天前   ❤️ 7
    @xhwdy26 #15 CEO 又不会上机直接操刀,“简化部署,只一台机器搞定”,你就一台机器装 docker ,为每个微服务写一个 compose file ,汇报的时候说:已经微服务改成子系统模块了,程序基本不用改。
    NotLongNil
        21
    NotLongNil  
       1 天前   ❤️ 1
    抛开具体场景,谈架构,就是刷流氓
    cj323
        22
    cj323  
       1 天前
    @me1onsoda 微服务确实浪费计算机资源,但是可以分散团队各自独立开发微服务。当然后续也有各自独立开发不好集中管理的问题。
    cobbage
        23
    cobbage  
       1 天前 via Android
    我是企业项目没搞过互联网。该看并发量评估,单体可以集群啊。
    ZRS
        24
    ZRS  
       1 天前   ❤️ 1
    技术选型取决于你们的业务
    Perry
        25
    Perry  
       1 天前 via iPhone
    不要最后楼主说他们公司用户量在十万以内,并发 100 以下
    yinmin
        26
    yinmin  
       1 天前
    @cobbage #23 企业项目不会出现突发高并发,单体可以集群(多服务器负载均衡),应付企业项目绰绰有余。

    互联网项目不一样,一个朋友的商城平时最多就几百人同时在线,有一次老板做推广,花了几十万请大网红做直播,然后 5 万多人同时涌入系统直接宕机,几十万软妹币打水漂了。

    高并发的架构是不一样的,微服务是独立的,通过消息队列异步通讯,会根据消息队列情况自动伸缩微服务,消息队列过长超阈值直接抛弃掉,保证系统不崩溃。单体用集群就有点力不从心了。
    beneo
        27
    beneo  
       1 天前
    世界微服务的爆发,说实话,最经典、最具代表性的例子就是淘宝的“五彩石”项目。在五彩石之前,有多个团队共享一个 Tomcat 环境进行发布,硬是支撑起了一年 1000 亿 GMV 的业务量。所以,实话实说,CEO 这样做的原因,估计是是商业行为而不是技术思考,也就是单体应用架构并没有限制了你们的发展,而是对公司未来的不确定性,而产生了强烈的降本需求
    sagaxu
        28
    sagaxu  
       1 天前   ❤️ 2
    @yinmin 5# 你这看法跟现实不符,单体不是单机,早在 Nginx 开源之前的上个世纪末,F5 的 Big IP 就支持负载均衡了,当时就有一些公司用上单体集群部署。在 Redis 开源之前,单体服务早就用上 memcached 了,当年做 Web 的那波人,人均读过 memcached 源码和 C10K 论文。

    单体其实也用消息队列,ActiveMQ 是二十年前的东西了,之后还有 qpid ,都是微服务兴起之前就有的。十多年前,还有很多现在很少人提及的常用组件,比如 Beanstalkd ,Tokyo Tyrant 等等。

    在微服务兴起之前,把大单体部署很多份,然后从网关做负载均衡是很普遍的事情,性能扩展性是不如微服务,但是不至于性能跟单机划等号。
    yinmin
        29
    yinmin  
       1 天前
    @sagaxu #28 我同意你的看法。只是技术发展到现在,如果需要用到消息队列,优选微服务;如果单体用消息队列,开发复杂性、部署复杂性、伸缩性都不如微服务。
    cobbage
        30
    cobbage  
       1 天前 via Android
    @yinmin 这个事情怎么看的成本问题,流量不是经常性的。我刚工作时候遇到过类似的事情,提前准备应对了,当时好像是有部分网络没切过去。
    sagaxu
        31
    sagaxu  
       1 天前
    @yinmin 29# 单体的伸缩性肯定不如微服务,微服务可以很方便的实现根据负载动态扩容,单体就比较费力,最多用脚本临时租 VM 自动部署。但微服务设施是有附加成本的,无论是自建还是租 IaaS 都价格不菲,面对偶尔扩容这种事情,老板更希望员工加加班哪怕手动完成。
    mooyo
        32
    mooyo  
       1 天前
    微服务最大的好处是提高了服务的可维护性,划分合理的话可以直接把过于老旧的服务 drop 掉对照接口重写一个。
    kk2syc
        33
    kk2syc  
       23 小时 14 分钟前   ❤️ 7
    讲个笑话,
    ----
    快 10 年前,在卫浴厂子写的 CRM ,一梭子原生 PHP 直接放在办公室的 dell 工作站上(印象里是 4 核 8G ),全国几百家代理商、服务点,每天集中并发至少上万,从来没崩过(也可能不知道,毕竟 F5 就能重试,还能甩锅网络问题)。
    ----
    前年副总找人搞的微服务,接入抖音和微信,一天崩 30 次,老同事又联系我,说副总让他从仓库把那台 dell 又拿出来了,但是不知道怎么把新数据导入,哈哈哈,真自豪
    IvanLi127
        34
    IvanLi127  
       22 小时 22 分钟前
    你们这套微服务全部部署到一台机器上,能有多少种崩溃的姿势,那单体程序能命中其中一部分,不会超过的,放心。

    单体应用很好,就是单台机器配不上它,只能拆掉跑。至于高可用,这和单不单体没太大关系。单体应用也能互连成集群。
    silentsky
        35
    silentsky  
       16 小时 43 分钟前 via Android
    上面很多人提到单体不能用 mq 不懂瞎说?
    qinxi
        36
    qinxi  
       16 小时 39 分钟前 via iPhone   ❤️ 1
    我们就是百万用户的单体应用。单体跟异步和队列又不冲突。不考虑团队后端开发才几个人,把后端拆得比员工数还多,天天净在那切换项目了。
    miscnote
        37
    miscnote  
       16 小时 8 分钟前
    早些年没有微服务,同一个服务部署多个实例,简单的做 scaling out ,也能过的不错。比如某邮箱的 webmail ( java 写的,里面集成了很多功能,按现在观点看,都可以拆成 micro service ),就是几百个物理实例,靠 dns 做的 scailing out ,照样撑起数千万用户并发。
    seansong
        38
    seansong  
       15 小时 59 分钟前
    微服务在目前大部分场景里面,属于政治 kpi 吧,其实技术层面的需求并不大
    jeffw
        39
    jeffw  
       15 小时 49 分钟前   ❤️ 1
    我觉得单体应用挺好的,一直比较反感微服务。
    irisdev
        40
    irisdev  
       15 小时 30 分钟前
    单体挺好的,单机顶不住吧
    RotkPPP
        41
    RotkPPP  
       15 小时 22 分钟前
    坐标某大厂 C 端产品的开发,我们就是分布式单体应用,用户量千万级,虽然没有像淘宝那样子有几十万的并发,但是高峰的时候几万和十几万是有的。我们系统也没崩过,开发起来也没啥问题。

    我觉得选什么架构,技术选什么难道不应该是应用场景决定么。
    xhwdy26
        42
    xhwdy26  
    OP
       15 小时 14 分钟前
    感谢各位的回复,三个最大的疑问:

    如何合并成单体,几个人同时在一个项目上开发的冲突怎么解决?

    如果合并成单体,启动时间会增加,开发调试不方便,怎么面对这个问题?

    如果合并成单体,某个模块要拉分支,应该怎么处理这个问题?
    henix
        43
    henix  
       15 小时 8 分钟前
    我理解单体应用 vs 微服务只是部署运维的差别,跟 git 和代码怎么管理没关系
    至于开发环境,可能是每个人自己电脑上 wsl2 或虚拟机?
    tonytonychopper
        44
    tonytonychopper  
       15 小时 2 分钟前 via iPhone
    @xhwdy26 #42 那就用 monorepo
    xuanbg
        45
    xuanbg  
       14 小时 54 分钟前
    但凡是微服务合并单体的,十个里面有十个,全都是因为服务没有拆分好。你想啊,重新拆分多麻烦,不如干脆就别拆啦。一锅炖不就完了吗!

    啥?你说微服务更好?你就说一锅炖能不能吃吧。
    yeqizhang
        46
    yeqizhang  
       14 小时 49 分钟前 via Android
    除了你说的 nacos 是微服务时出现的,其它又不是单体不能用,单体又不是不能集群负载均衡
    demoplayer88
        47
    demoplayer88  
       14 小时 35 分钟前
    上面有人说的单体和 mq 有什么关系? 我们一直都是单体 一直都用 mq 单体又不是单机 举个最简单的例子 一台跑正常请求 一台跑队列 一台跑任务 有并发就上集群 动态扩容
    Charlie17Li
        48
    Charlie17Li  
       14 小时 25 分钟前 via iPhone
    @RotkPPP 一个单体实例配置多少资源( cpu ,内存),平均水位是多少?🤔
    guanzhangzhang
        49
    guanzhangzhang  
       14 小时 11 分钟前
    去看看腾讯和抖音的单体化,小微服务+多机
    yinmin
        50
    yinmin  
       14 小时 11 分钟前 via iPhone
    @demoplayer88 #47 OP 的单体是指一个 jar
    yinmin
        51
    yinmin  
       14 小时 9 分钟前 via iPhone
    @demoplayer88 #47 OP 的单体是指一个超级 jar 包(见#14 ),一个 jar 包里跑 mq 应该不常见吧。
    jacketma
        52
    jacketma  
       14 小时 0 分钟前
    只要把数据库单独拎出来部署,单体再克隆一个备用服务器,前端搞一个负载分流,这种架构进可攻退可守
    SageXiong
        53
    SageXiong  
       14 小时前
    微服务和单体都有自己的应用场景,而且架构是慢慢演变的,不是一开始就定死我要用微服务或者我只能用单体,要看具体的场合来确定。

    不管是单体还是微服务都遵循康威定律,软件系统最后崩溃的根本原因是软件不匹配业务。
    qinxi
        54
    qinxi  
       13 小时 58 分钟前   ❤️ 1
    @xhwdy26 #41
    1,3 微服务都存在一样的问题。
    2. 你的微服务启动比单体快多少? 你调试的时候本地要启动多少服务? 微服务的调试更不方便才是
    hangszhang
        55
    hangszhang  
       13 小时 50 分钟前
    这个和你们的组织架构有关系
    logic2
        56
    logic2  
       13 小时 46 分钟前
    @yinmin #17 这个跟微服务没啥关系,以前单体的服务也是无状态的,也可以前面用 nginx 负载均衡,后台直接扩容一堆单体实例,另外单体也可以用 MQ ,很多事务没必要立即完成,丢进 MQ 慢慢消费就好,关键在于思路,而不是微服务包打一切,不过这样搞下来,也差不多算得上是单体式微服务了,临时应对一下流量并发还是可以的
    0xD800
        57
    0xD800  
       13 小时 40 分钟前 via Android
    遇到一个很实在的问题,系统有两大核心接口,有一个接口耗时长,有一个耗时短。

    如果耗时长的接口占用了 io 线程,另一个耗时短的接口就没法处理,这时候应该把耗时长的单独部署出来
    blmdz521
        58
    blmdz521  
       13 小时 38 分钟前
    微服务做的好,合成单体也简单,配置改改,直接合并。为了微而拆,直接 boom
    Genshin2020
        59
    Genshin2020  
       13 小时 35 分钟前
    我入职一家公司,干的最狠的事情就是把各种功能模块给拆成单体了,比如交易系统,订单系统,配送系统,都是独立部署的,以前都在一起,崩一个,所有服务都噶。

    交易系统因为银行那边的原因,总是出现延迟问题,然后导致支付系统积压,最后内存狂增,最后 boom 。

    现在合理化服务器资源,使用突发实例的运服务器支持支付系统,虽然我离职了,但是那个公司现在也没有因为支付高并发崩溃过。
    blmdz521
        60
    blmdz521  
       13 小时 29 分钟前
    @xhwdy26 1 和 3 都是 git 版本管理,微服务和单体没啥区别,严格遵守管理就行了。2 如果只是几个十几个服务,启动时间没你想象的那么差,可能原来 20 现在 2 分钟,最差拆分多包选择启动呗,这得看业务场景多模块调用,还不如等 2 分钟呢
    whusnoopy
        61
    whusnoopy  
       13 小时 13 分钟前
    @xhwdy26 #42

    提的这三个问题,单体和微服务都没有本质区别,Google Meta 这些还全公司一个 repo 呢

    1. 几个人同时在一个项目上开发的冲突怎么解决。如果几个人开发的是项目的不同模块(之前的不同微服务),那代码就是不会存在冲突的,如果会冲突,说明之前也在同一个微服务内,之前怎么解决冲突的现在就怎么解决

    2. 合并成单体为什么就一定会启动时间增加?能加多少?原来启动一大堆微服务不也要时间?还是说分拆得够好只用重启自己改的这一个?一两分钟的话那就刚好站起来去喝口水活动一下。而且很多东西就应该先想好再写,写好一次过

    3. 某个模块拉分支,和把全局拉分支然后合回去也没区别啊,同问题一,如果是各改各的,合回去其他人有冲突的直接接受,自己改的用自己的覆盖。或者更极端一点,就不该有分支,Google 那么大个公司都不拉分支,开发过程中用参数做好隔离,旧的依然跑,新的只在参数开关打开的情况下生效,等新的全量部署后再清旧代码
    KongLiu
        62
    KongLiu  
       13 小时 9 分钟前
    我们之前有个项目,就是通过负载均衡实现单体水平扩展的,也不是不能用
    sagaxu
        63
    sagaxu  
       12 小时 18 分钟前
    @mooyo 32#
    单体的 interface 替换 implementation 有何不便?单体和微服务,只是调用方式不同,在模块划分和抽象封装上并没有什么不同。

    @yinmin 51#
    我干过的所有单个 jar 包的服务,都有 mq ,都有 redis ,甚至有专门的配置中心。单体在设计的时候,也是按照集群设计的,一般至少部署 2-3 台,并假定其中一台随时会挂,所以基本上也会按照无状态设计。我还遇到过那种大单体,但每个部门只负责其中 1-2 个 jar ,以插件形式发布,只有核心 team 有完整代码库权限。

    @0xD800 57#
    1. 耗时长的和耗时短的,可以用不同的线程池。
    2. 单体也可以模块化,部署的时候只启用部分模块。

    @Genshin2020 59#
    崩一个怎么会所有服务都噶?负载均衡网关不能自动从集群中拆除?服务监控不能自动重启?银行交易接口延迟大,改成异步,就算单机处理 10 万并发交易也 boom 不了。
    IamUNICODE
        64
    IamUNICODE  
       12 小时 9 分钟前
    降本增效+1
    xiyy02
        65
    xiyy02  
       12 小时 4 分钟前
    微服务更像是「鸡蛋不放一个篮子里」,各种服务不会一起挂,局部服务挂了直接熔断降级,不影响其他 p0 服务正常就行;但是单体应用就会受木桶理论影响,一堆的服务要为某一个短板服务买单。
    但本着「又不是不能用」的原则,看你们的取舍咯
    Genshin2020
        66
    Genshin2020  
       12 小时 2 分钟前
    @sagaxu 我去的时候,整个项目的服务只有一个入口,大概只能这么解释了,如果有你说的这些,这个项目也不会节假日人流高的时候就崩一下。

    崩一个就全崩的描述不准确,但是你可以理解为所有的车辆进城的时候都走的是一个主干道,但是西城那边没有停车位了,导致去西城的车把所有的车道都占满了,去其他城区的车进都进不来,所以看起来就是全崩了。

    已经是一个很早的项目的,可能当时的架构设计没到位,也没有想到公司会因为那三年突然发展起来。

    导致技术债太多了。

    我去的小 2 年也没有完全解决技术债,我的反感都是治标不治本,核心还是基础架构问题。
    IamUNICODE
        67
    IamUNICODE  
       12 小时 2 分钟前
    我的建议是,按照功能分出去一部分服务,但是千万不要搞得满地都是,摊子铺越大危险越多
    keller
        68
    keller  
       11 小时 57 分钟前   ❤️ 1
    很多人是不是对单体应用有什么误解?认为单体应用只能运行一个实例吗?
    a398058068
        69
    a398058068  
       11 小时 35 分钟前
    单体服务不一定是字面意思 好多公司转单体是因为微服务理念拆分的的太开,难于管理 最终合成几个大单体 然后 云原生网关托底 保留微服务架构功能的同时 应用也更易于开发了, 比如 istio + spring boot 单体
    LPJD
        70
    LPJD  
       11 小时 25 分钟前
    1. 几个人同时在一个项目上开发的冲突怎么解决?
    使用 git merge 方式合并,代码冲突了,两个开发人员一起解决问题。避免干掉别人代码。

    2. 启动时间会增加
    Idea 使用 Jrebel 热更新,避免了频繁重启。

    3. 如果合并成单体,某个模块要拉分支,应该怎么处理这个问题
    单体应用代码在同一个仓库
    ---
    1 、3 问题是 git 使用问题。
    ---
    单体和微服务看应用场景使用。需要综合考虑项目预算、业务量、硬件资源。就像通行工具也分自行车和汽车,选错了,整个团队都得加班加点,产出效率还低
    kenvix
        71
    kenvix  
       11 小时 18 分钟前
    迷信微服务本来就不可取。低成本小微企业完全不该考虑这种东西
    hxndg
        72
    hxndg  
       11 小时 6 分钟前
    不提本质区别,天天就是某种技术手段就是微服务,不这种技术就是单体。

    而且最荒谬的是,为了解决问题而选择技术手段和体系架构,而不是因为用了某种技术手段,选择了微服务

    如果连有状态,无状态,同步,异步还有微服务,单体的认识不到位。建议看看“凤凰架构”这本书
    akira
        73
    akira  
       10 小时 52 分钟前
    大部分公司的 业务体量,其实 单体更合适
    zhywang
        74
    zhywang  
       7 小时 41 分钟前
    业务量不大,团队也不大的情况下,确实单体比微服务更合适,技术是手段,业务是目的
    error0
        75
    error0  
       6 小时 50 分钟前
    自动化部署啊
    HaibaraDP
        76
    HaibaraDP  
       6 小时 42 分钟前
    nacos 、mq 、redis 这些基础设施业务上需要的话改成单体也要部署吧
    shmilypeter
        77
    shmilypeter  
       6 小时 38 分钟前
    你这个微服务拆得也不多啊,我以为是跟以前一样过度拆分呢。

    事实上拆分几个微服务,nacos 注册中心,mq 消息队列,redis 做缓存,然后上 gitlab 管理代码,还是有道理的。

    像过去一样就一个工程,前端放在 resource 里,然后打 war 包丢服务器里直接启动 tomcat ,首先配置文件得一个一个改并且有泄漏的风险,第二就是万一日志级别调错或者内存泄漏,那么一挂全挂。第三就是别人可以一键删库也可以一 U 盘拷走所有工程直接在自己服务器跑起来。如果是微服务,不太可能一挂全挂,并且只给相应仓库的权限就行了,不太可能一下子拷走你的全部工程,即便是拷走了也不可能自己服务器直接跑起来。
    coala
        78
    coala  
       6 小时 4 分钟前
    这玩意还是看需求, 可靠性要求高又迭代频繁的话单体就是找死....
    000sitereg
        79
    000sitereg  
       5 小时 51 分钟前
    套用黑猴的话 要我说都是屁。 而且是彩虹屁。 都是为了绩效,为了就业。
    我现在的外包项目,8 小时请求量一两百左右。 大概拆了 6 个微服务。哈哈。理由当然是楼上各位说的,职责,扩展,健壮....嘿嘿
    wangxiaoer
        80
    wangxiaoer  
       5 小时 34 分钟前
    @yinmin #11 单体或者微服务的选择重点并不是简单看并发数,因为单体也可以用集群的模式。我的理解是拆不拆分还是看业务之间关联度。
    highkay
        81
    highkay  
       5 小时 19 分钟前   ❤️ 4
    一般性来讲最佳实践是先上单体,然后在某个也许永远不会到来的节点升级成微服务。
    spring 有一个 modulith 项目解决单体模块化的问题,也就是为微服务铺路。
    微服务崩一个需要良好的架构设计,不然就是全都崩,没区别的。
    性能问题前面讲了很多了,如果抛开软件层面的水平差异,硬件部分只是 scale up 和 scale out 的区别,注意是区别,而非高低。
    开发管理(比如代码分支管理,基础设施)问题取决于你们团队的成熟度(或者说平均开发水平),自动化,devops ,devex 这些都和架构无关。
    所以最根本的不是微服务架构和单体架构,而是需要一个良好的架构设计。
    成功的架构是从你们团队中生长出来的,而非 copy 出来的。
    真理越辩越明。
    userdhf
        82
    userdhf  
       5 小时 9 分钟前
    微单体?新出的照相机吗?
    facebook47
        83
    facebook47  
       4 小时 58 分钟前 via Android
    好奇怎么好多在说并发的?单体服务,又不是只部署一台服务器🤣🤣🤣如果业务不是特别复杂,单体没啥问题,🈶性能问题,升级服务器就行
    jjx
        84
    jjx  
       4 小时 50 分钟前
    主要是内存 爆


    数据库连接也会到上限,但估算好了不多,而且这个不会奔溃,只是提示异常
    extrem
        85
    extrem  
       4 小时 30 分钟前
    确实很多业务根本没到依赖微服务才能 hold 住的地步,但你们这不是从 0 做起,为了解决发布繁琐的问题而要把微服务合并这是个昏招,不是应该优化一下你们的 cicd 流程吗
    extrem
        86
    extrem  
       4 小时 26 分钟前
    @whusnoopy 大公司的单 repo 不是一般的单 repo 啊,别人的版本管理整个从存储到网络都是自主开发的一套软件去做的
    nananqujava
        87
    nananqujava  
       2 小时 51 分钟前
    看得有点血压高, 实际上微服务并不是一个良好的架构,微服务也不是高性能的代表, 微服务纯粹增加开发复杂度,增加调试的复杂度
    1,开发模块问题 6 楼已经说的很清楚了
    2,扩展伸缩是 devops 的范畴, 单体也能方便的横向扩展
    3,扩展的实例信号同步通过 redis 实现
    4,队列使用基础设施的 mq, 楼上有人说单体不能用 mq 的情况,真的用过 mq 吗
    5,有人说单体崩了就全完了, 但举的例子也只是 mq 积压导致服务不可用, 跟单体或者微服务又没关系
    6,很多人说的所谓的崩溃,cpu 占用高,内存占用高,跟单体或者微服务真的没关系, 反而是依靠项目整体生命周期里的 devops 架构,运维, 跟 CICD, 测试, 实时观测, 监控关系更大点

    42 楼 项目开发上的代码冲突是 git 管理的范畴,分 module 后一般不会遇到冲突. 单体会降低启动时间, 而且在 module 里可以控制启动哪些模块, 关闭哪些模块, 在调试的时候更方便. 拉分支也是 git 的范畴, 跟单体或者微服务也没关系

    最后说下 OP 能遇到从微服务回归单体的项目就偷着乐吧, 不然十来个微服务(用户、订单、后台、网关等)你后面加不完的班, 线上出问题调试恶心死你
    nananqujava
        88
    nananqujava  
       2 小时 48 分钟前
    怎么组织 module 到一个项目里可以参考这个项目, https://gitee.com/zhijiantianya/ruoyi-vue-pro
    testcgd
        89
    testcgd  
       1 小时 36 分钟前 via Android
    如何合并成单体,几个人同时在一个项目上开发的冲突怎么解决?
    按领域分目录,不同业务领域归到不同的目录和包

    如果合并成单体,启动时间会增加,开发调试不方便,怎么面对这个问题?
    并行启动和懒加载,优化启动时间,通过配置调试的时候按需初始化

    如果合并成单体,某个模块要拉分支,应该怎么处理这个问题?
    按业务分模块,然后业务只能改自己模块的,然后按协作方式和版本来管理分支
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1378 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:09 · PVG 01:09 · LAX 09:09 · JFK 12:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.