从微服务走向单体化

276 天前
 xhwdy26

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

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

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

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

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

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

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

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

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

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

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

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

不同时期有不同需求,分久必合合久必分。
NotLongNil
276 天前
你们并发多少?
yinmin
276 天前
@xhwdy26 #15 CEO 又不会上机直接操刀,“简化部署,只一台机器搞定”,你就一台机器装 docker ,为每个微服务写一个 compose file ,汇报的时候说:已经微服务改成子系统模块了,程序基本不用改。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1106152

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX