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

03 | SOA时代:成功理论与失败实践

你好,我是周志明。
SOA 架构是第一次被广泛使用过的、通过分布式服务来构建信息系统的工程实践。它有完善的理论和工具,可以说,它解决了分布式系统中,几乎所有主要的技术问题。
但遗憾的是,虽然 SOA 架构曾经被视为更大规模的软件发展的方向,但它最终还是没能成为一种普适的软件架构。
所以今天,我们就来探索一下 SOA 架构,一起来找找,它没能成为普适的软件架构的原因。通过这一讲,你能从中体会到 SOA 的设计思想与原则,理解它为什么不能成功。

三种代表性的服务拆分架构模式

在上一讲,我曾经提到过,为了对大型的单体系统进行拆分,让每一个子系统都能独立地部署、运行、更新,开发者们尝试了很多种方案。
所以,在介绍 SOA 架构模式之前,我还要先带你学习三种比较有代表性的服务拆分的架构模式。这些架构是 SOA 演化过程的中间产物,你也可以理解为,它们是 SOA 架构出现的必要前提。

烟囱式架构(Information Silo Architecture)

第一种架构模式是烟囱式架构
信息烟囱也被叫做信息孤岛(Information Island),使用这种架构的系统呢,也被称为孤岛式信息系统或者烟囱式信息系统。这种信息系统,完全不会跟其他相关的信息系统之间进行互操作,或者是进行协调工作。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

SOA架构在软件架构领域中的成功理论与失败实践是本文的主题。文章介绍了SOA架构的发展历程和相关概念,探讨了其在技术上的优势和失败的原因。SOA架构在解决分布式环境下的服务注册、发现、隔离、治理等主要技术问题方面取得了成功,但最终未能成为一种普适的软件架构。文章指出,SOA架构过于严谨精密的流程与理论,导致软件开发的全过程需要专业人员才能驾驭,限制了其普及。此外,过度的复杂性和严格的规范定义也成为了其失败的原因。文章还提到了SOA架构的发展历程和相关概念,以及对其成功和失败进行了深入分析。总的来说,本文通过对SOA架构的介绍和分析,展现了其在软件架构领域中的重要性和影响,为读者提供了对SOA架构的全面了解和思考。

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

