`
顽石
  • 浏览: 166820 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

软件架构分解后记

 
阅读更多

 

  <<软件架构分解>>一文在IBM developerWorks中国网站发表后,得到较多外界关注,包括业界知名的InfoQ网站和多个其他网站的转载,阿里同学以及其他公司的同行也有兴趣做交流,具体见博文底部截图。

 

    核心内容3年前在阿里巴巴工作时给少部分人分享过,这次发表对内容进行了充实,补充了一些图片,以便更好理解。

 

  庖丁解牛的故事绘声绘色地描述了庖丁高超娴熟的解牛技能。技进于道,庖丁在解牛的实践中,已经超越了解牛的技能层次,由具体的技术升华到道或艺术的层次,悟到了解牛之道。道在日用,任何行业中都有道,就看你能否悟道。软件架构分解同样也存在从术到道的超越,哪软件架构分解的’解牛‘之道是什么?

     答案可以用一句话来概括,那就是多维度多层次的立体分解。例如我们可以按业务维度、涉众类型(和你关注的系统有关联的用户和其他系统)维度、请求类型维度(请求类型有多种分类方式,一种是按读或写来分类,此时我们分解的结果就是读写分离)、性能维度、系统逻辑层次(例如前台、后台等)维度等。

    分解维度的识别,如果哪个维度成为你关注的重点或痛点,那它就可作为分解的候选维度。

 

    文章主要内容:提出了架构作用力的概念和架构本质论、软件架构分解过程框架、多维度多层次分解模型。不局限在软件领域,关于架构的本质,有的认为架构的本质是对系统复杂性的掌控,这个也不完全对,并且这种看法还是偏向于形而下的一种认识。难道相对简单的系统或事物就没有架构?即使简单的系统和事物也存在合适/合理的架构或结构,此时架构对复杂性的掌控何在?此时的架构本质可能体现在结构体各部件间的和谐、平衡和简洁之美。

 

  涉众就是UML Use Case中的Actor,在一个系统中存在多种涉众,例如系统用户、投资者、需求分析师、架构师、开发人员、测试人员、客服人员、运维人员等等。涉众也可以是和系统交互的外部系统。

 

 这里的涉众概念是广义的有层次的,当对一个架构元素进行架构设计时,例如某子系统,则和该子系统有交互的其他子系统或外部系统也可认为是该子系统的涉众。对各种约束,其来源方(他们通常制定或产生约束)也可以认为是涉众。

 

 这些涉众在架构层面有各自的架构需求(关注点),例如投资者关注成本和上线时间;开发设计人员希望系统架构清晰,便于理解,关注代码重用性、扩展性、可维护性。架构师更关注系统可伸缩性、可用性、性能等质量需求和各种约束(技术约束、法律法规合规性约束等)。这些需求和约束必须在架构层面加以考虑,结构决定功能是自然界的普遍法则,在软件架构领域,这些需求和约束也必然要在软件架构上得到体现,从而使这些涉众的需求在架构层面得到足够的满足。

 

 软件架构中的各个架构元素(子系统、模块等)是如何识别产生出来的?分解是一种识别架构元素最常用的方法之一。罗马不是一天建成的,对复杂的软件系统,其架构设计通常不可能一蹴而就,遑论架构演化。对复杂的软件系统进行架构分解,需要有经过验证的方法论来指导,这篇文章提出了一个架构分解的过程框架,并进一步阐述了如何进行架构分解以及迭代和演化,主线是从业务架构出发,先梳理好业务架构,包括业务流程、业务边界上下文和其包含的业务功能、业务领域模型、业务逻辑业务规则、业务战略、组织架构和业务涉众。再从业务架构主要是粗粒度的业务边界上下文映射出初步的应用架构,应用架构用来支撑和实现业务架构业务功能,也就是通过这些应用之间的协作来实现业务功能,此时的应用架构中很少有技术的成分在内,一些应用可能还需要进一步拆分。接下来深入到应用架构中的每个应用内部进行技术实现,考虑非功能需求,加入技术上的架构元素,例如数据库、缓存、技术基础设施、分层服务等,产生技术架构包括数据架构,技术架构用来落地应用架构。总体而言就是从业务架构到应用架构,再到技术架构,一步步逐步充实、丰富、完善,像一颗缺少枝叶的小树一样,逐渐越长越大,枝叶越来越多,最后成为一颗枝繁叶茂的大树,最终产生软件系统架构。

 

 分解的粒度不是越小越好,是综合权衡下的适当粒度的分解,分解为微服务不一定合适,很多中小公司的系统就不适合。分解可能是逻辑上的,也可能是物理上的。

 

 软件架构设计除了分解还有组合(集成),分解主要是自上而下的,而组合是自下而上的。在实际的架构设计过程中,它们通常是互相交融相互结合进行的。

 

 科学最终会上升为哲学,哲学的终极就是道,在软件架构形而下的定义之外,上升到更高的抽象层次,对架构(不止局限于软件架构)形而上的本质也做了一些探讨。

 

 具体内容详见IBM developerWorks上的软件架构分解。IBM已将该文作为新兴技术大学的学习课程,见IBM新兴技术大学课程链接。阿里巴巴的同学有兴趣做交流,如下图。infoQ网站上也有相应的介绍,见链接https://www.infoq.cn/article/2014/03/linkedin-log-arch-weekly



 

 

      阿里同学的交流请求


 

     

  • 大小: 108.7 KB
  • 大小: 40.6 KB
  • 大小: 15 KB
分享到:
评论

相关推荐

    Think in UML大象(架构师必备,珍藏版).part05.rar

    大象--Thinking in UML(09年度畅销榜NO.3) 作者: 谭云杰 出版社:中国水利水电出版社 ISBN:9787508460468 出版日期:2009 年1月 编辑推荐 这是一本令众多开发网友企盼了一年之久的书. ...后记

    软件工程思想

    《软件工程思想》讲述“软件开发”和“做程序员”的道理,视野独特,构思新颖,内容风趣,不落窠臼,令人耳目一新。堪称难得,以至回味无穷。 &lt;br/&gt;作者从事了八年的软件开发工作,在他的博士学位论文完成之际写...

    企业级IT架构分享 云计算架构师成长之路 从企业管理的角度重塑企业IT架构 共20页.pdf

    #### 四、后记 在不断的学习与交流过程中,我们可以更加深刻地理解如何从企业管理的角度重塑IT架构。这不仅有助于提升个人的职业技能,也为企业的可持续发展提供了强有力的支持。通过不断地探索和实践,我们能够更...

    五年级数学:《小数乘法》单元教学后记.pdf

    五年级数学:《小数乘法》单元教学后记.pdf

    后记范文.doc

    后记范文.doc

    Think in UML大象(架构师必备,珍藏版).part04.rar

    大象--Thinking in UML(09年度畅销榜NO.3) 作者: 谭云杰 出版社:中国水利水电出版社 ISBN:9787508460468 出版日期:2009 年1月 编辑推荐 这是一本令众多开发网友企盼了一年之久的书. ...后记

    数据结构学习(C++)——后记.docx

    数据结构学习是计算机科学中的重要组成部分,特别是在C++编程中,它涉及到如何高效地组织和管理数据,以便进行快速检索和处理。本文主要探讨了作者在C++中学习数据结构的过程,以及对C++和C在数据结构实现上的比较。...

    后记怎么写.doc

    后记怎么写.doc

    七年级数学上册 9.16 分组分解法教案 沪教版五四制-沪教版初中七年级上册数学教案.doc

    教学后记与反思部分,教师记录了课堂时间分配,学生参与度,以及教学效果的自我评估,以供后续调整教学策略和改进。 总的来说,分组分解法是七年级数学中的一个重要技能,它锻炼了学生的逻辑思维能力和解决问题的...

    论教学后记的重要性 (2010年)

    教学后记是教学活动中的一个重要环节,它不仅帮助教师记录和反思教学过程中的各种细节,而且对于提升教学质量、促进教师自我成长具有重要意义。以下详细阐述教学后记的内容、作用及其重要性。 一、教学后记的内容 ...

    政治课教学后记.doc

    【政治课教学后记】 政治课的教学不仅要遵循教育的基本原则,还要紧密结合现实生活,与时俱进,以激发学生的学习兴趣和参与度。鲁桂芳老师的教学反思强调了教学后记的重要性,它是教师提升教学质量,积累教学经验,...

    教后记:教师专业发展的助推器.docx

    教后记是教师专业发展的重要工具,它是一个教师在完成课堂教学后,以文字形式记录、反思和总结教学过程的行为。这种记录不仅仅局限于简单的课堂活动记录,而是基于对教学行为的深度观察、反思和分析,旨在提升教学...

    软件需求(pdf文档)

    本书讲述了软件开发中一个至关重要的问题—软件需求问题。软件开发人员及用户往往容易忽略信息沟通,导致软件开发出来后,不能很好地满足用户的需要。而返工则不仅在技术上给开发人员带来巨大的麻烦,而且...后记 171

    JAVA软件工程师简历模板包

    如果你是一个正在求职的java软件工程师,那么你下这个资源绝对没错,里面有37个人的java软件工程师求职简历,相信你参考以后定能找找的自己满意的工作。 后记:本人3个月前刚刚java培训班毕业,参考了这些模板后,写...

    IPA/SEC日本软件开发(项目)数据调查报告(2007)

    4. **技术趋势**:报告还关注了当时的技术发展趋势,如新兴编程语言的使用情况、架构模式的选择等,这对于预测未来软件开发领域的发展方向具有重要意义。 5. **国际合作**:随着全球化的加深,跨国软件开发项目变得...

    软件工程思想-讲述软件开发和做程序员的道理

    软件工程主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总结。 第一章 软件工程基本观念 1.1 软件工程的目标与常用模型 1.2 软件开发的基本策略 1.2.1 复用 1.2.2 分而治之 ...后记

Global site tag (gtag.js) - Google Analytics