周志明的软件架构课
周志明
博士,远光软件研究院院长,《深入理解 Java 虚拟机》《凤凰架构》等书作者
54202 人已学习
免费领取
课程目录
已完结/共 74 讲
架构师的视角 (24讲)
周志明的软件架构课
15
15
1.0x
00:00/00:00
登录|注册

02 | 单体系统时代:应用最广泛的架构风格

你好,我是周志明。今天,我们一起来探索单体系统时代。
这一讲,我会带你去了解以单体架构构建的软件系统,都有哪些优势和缺点,还有哪些容易让人产生错误理解的误区。在探索的过程中,你可以同时思考一下,为什么单体架构能够在相当长的时间里成为软件架构的主流风格,然后再对比下我在这一讲最后给出答案。

大型单体系统

单体架构是绝大部分软件开发者都学习和实践过的一种软件架构,很多介绍微服务的图书和技术资料中,也常常会把这种架构形式的应用称作“巨石系统”(Monolithic Application)。
在整个软件架构演进的历史进程里,单体架构是出现时间最早、应用范围最广、使用人数最多、统治历史最长的一种架构风格。但“单体”这个名称,却是从微服务开始流行之后,才“事后追认”所形成的概念。在这之前,并没有多少人会把“单体”看成一种架构。
如果你去查找软件架构的开发资料,可以轻轻松松找到很多以微服务为主题的图书和文章,但却很难能找到专门教我们怎么开发单体系统的任何形式的材料。
这一方面体现了单体架构本身的简单性;另一方面也体现出,在相当长的时间里,我们都已经习惯了,软件架构就应该是单体这种样子的。
那在剖析单体架构之前呢,我们有必要先搞清楚一个思维误区,那就是单体架构是落后的系统架构风格,最终会被微服务所取代。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

单体系统架构在软件开发中扮演着重要角色,尽管在微服务兴起后备受质疑,但实际上它仍具有诸多优势。文章首先澄清了单体系统并非一定是“不可拆分”的“巨石系统”,而是可以在纵向和横向上进行拆分和扩展的。从纵向角度看,单体系统可以采用分层架构,实现不同层次的拆分和数据流转传递;从横向角度看,单体系统也可以支持按技术、功能、职责等角度进行模块化拆分,以便重用和团队管理。此外,单体系统在开发、部署、测试等方面也具有便捷性,且可以轻松实现横向扩展以分摊流量压力。 对于小型系统来说,单体系统不仅易于开发、测试、部署,而且由于各功能、模块、方法的调用过程在进程内进行,因此运行效率也高于分布式系统。因此,单体系统并非一定落后于微服务,而是根据软件的性能需求和开发人员规模来选择合适的架构风格。文章强调了单体系统的灵活性和适用性,为读者提供了对单体系统的全面了解和认识。 总的来说,本文通过对单体系统的优势和误区进行了深入探讨,帮助读者更好地理解了单体系统架构的特点和适用场景。文章内容简洁明了,为读者提供了全面的技术视角,使读者能够快速了解单体系统架构的重要性和优势。文章还提到了单体系统的缺陷,如隔离与自治能力上的欠缺,以及在系统规模扩大时的部署成本和技术升级迁移成本的问题。这些观点有助于读者全面了解单体系统的优劣势,为其在实际应用中做出明智选择提供了参考。

