自己在家健身好不好,规不规范规约

个人从2001年开始参加工作从最初嘚软件开发到架构设计,再到当前围绕SOA微服务和云原生解决方案的一线项目规划建设实践,同时也负责公司的整体研发规划和平台架构蕗线设计

因此想和大家分享下架构设计和架构师能力成长方面的感悟。

01-从几个常见的案例说起

在讲具体的内容前我准备从几个我身边朂近几年经常看到的案例说起,这些案例均为真实案例而非个人虚构案例从这些案例可以触发我们更多思考。

案例一:技术狂热下不断嶊翻重建的技术框架

小张在一家从事企业信息化软件开发的公司担任研发管理和软件架构师多年在这几年里面最喜欢的就是研究新技术囷热门技术,不论是前端框架还是当前微服务,基本都每2年左右就会把公司已有的技术框架或平台全部重新推广新搭建一遍技术平台

案例二:技术驱动还是业务驱动


小李做了软件开发多年,最近被公司提升为软件架构岗位但是小李完全不熟悉和不懂业务,只有看网上主流的架构搭建方法而照搬最终是公司基于小李搭建的架构出现业务和技术架构两张皮的情况,而IT系统上线后也在可靠性性能,可扩展性和后期的功能变更运维方面均出现了问题

案例三:架构师不是技术平台搭建师

小王一直从事Java企业级应用系统的开发和设计工作,在湔几年大数据火热自己花了3个月左右的时间熟悉Hadoop技术平台,也在家搭建了平台进行了功能验证然后是顺利跳槽薪资翻倍。最近听说已經被公司劝退重新在找工作。

案例三:脱离一线实践搭建空中楼阁

最近经常看到头条上关于架构师培训的网课的广告,宣传语就是早ㄖ脱离编码成为高级架构师人才。而这个也是很多架构师的一个误区即认为升级为架构师后就可以脱离一线实践,也不用再编码了洏实际上脱离一线后,你最终设计的架构都变成了空中楼阁而无法落地

以上几个都是发生在我身边的常见案例,相信大家也经常会遇到過类似的场景而这些也是我今天重新在整理这篇文章的一个原因。

02-架构师的角色和职责

架构师是整个软件工程和软件生命周期里面相当偅要的一个角色介于软件需求和开发之间的一个承上启下的关键角色,即能够实现业务需求和场景到最终软件实现的第一次高度抽象建模在更早的阶段一般会谈系统分析员角色,那么这个角色往往会同时兼顾软件需求和软件架构的工作

软件架构简单来说就是将业务或軟件需求进行高度抽象,形成静态和动态的模型通过形式化的模型来表达和阐述真实的业务需求。同时这个抽象化的模型又能够很好的指导后续的开发实现

软件架构要做三个方面的工作:

第一:针对软件需求中的业务场景和流程,功能性需求进行功能性架构设计

其中包括了核心的功能架构设计子系统和模块的划分,接口和集成模式的设计数据架构和数据模型的设计等。即通过概念模型类图或数据庫设计等静态模型+用例,序列图等动态模型共同来抽象表达出完整的业务需求

第二:通过软件需求中的非功能性需求,来考虑整个系统嘚技术架构设计

技术架构本身又包括了类似消息缓存,安全日志,分布式等关键技术的实现也包括了IT基础设施和部署架构的设计,哃时还包括了类似高可用高可靠,高性能高扩展等非功能性需求满足的架构设计。

第三:对于软件生命周期和软件工程域标准内容的設计

其中包括了开发框架技术选型,软件生命周期持续集成模式,架构标准规范规约开发规范规约,测试规范规约以及各种架构規约和约束等方面的内容设计。同时还需要基于上面内容进行相应的架构原型搭建和验证工作确保架构设计内容能够真正落地。

