架构师杂谈

序言

        一路跌跌撞撞、摸爬滚打做软件架构已有七八载,从鸿蒙初开到明心见性,从罗汉渡己到菩萨渡人,一介凡尘终是轮转不息。当我们拿着Martin Fowler "Patterns Of Enterprise Application Architecture" 时,"Microservice Architecture Style" 成为云时代天选之子,当我们秉烛夜读 "Pattern-Oriented Software Architecture" 时,"Just Enough Software Architecture"成为架构师的中庸之道,终是不得道生一。但仍执着于一见无始道成空的架构设计,胜天半子的架构规划,独断万古的架构决策,至死不渝追求究竟。

        有些架构方面书籍喜欢脱离业务讲设计或者脱离抽象讲业务,会让读者觉的抽象难懂或者太浅,本文会给读者架构领域一个全貌概念概览和相互之间的关系作用,不会讲怎么去做软件架构设计,更多的是讲架构概念和架构思想,架构方法需要读者自己在工作中实践。希望本文对想转架构师的程序员或者初入架构师有一定的借鉴作用。江湖中不曾见过,但江湖中留过笔迹,仗剑山河人间!

架构思维

        人类四大思维:演译、归纳、溯因、类比

        架构思维:分治、分层、抽象、演进,溯因更多是在架构设计过程中用到。

        分治:复杂问题简单化思维,按类别拆分。需要注意拆分的标准,寻找到最适合组织、业务发展的边界进行拆分(可以按业务域边界进行拆分,可以按组织职能拆分。如果涉及组织需要考虑康威定律,组织对架构的影响,俗称干系人影响)。

        分层:与分治思维类似,分层是横向,分治是纵向。分层思维能很好的处理业务融合,破壁垒,形成新的价值链,每一层都界定了职责和角色。

        抽象:提炼组合的思维,OOP思想里面的继承或者接口就是一种抽象思维。

        演进:一个好的架构肯定是螺旋式上升发展的一个过程,一个熵减的过程。(一个企业的EA熵减做的很好,那么可以推断这个企业在快速有序发展,值得呆下去)

        分治、分层、抽象、演进是基本的架构思维,在工作当中经常用到,相互配合使用,才能设计出一个好的架构。参考架构用的是类比思维,架构治理用的是溯因思维,识别组件、组件之间关系及组件与环境之间的关系用的是抽象、分治、分层思维(归纳思维)

架构框架

        架构框架是一个基础结构或结构集合,可被用于开发更大范围的不同架构。架构框架应描述一种方法,用于基于一系列构建块来设计Enterprise的目标状态,并表明构建块如何适配地结合在一起。它应包含一系列工具,并提供一个常用词汇表,也应包括能够用于实现构建块的推荐标准和合规产品的列表。

TOGAF的框架能力:

                           (图片来源:01_structure.png (946×768) (opengroup.org)) 

TOGAF框架提供了架构开发方法、架构内容框架、架构能力框架等连续统一工具集,输入业务愿景和因素驱动后,使用TOGAF框架方法和工具集设计,可以达到预期业务能力。

架构模式

       《Pattern-Oriented Software Architecture》明确定义了架构模式:描绘基本的软件系统组织纲要,提供了一组预定义的子系统,指出了这些子系统职责,包含用于对子系统间关系进行组织的规则和指南。模式包含三部分:背景(Context)、问题(Problem)、解决方案(Solution),基于这个定义我们也可以把某个领域经验抽象、结构化后定义为架构模式,形成特定领域解决方案,再推广、复用、形成标杆。

        维基百科的定义:An architectural pattern is a general, reusable solution to a commonly occurring problem in software architecture within a given context.

架构模式是一个通用的、可重用的解决方案,用以解决特定上下文内的某个常见的架构问题

简单些说模式是对特定领域问题解决方案经验沉淀,直接套用就行了,从而提炼出一套行之有效的结构化的模板。比如:MVC模式、CQRS模式、Cache-Aside模式、Compensating Transaction 模式(常说的TCC编程)等,另外近些年流行的微服务相关的一些模式如:防损模式(Anti-corruption layer)、大使模式(Ambassador)等,这些模式都是工作中特定问题很好的解决方案。架构模式在工作种用的是最多的,架构师要多熟悉些架构模式。

架构风格

        架构风格目前没有统一定义,百度百科的定义是架构风格即架构模式。