全部留言(49)

  • 最新
  • 精选
  • 贵子
    我有一个重大发现,但是IBM力推的,我们都要冷静冷静

    作者回复: u got it

    2020-12-08
    7
    66
  • J.Smile
    经典语句:任何事物一旦脱离了人民群众,最终都会淹没在群众的海洋之中,就连信息技术也不曾例外过。

    作者回复: 毛主席老人家的高度有好几层楼那么高。

    2020-11-30
    43
  • tt
    微内核架构的目标就是可扩展,内核只有最最核心的功能。插件可以理解为适配器,所以微内核架构,我的理解就是适配器模式或者模板模式,他的目标是可扩展。但是各个模块如何通信,没有具体规定。我开发过一个数据处理系统,最核心的功能模型基本没有变过,但是扩展了好多功能,类似于这个微内核。 事件驱动架构是关于模块如何交互的,目标是解耦又可以互相协作。 有了这两点前置条件,诞生了SOA。 老师在文中提到的体现SOA更具体的几条特性,SOAP相当于数据的通讯和编解码;ESB相当于通讯模型,SDO和SCA描述了系统内的节点。 这些都是现在开发都有的概念,就类似于JSON、protobuf,HTTP,MQ,服务节点。 可能它太追求概念的形式化表达了,引入大量名词,就类似于思维被语言结构限制,所以失败了吧。

    作者回复: soa也不能说就是失败了,的确辉煌过一段时间,有过许多成功解决问题的案例。 现在soa不流行了,大量的专业概念导致学习曲线陡峭肯定是一方面原因,但不仅仅如此,现在最流行的技术,kubernetes、istio等,哪一个不是以学习曲线陡峭而出名。把一门技术做得既能解决问题,又足够简单,是很高的目标了。

    2020-11-23
    13
  • hqx
    看完老师的介绍,反倒发现soa确实是个好东西呀。嘿嘿

    作者回复: 技术没有好坏,对于适合的场景,soa可以是个好东西

    2020-11-27
    8
  • Jxin
    回答: 1.使用过。 2.愿意,每个阶段都会有新的追求和挑战,没必要因为可能会出现枯燥的工作节奏而因噎废食的放弃工业化方向的追求。 本话题的疑虑: 1.面向服务模型可以分为面向服务资源模型(更贴合OO的思想)和面向服务行为模型。 2.在SOA架构下,感觉是偏向面向服务行为模型的。而一但组件是面向服务行为模型,且软件整体的功能是通过编排组件来实现,就很容易写出面向过程的结构(行为可以拆得很细小)。 3.在sls和互联网服务化架构盛行的现在,OO该何去何从?松散灵活和收敛笨重又该如何权衡?

    作者回复: oo是以符合人类视为的视角去抽象问题。在计算机出现都头30年里,编程是完全不提oo的,都是以人类去适应计算机的视角来编写程序,“程序=算法+结构结构”的观点盛行。到了上世纪末期,计算机性能有富裕,oo的思想才开始出现,此时以符合人类视为的方式去写程序,尽管从性能和资源的角度不是最优的,但从能够让程序达到更大规模的角度是更有利的。 但是分布式系统中,网络的瓶颈和许多额外的问题,决定了运行效率并未出现富余,所以分布式的第一原则就是不要分发对象。毕竟我们必须先保证程序能够正确地运行,再去追求程序设计得更好。 Martin Fowler: First Law of Distributed Object Design: Don't distribute your objects

    2020-11-26
    3
    6
  • Geek_f455c8
    linux的设计是不是也算一种微内核的架构呢,上层系统应用调用每个方法,各应用之间隔离!放大了看,各大公司的基础平台组件是不是也可以看成微内核的一种架构呢,上层的应用都建立在对内核系统的服务之上

    作者回复: 只是做个比喻,将linux比喻为kernel,将各种软件比喻为plugins,这是合情合理的。 但是要稍微提醒一句,操作系统理论中“微内核”(macrokernel)是一个有预设定义的词汇,一般来说linux不属于微内核架构,所以这个比喻放在这篇文章下面是合适的,单独拿出来说就容易有歧义。

    2020-11-23
    3
    5
  • 而立斋
    老师在讲事件驱动架构之后,提到soap协议的诞生使得面向服务架构开始登上历史舞台。事件驱动架构跟soap协议有什么不可告人的秘密吗?

    作者回复: 不可告人的秘密……应该没有吧。 原文的意思是,Event-Driven(前置条件1) and SOAP(前置条件2) == true,所以SOA可以登上历史的舞台。

    2021-01-29
    4
  • walnut
    你是否愿意软件开发向着工业化方向发展,让软件类似工业产品制造那样,可以在规范、理论、工具、技术的支持下,以流水线的方式生产出来? 个人以为软件不可能能像工业产品一样流水线生产。就算有,也会有聪明人改进之。万事发展都是螺旋式上升,都是在不断发展变化的。就像人月神话中说的,没有银弹。

    作者回复: 期望工业化地解决全部软件问题不太现实,但工业化地解决软件中一部分问题,尤其是较初级、较低端的一部分问题,我认为是有可能的。就是有可能那时候大家并不愿意承认那些也属于“软件开发”的范畴了。 下面文字引至网上的新闻: 可以和印度软件业相比较的是,中国的低端制造业务,譬如衣服,鞋子,玩具,箱包。 已经做到了高度的市场化,分工合理化,中国形成了领带,纽扣,拉链。。。等各种门类齐全, 零件生产流水线,产量大,生产成本低。对应到印度软件,就是其流程清晰,管理严格。从需求分析-系统设计-功能设计-开发-测试,环环相扣, 每一个环节的流程监督和质量控制都做到位。同时印度的软件公司更象软件工厂,几千上万人的软件公司不在少数。一年产值几亿几十亿美圆。

    2020-12-19
    3
  • 小高
    思考题:互联网行业的产品是不适合这种模式的,因为需求一直在变,软件变更就会频繁,这对开发者来说是一种噩耗。但是对于那种有苛刻要求的,比如工控系统类的软件系统是可以按照这种标准的。课后感悟:SOA感觉太重了,实在不适合互联网行业的软件开发,这就促使了后面的敏捷开发诞生吧,个人感悟,望老师指正!

    作者回复: 技术没有好坏,只有合适,soa(以及任何一种架构)有适合的场景,也有不适合的

    2020-11-27
  • Geek_17f1e0
    Soap用过,本身特别复杂。使用起来没有框架简直不可能。当时用的axis去解析wsdl file。本身复杂,学习曲线也大。回来的rest明显简单很多。

    作者回复: 这个星期更新的3节课会讨论到各种远程服务的问题。

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