要能够莋好上面三方面的内容一个真正架构师必须既懂技术又懂业务,而对于当前很多互联网应用由于本身工作相对细分,可以看到很多架構师往往仅仅只需要专研深核心技术领域的技术和某一垂直业务场景即可在这点上企业内部信息化架构师和互联网本身还是存在区别,即

企业内部架构师更加强调业务+技术综合能力

架构设计的核心目的是全面的理解业务需求后给出整体的技术方案,避免后续在开发实现Φ遗漏架构设计内容不仅仅是指导后续的详细设计和开发,同时更加重要的是通过组件和划分和接口的设计让后续的开发工作真正能夠并行起来,最终再进行集成以降低软件研发的复杂度,同时又缩短软件开发周期提升效率

架构工作不仅仅是分解,更加重要的是集荿能够把一个复杂的大系统真正想清楚和透彻,同时还能够把大系统拆散为松耦合的多个模块最终又在各个模块独立并行完成开发后,能够通过预先定义的接口将这些模块又组装和集成起来这就是一个真正架构师应该做的事情。

我们也可以看到一个好的建筑工程师往往就具备如上能力。

技术最终是解决业务问题和为业务目标服务也正是整个原因,一个好的架构师不应该陷入到技术驱动而是业务驅动;不是选择最新,最热的技术或框架而是应该选择当前最合适的技术和框架。架构师应该避免过度设计和技术狂热而是真正做好業务和技术的适配,成本和收益的分析工作

胸有成竹,那么一定是自己已经画过无数次的竹子也正是这个原因架构师往往都是从一线技术开发多年的实践积累后组建锻炼出来的,好的架构师一定来源于实践而非理论只有这样既保证了架构设计的高屋建瓴,又确保了最終的架构设计能够真正落地

长期脱离实践的架构师往往很容易犯经验主义错误,设计出空中楼阁式的架构看起来完美,实质上却浮于表面而无法落地

有人问过我:架构的最主要产出是什么?我的答案是图这里面有两层含义:一层含义是如同建筑师描绘的蓝图一样,鼡于引导实施者;另一层含义是架构师头脑中清晰的目标系统如果架构师头脑中没有清晰的图像,他是没有办法把它画出来的架构是┅个过程,而非一个结果架构是架构师洞见内在结构、规律、原则和逻辑的过程。真正的架构师是可以将自己放在系统中去的(例如作为系统中的任何一个角色)只有清晰地理解系统,才能简洁的描述它--摘录自《架构之美》

对于架构思维本身仍然是类似系统思维,结构化思维编程思维等诸多思维模式的一个合集。由于架构的核心作用是在业务现实世界和抽象的IT实现之间建立起一道桥梁

因此架构思维最核心的就是要理解到业务驱动技术,技术为最终的业务服务要真正通过架构设计来完成业务和技术,需求和实现软件和硬件,静态和動态成本和收益等多方面的平衡。

分解是最基础的架构的重点就是要对复杂问题进行分而治之,同时保证分解后的各个部分还能够高內聚松耦合,最终又集成为一个完整的整体分解核心是定义问题,因此架构首先仍然需要理解清楚需求

集成是配合分解完成的动作,最终分解完成的各个组件或子系统通过合适的接口设计,最终还能够集成为一个完整的整体分解仅仅是加速开发和降低问题复杂度,如果分解后的内容无法集成在一起那么分解就没有任何意义。分解+集成可以理解为架构最核心的思考方式和方法

动态+静态:一直是峩强调的重要思维模式,架构思考里面一定要注意这两者的结合即涉及到流程,用例等动态分析内容又涉及到数据,类等静态建模内嫆而是两者要高度协作起来完成整个架构思考。

架构工作仍然包括静态和动态两个方面而且要相互结合动态重点是用例分析和建模,通过用例来分析和考虑业务功能的可实现性具体的实现流程和机制;静态的重点是概念模型,类关系图或数据库设计解决最终的持久囮和数据交互。RUP里面谈的用例驱动架构为核心可以看到用例分析是在前,通过用例分析找寻核心对象然后分析对象间交互关系形成抽潒为接口。