该试读文章来自《周志明的软件架构课》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(64)

  • 最新
  • 精选
  • 小高
    单体架构并不是一无是处,在公司的初始阶段,为了业务的快速上线,必须得采用单体架构,随着业务的增长,架构才得以演进,还是那句话,架构不是一层不变的,是持续演进的,或许,微服务也不是终点。

    作者回复: 这个观点我完全认同。

    2020-11-20
    3
    36
  • 超超不会飞
    单体架构在“小卖部”阶段很合适,随着“小卖部”越来越大,会被拆分成微服务,而随着微服务的不断迭代,肯定会有某个微服务变成另一个大单体,还是得继续手动拆分,我觉得如果有一种架构可以”自适应“业务的大小,就想前端网页自适应屏幕大小一样,那就非常爽了。

    作者回复: 小卖部到大超市的过程中,业务需求变得更复杂,算力要求变得更高。 算力需求变得更高这个方面,确实有“自适应”的方案,即目前所说的无服务架构。 业务需求变得更复杂这个方面,涉及到人与技术的管控,这点估计在很长时间内都只能靠开发者自身知识的进化来适配。

    2020-11-21
    2
    20
  • Frank
    个人觉得说白了还是单体,比如你做微服务后,每一个服务其实还是单体,还是需要一些单体的理念去看待服务的生命周期等。微服务只不过是在规模大了之后,如何更好的发挥出单体的价值逐渐演化而来。

    作者回复: 微服务确实可以理解为“一群能够配合良好工作的、关注各自领域的小单体”,或者说它们最终会是殊途同归的。 微服务与单体之间的关注点差异不在于“大与小”,而在于一群小单体“能够配合良好工作”, 这中间涉及到许多既麻烦又不得不去处理的事情。

    2020-11-21
    3
    15
  • zhanyd
    单体系统适合小项目,小并发,快速开发的项目。 单体系统应该是朝着越来越简洁,标准化的方向发展,可以单独部署成为一个独立的系统,也可以非常方便的加入微服务体系,成为分布式系统的一部分。 就像一个有完整功能的标准件,能够单独使用,也可以组装成大型机器。

    作者回复: 这确实是单体的优势,未来单体不会消失。

    2020-11-20
    7
  • 流云
    老师您好,文中提到单体架构不兼容fenix特性,这句话怎么理解呢?单体架构通过集群方式部署不也是具有一定的可靠性吗

    作者回复: 多数生产中的单体系统也会做集群部署,也会有服务冗余,也会进行主从热备。但是这些是运维阶段的“补救措施”,在开发阶段,单体系统是不会考虑也很难去考虑服务崩溃、恢复等弹性措施,也很难去考虑容错、治理等韧性措施的。 举个例子,当你开发单体系统时,会不会在设计期去考虑“一旦程序发生OutOfMemory,该如何处理?”这样的问题?如果真的想过,你是否有什么有效的处理措施?

    2020-11-20
    3
    5
  • Geek_15ebb6
    单体架构对于“小卖部”而言,是特别适用的。但如果“小卖部”越开越大,就要做好向微服务转型的准备。未来的发展方向,我觉得是如何快速,平滑地从单服务到微服务地转换。

    作者回复: 随着产品规模的扩大,许多单体都会向微服务发展,但单体本身并不会消失。简单程序、小项目的需求不可能消失,所以单体一定会继续存在。

    2020-11-20
    2
    4
  • tt
    我觉得,单体架构从业务视角来看,是端到端的,一个系统就可以把某个业务流程全部搞定,比如订单、支付、库存,而分布式会把这些业务域拆分到不同的服务中。 单体架构会往哪个方向转变?我觉得会向分布式学习,不会出现巨大的单体了,可能会变成单元式架构。比如以前的缴费业务单体架构是支付、冲正在一起,商户端处理与银行主机端在一起,以后可以变成四个单元,每个都有自己的数据库,然后通过消息队列连接在一起,这样业务逻辑处理简单多了,即一个大单体变成了四个小单体。

    作者回复: 微服务确实可以理解为“一群能够配合良好工作的、关注各自领域的小单体”,或者说它们最终会是殊途同归的。 微服务与单体之间的关注点差异不在于“大与小”,而在于一群小单体“能够配合良好工作”。

    2020-11-20
    3
  • Wacky小恺
    我认为未来的单体架构,应该会朝着多个服务冗余负载的方向发展,单体架构的劣势是每当系统某一模块出现问题时会影响其他部分,而排除模块本身设计或实现缺陷之外,是完全可以使用主备切换的方式来快速解决问题的。 因此如果继续采用单体架构,那么我们就应当允许冗余部署,增加服务数量,来提高容错率。

    作者回复: 主备的想法我赞同。不过今天这样得想法很难说是“未来的发展”了。用于生产的单体系统,无论是为了应对更高的流量,还是为了更可靠的服务,冗余部署都已十分常见。

    2020-11-20
    3
  • STOREFEE
    如果可以很明显预估到项目的开发规模不会很大,但是对性能要求很高,局部范围需要经常迭代,而且需要多点部署的场景,就非常适合单体架构。 我观察到,凡是和互联网沾边的流行的软件项目基本规模都在不断膨胀,趋向于包罗万象。因为现在很多用户会觉得软件越来越多,去切换不同的东西太麻烦了,有的还得申请账号,填写资料等繁琐的事情。最明显的例子就是石墨和飞书。前几年感觉石墨文档很贴近word, 挺不错的。现在飞书,企业微信等工具整合企业聊天,会议,文档,存储,绘图等等一些列的东西。 这样就是一站式服务,绝对会是采用的非单体架构。

    作者回复: 是的

    2020-11-28
    1
  • 尹恒
    我觉得Serverless是另一个层面的单体啊,只不过把操作系统、运行时换成云基础设施,从开发者的角度,反而更像我们以前写单体程序的感觉了,甚至更单了,连纵向分割都没有了

    作者回复: Serverless某种意义上就是另一种单体。

    2020-11-23
    1
收起评论
显示
设置
留言
64
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部