`
顽石
  • 浏览: 166149 次
  • 性别: 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
分享到:
评论

相关推荐

    代码之美(中文完整版).pdf

    第26章 节省劳动的架构:一个面向对象的网络化软件框架 26.1 示例程序:日志服务 26.2 日志服务器框架的面向对象设计 26.3 实现串行化日志服务器 26.4 实现并行日志服务器 26.5 结论 第27章 以REST方式集成业务伙伴 ...

    linux内核模块编程.pdf(标记版)

    - **定义**:内核模块是一种特殊的软件组件,可以动态加载到Linux内核中,用于扩展内核的功能而不需重启整个系统。这些模块通常用于添加硬件支持、设备驱动等。 - **工作原理**:当内核需要新功能或硬件支持时,可以...

    追源索骥:透过源码看懂Flink核心框架的执行流程

    JobManager 会将任务分解成一系列 Task,然后调度这些 Task 到 TaskManager 上执行。 **3.3 TaskManager 执行 task** - **3.3.1 TaskManager 的基本组件** TaskManager 包括 TaskSlot、NetworkStack、Memory...

    ASP.NET公文管理系统的设计与实现(源代码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Java实现:图书管理系统,附完整代码

    Java实现:图书管理系统,附完整代码

    深圳市数字政府建设研究报告.pdf

    深圳市数字政府建设研究报告.pdf

    单片机项目:从构思到实现的全面探索

    单片机项目:从构思到实现的全面探索

    ASP基于WEB在线教育系统(源代码+论文+任务书).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    基于SSH的仿天猫商城.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    基于java的班主任助理系统的设计与实现.docx

    基于java的班主任助理系统的设计与实现.docx

    基于java的少儿编程网上报名系统设计与实现.docx

    基于java的少儿编程网上报名系统设计与实现.docx

    基于java的精品酒销售管理系统设计与实现.docx

    基于java的精品酒销售管理系统设计与实现.docx

    哈工大密码学.zip(毕设&课设&实训&大作业&竞赛&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    mysql理论知识,索引,锁等知识点的概述

    mysql理论知识,索引,锁等知识点的概述

    软工课程设计:进销存系统客户端.zip(课设&实训&大作业&项目)

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    #_ssm_097_mysql_高速公路收费系统_.zip

    均包含代码,文章,部分项目包含ppt

    健身房预约课程小程序(源码).zip

    健身房预约课程小程序(源码).zip

    软件自动定时启动器-添加可执行文件软件,设置启动的时间,也可以设置关闭的时间-供大家学习研究参考

    点击添加软件,可以添加可执行文件软件,设置启动的时间,也可以设置关闭的时间 注意,时间为00:00:00 等于没设置,这个时间不在设置范围,其他任何时间都可以 1.1更新 1:修复,设置的软件启动时间无法保存到配置文件 2:修复,设置的软件启动时间软件启动自动加载 3:修复,设置跨天,可能出现,无法执行的问题。

    华为OLT遇到GPON ONU匹配状态为不匹配处理方法说明书

    华为OLT遇到GPON ONU匹配状态为不匹配处理方法说明书

Global site tag (gtag.js) - Google Analytics