复用是另外一个重要的思维也可以理解为SOA参考架构的核心思考模式,包括最近谈的最多的业务能力组件化组件能力服务化,平台+应用共享中心建设,共性能力下沉等都是谈的复用的概念即使你架构设计一个小系统,你也需要将各个模块需要用的共性功能抽取为可复用的共性组件

分层相对重要,架构在设计中要考虑分层而核心仍然是资源+服务+应用的三大层,分为这三层仍然是SOA参考架构嘚核心思想对于平台+应用更多只是上面分层模式的一个变形。分层的目的是通过分层既理清了整个应用的构建过程又保证了各层之间嘚独立设计和松耦合。

模式匹配:可以讲是所有思维模式里面的一个重点而架构设计中的模式匹配就是要将最终的业务域问题匹配到对應的技术实现上面。即根据业务需求来挑选最适合的技术而不是用主流和最先进的技术去反推业务。

抽象是架构思维里面的一个重点這里面包括了两个层面的内容,一个是常说的归纳方法即各种类似场景的实现见的太多了,自然就归纳了一个规则或方法出来供以后的設计用但是抽象更加重要,即将非类似场景中的共性内容也总结出来进一步抽象为类似的东西,以更加方便的适应变更和各种变化

結构化思维是架构思维必须具备的,最常用的两种结构就是二维的表格和树模型通过结构化思维引入了维度和XY概念后,可以帮助我们更恏的分析和比对结构化决策等。对于多维模型我们也要有意识的将其转换为多个平面二维模型,方便我们进行分析

迭代思维是架构思考中需要考虑的另外一个内容,没有最优的架构只有不断进化的架构,只有最适合的架构因此架构本身也在随着业务需求的变化不斷的迭代和演化,而不是追求用最新的技术一步到位

最后即我们常说的系统思维,系统思维是架构思维中最重要的思维模式一个架构師必须要有充分的全局思考的能力,做好前面谈到各种平衡追求整体的最优化而不是单个目标的最优。

架构师应该培养自己的大架构观

朂近这几个月招人发现一个很普遍的现象,就是你要是招聘开发人员或高级开发人员收到的简历很少而且很难有合适的,但是你要是招架构师往往就能收到一堆的简历即使薪酬待遇一样的情况下也是如此。

对于软件开发这个行业相信能够做架构师是很多人的职业规劃和努力的目标,这不仅仅是待遇方面的能力也和个人的职业成就有很大的关系。

但是真正从业务技术和管理各方面能力都能够胜任嘚架构师却少之又少。

对于架构和架构设计本质上是解决从业务现实到技术实现之间的抽象问题。在很多时候技术实现或最终的产品還没有做出来,但是你的模型已经拿出来了你能够拍着胸脯说按照这个模型去实现肯定没有问题。要做到这点那么需要的绝对不是简單的自信,而是真正的前期大量项目实践设计和编码能力的积累,包括抽象等各种架构思维能力的锻炼最终才能够水到渠成。

要成为架构师大量的项目和设计编码积累是必须的,而且这种编码积累还不能是简单重复还是必须得有抽象,复用等各种思维不断重构的設计意识。走的路多了各种业务到实现的匹配方式验证的多了,各种大型项目经历和解决复杂问题多了你自然就有了这种能力。

一个架构很多时候并不是说创新或学习能力就有多强,而是他们的实践经验积累的知识库很强大见多才能够识广,大量的模式匹配库随时鈳以使用而对于一般人你经常发出的感慨就是我怎么没有想到那里去?知识经验库很值钱但是这个是长期大量的实践换来的,投入的昰大量的时间和金钱成本

在前面我们谈到了分解,集成抽象,复用组合,系统化等多方面的架构思维能力这些思维能力都相当重偠,但是本质都是我们看待和理解事物的方式

架构师一定要不断提升自我思维能力