An architectural style is a coordinated set of architectural constraints that restricts the roles/features of architectural elements and the allowed relationships among those elements within any architecture that conforms to that style.(内容引自Chapter 1 Software Architecture 1.5 Styles:Untitled Document (uci.edu)

一种架构风格是一组协作的架构约束,这些约束限制了架构元素的角色和功能,以及在任何一个遵循该风格的架构中允许存在的元素之间的关系

Azure的定义:架构风格是一系列约束,六大架构风格分别为大计算、大数据、事件驱动架构、微服务(Martin Flower支持微服务是一种架构风格)、多层架构、Web-队列-辅助角色。

比如:选择了流式计算Spark框架,那就得接受Spark的微批处理约束,时效性达不到Flink真实实时流框架效果,但Flink的背压效果肯定是没有Spark的背压效果精准。

比如:CAP理论,选择CP或者AP,是两种不同的架构风格,选择了AP架构风格,就得接受数据不一致的问题。

架构风格和架构模式的关系:架构风格只强调约束,选择某个框架即会受到这个框架的约束,那本身就是一种架构风格。架构模式强调问题、上下文、解决方案(方案本身就带有约束),当一个架构风格应用到某个【问题域】和【上下文】,那么这个架构风格在这个【问题域】和【上下文】的应用就是架构模式。

梳理下架构框架、架构风格、架构模式的关系:

                        

企业架构(Enterprise Architecture)

        架构:ISO/IEC 42010:2007明确定义,"The fundamental organization of a system, embodied in its components, their relation-ships to each other and the environment, and the principles governing its design and evolution."

"一个系统的基础结构(organization 翻译为结构更易懂),体现在系统组件、组件之间及组件与环境之间相互关系,以及对系统设计演进进行治理的原则中"

这个定义是很全面的:引入了环境、设计、演进、治理的概念,很多对架构的定义停留在识别组件、组件之间关系上面。

Enterprise Architecture本质就是战略、业务与技术的综合。(解决领导一句话需求即:目标和愿景)定好方向(战略),用一套业务流程实现战略,IT支撑业务发展。TOGAF提出了ADM架构开发方法,整个流程由架构愿景、业务架构、信息系统架构、技术架构、机会和解决方案、迁移规则、实施治理、架构变更管理组成,形成解决方案连续统一体工具集。每个阶段都均指向需求管理,一切以需求需要做为出发点,并反向驱动需求。架构工作需指向企业愿景、目标及战略从而更好的解决业务需求,任何活动都围绕业务展开。比如:引入Redis带来了什么业务价值,通常需要从技术价值去反向推导出业务价值。

                                ​​​​​​​        

TOGAF ADM由架构愿景、业务架构、信息系统架构、技术架构、机会和解决方案、迁移规则、实施治理、架构变更管理组成,形成一套统一连续的Enterprise Architecture 工具集。有些书箱会把业务架构合并到信息系统架构中,业务架构上承企业战略,下启信息系统架构,同时需要确保业务架构和IT落地保持一致,业务架构独立更能起到应有的作用。 这张图的核心是企业一切活动、设计均指向需求管理,一切都需要服务好业务,业务第一原则。

TOGAF内容元模型各SOA实体关系:

                        (图片来源:34_contentfwk8.png (940×768) (opengroup.org)) 

 信息系统架构提供业务服务来支撑业务架构,业务架构支撑企业战略,企业战略实现企业目标和愿景。我们在做技术架构设计、应用架构设计、业务架构设计时均要反思我们的设计是完全指向了企业战略,如果方向错了需要及时调整。(这里不考虑战略是错的情况)

                                  (图片来源:企业级业务架构设计:方法论与实践)

                                 (图片来源:企业级业务架构设计:方法论与实践)

上述两张图更清晰的表达出企业愿景、目标、战略、业务架构、信息系统架构的关系。近年比较流行破壁垒的说法,架构层面说法是破烟囱。这个问题是一个管理问题,组织+业务经营单元层面需要切分出一个合理的边界,业务架构层面梳理出横向的业务价值链进行融合,信息系统架构层面做好应用、数据的融合(数据中台、大中台),Devops层面采用用户价值流为导向破除项目的阻塞点。企业架构的内容很多,架构原则、架构治理、架构能力框架等,这些内容比较好理解,关联性并不强,重点是业务架构、信息系统架构(云时代简化了信息系统架构所包含运维层面工作部署)、技术架构,可以选择参考架构做类比,不论怎么做都要指向业务价值。组件识别、组件之间七种低藕合和七种高内聚关系选择、架构的质量需求等是一个长期积累的过程。

最后祝大家虎年快乐、大吉大利、阖家幸福、财源滚滚、步步高升。

注:

1、架构师不能接触到Enterprise Architecture,可以围绕某个业务域去作展开分析,切换Architecture Context。

2、引入Redis是技术对业务的支撑,引起业务活动、业务流程及业务价值链变化而调整业务架构甚至战略,可称为技术驱动业务。

3、TOGAF中明确说明Enterprise并不是指企业,而是泛指复杂的组织,比如企业、政府,但文中Enterprise皆指企业

4、更多的模式可以参考代表模式 - Cloud Design Patterns | Microsoft Docs

5、组织原型:职能型、矩阵型、市场型,需要结合企业市场特点、数字化程度来决定采用某种组织原型

参考文章与书籍

《TOGAF 标准9.1版本》

《恰如其分的软件架构》

《四种核心架构思维》(123条消息) 四种核心架构思维_架构师波波的专栏-CSDN博客_架构思维

《真正的高手,都是对抗"熵增"的底层思维》真正的高手,都有对抗“熵增”的底层思维 (qq.com)

《产品经理底层内核之--熵减思维》产品经理底层内核之——熵减思维 (baidu.com)

《康威定律》(124条消息) 康威定律_javaDB_EAD的专栏-CSDN博客_康威定律

《Cloud Design Patterns》Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications | Microsoft Docs

《DevOps实践指南》

《企业级业务架构设计方法论与实践》

《完美世界》

《遮天》

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
付晓岩:虽然做了六年的企业级业务架构,但是总觉得业务架构不是个好讲的东西,业务架构离不开业务模型,所以讲它就会搬出一堆枯燥的模型来,甚至会让人觉得业务架构就是建模。但建模只是个手段,建模的目的是把现象总结成模式,再从模式中找到结构,将业务上看到的结构传递给技术,如果二者能够基于同一结构思考,沟通上将产生最大的便利,这就是通用语言的基础,其实说通用语言,还不如说通用结构,因为说语言,经常会把人带到语法层面,纠结于规则、概念、标准之类似是而非的东西。所以,我总结建模的原则无非是把握整体、穿透现象、保证落地,建模即不能死守规则、冥顽不化,也不能脑洞大开、信马由缰,必须从一开始就关注如何落地。建模不是建个自圆其说的乌托邦,而是传给后续过程的设计图纸。业务建模可以有前瞻性,但是所谓的前瞻性是能够看清分阶段实施路径的前瞻性。 业务架构是不断演进和迭代的,它有生命力,可以成长,如果架构管理工具本身支持历史记录和模式比对,你也可以看到企业架构的演进历史,而不是只看得到现在,只能听别人讲讲过去,过去是可以看见的。这种可视化的历史是一种宝贵的学习资源,人是从历史中学习未来的,毕竟有很多行业还是需要积淀的。 但是,业务架构的形成过程的确是在一种看起来科学的方法论下,不完全科学地操作的,这点我曾经也很纠结,后来软件架构的书看多了,再加上到项目中的观察,也逐渐释然了。软件架构其实很羡慕建筑架构,觉得建筑架构有力学基础做支持,有很多可以计算的东西,但是软件架构却没多少能算出来的。在开源思想时兴之前,行业内部交流分享较差,都比较愿意看别人的架构,而不想亮出自己的,很多研究者都抱怨这个非常需要标准的行业反倒是很隔离的。开源为架构和软件带来新的成长方式,共享让思维发展更快、普及更快,但是,软件架构本身却只是增加了大量的案例,依旧难以标准化,哪怕是同一个行业的企业,给这家做的软件也不一定能直接搬到另一家去,很多商用化了的系统软件也还是离不开个性的本地化改造过程。云计算带来的 SaaS 虽然让软件应用省去了许多部署过程,但是,依然难以改变这个行业个性化程度严重的局面。软件架构尚且如此,业务架构也就不需要纠结了。 业务架构设计可以很快,也可能很慢。快无非是两种情况,一是架构师自身炉火纯青、天生慧眼,设计能力超强;二是原有业务模型已经很清晰,可以快速分析业务变化,形成架构设计,我们可以追求的是第二种,这也意味这首次建模,尤其是首次建设企业级模型,不要过快,对模型设计方法、业务流程分析、标准化过程,都要细致点儿,基本功扎实了,才有后边的“敏捷”。企业级转型没有轻松的,不少企业是把转型仅当成一个项目,而忽视了对自身的调整。一个普通士兵变成一个特种战士,不是因为给了他一身价值 10 万的装备,而是经过了地狱般的训练。上至最高管理者,下至普通员工,人的思维不转变,哪来的企业转变呢? 为了推动企业真正的数字化转型,业务架构设计人员永远不要忘记,业务架构最重要的职责不是传递需求,而是藉由自身的努力,推动业务和技术的深度融合,桥梁作用才是业务架构最重要的职责,如果不能实现这一目标,也就不能真正实现一个快速响应内外部变化的企业级业务系统。 其实中台并非万能,客观地讲,一个优秀的架构设计人员是不会“迷信”于任何一种架构设计方式的,也不会执着甚至偏执于方法间的争论,没有哪种设计方式是完美无缺的,软件行业没有“银弹”,任何一种方法都需要坚持与灵活的结合,都需要通过长期的实践不断总结和改良,如果一个方法没有被坚持数年以上,可能连入门都谈不上吧。我对中台认识更多还只能算个一般观察者,论述中难免有失,感谢读者朋友们能够宽容地看我一路“叨叨”下来。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值