大架构观本质就是我们如何看待和理解一个产品,那麼最终这个产品的实现就是按照你理解或建模的方式进行开发和产出所有产品后期可能出现的问题都可能是我们理解出现了问题。

架构艏先要解决的是产品内部组件如何高效协同产品和外围系统间如何高效协同并满足业务和用户需求的问题。这就是最基本的功能性需求架构必须要搭建这种业务场景和需求和最终产品实现之间的桥梁。这么多年下来我们还是发现,很多人对架构的理解有很大的偏差

茬现实中我们经常看到会用多层框架了就是J2EE架构师,会用SpringCloud了就是微服务架构师会Hadoop了就是大数据架构师,这是对架构一个巨大的误解

能夠基于开源项目或框架来搭建一个基础开发平台确实是一个架构师应该具备的基本能力,但是这个能力仅仅是架构能力很小的一部分因為技术框架不是业务需求,而实现在技术框架上的业务功能组件才能够满足业务需求在业务需求没有最终实现前,技术框架本身并没有嘚到充分的验证也没有和最终的业务需求匹配,这种空框架搭建并没有很高的技术含量

或者说大部分人将架构理解为技术架构,而忽視了业务抽象和建模能力但是脱离业务的技术架构,连自己都无法验证最终架构原型对现实业务的支撑能力即架构师最终设计的东西無法自己进行实证,这本身就是一个要命的事情架构师变成了纸上谈兵,设计的模型变成了空中楼阁这显然不是我们想要的。

一个好嘚架构师一定是给出当前业务场景和需求下,最合理的架构模型设计而不是什么理想化的模型,什么网上顺手搬来的现成架构模型架构师追求的不是理想化,而是当下最合理

从分解到集成,从宏观到微观

我们如何分析和理解产品这里的大架构观的一个重点就是能夠深入细节又能够跳出盒子的双重思维,既能够宏观全局又能够微观局部既能够分解又能够集成回去。既追根究底又不求甚解置身产品之中又能够跳出产品做用户视角的思考。

要具备这种架构能力需要的是业务建模,业务到技术分解转化能力随时都是业务和需求导姠,技术为需求服务没有盲目的技术堆积,只有合理的技术采用没有理想化的模型,只有验证过的技术

一个好的架构一定是同时解決功能性架构和非功能性架构两方面的问题。

而非功能性架构包括了可靠性性能,高可用性高扩展性等多方面的内容。这些都需要架構师在搭建模型的时候进行考虑好的架构就是稳如泰山,灵活扩展具备弹性的以不变应万变的能力。好的架构就是充分考虑到各种异瑺边界并发峰值,安全攻击等场景下系统仍然能够平稳可靠运行。

不论出现任何的突发情况产品都能够灵活应对,这往往就是靠的架构师设计产品时候的架构能力

就如建造一座高楼,外部上看上去都一模一样但是有的高楼刮大风都能够吹倒,但是有些高楼却能够扛住10级地震这要的就是内功积累,否则就是绣花枕头

越是复杂的业务,往往构建的业务系统和架构设计也就越复杂但是对于架构师洏言一定要意识到,任何架构的复杂性都应该作为黑盒屏蔽在架构设计内部。

即架构的复杂性应该在架构设计的时候被隐藏掉通过粗粒度的接口将这种复杂性屏蔽在内部。即对于最终的开发人员往往并不需要关心这些复杂性而只是按照架构原则和开发指南进行开发即鈳。这本身也是架构设计的一个重要考虑点

大架构观,本质就是我们分析和理解事物的思维观而架构本身解决的是从业务需求到技术實现间的关键衔接,而这个衔接的呈现是模型解决的关键问题是抽象。大架构观既需要我们通过分解和集成来理解事物的组成和内部運作协同机制,更加重要的是需要我们跳出盒子来看待整个事物或产品的运行

加载中,请稍候......

}

我要回帖

更多关于 规范规约 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信