您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

架构设计的四大思维支柱

时间:2020-04-14 10:05:16  来源:  作者:

笔者在 InfoQ 前文《关于架构演进发展的探讨》和《架构演进的第四个趋势:行业级标准化》中,提出了笔者对架构发展趋势的一些浅见,也介绍了企业级业务架构方法论的来龙去脉,本文拟基于上述文章提炼一下企业软件(大家常说的 B 端软件)架构设计中的四大思维支柱供大家参考。

支柱一:整体思维

一、从敏捷说起

敏捷诞生正是为了解决传统软件工程普遍被认为存在的“低效”问题,诸如周期长、不能快速响应需求、成果长期不可见而易导致失败等,因此,敏捷往往给人“一言不合就开干”的雷厉风行的印象,而很多时候,敏捷在实操上也确实由于对“速度”和“形式”的片面追求忽视了对整体的合理设计,这样的敏捷并不是真正的敏捷,而是“着急”。

敏捷开发的几位殿堂级大师对设计的重要性有着非常深刻的认知。Martin Fowler 认为敏捷注重的是演进式设计,而不是轻视设计;Vernon 也批评一些敏捷开发实践是用“任务板挪卡”代替了设计;Sutherland 在“OODA”循环中也强调掌握全景信息而非只从自身视角看问题的重要性,每次 Scrum 结束提出 MVP,都要重走一遍循环,因为 MVP 就是为了获得更多、更全的反馈信息,有了这些信息才能快速决策,快速决策绝非快拍脑袋,是因为有模式加速了对信息的处理速度,这才是敏捷的原动力,也是要总结方法论的原因,“全景信息 + 思维模式 = 快速决策”。

“OODA”循环如图 1 所示:

架构设计的四大思维支柱

 

图 1 “OODA”循环(来自互联网)

敏捷开发由于其“高效”的特点,在支持快速试错的同时,也支持快速犯错,这是一体两面的,不能只看到其由于快速提供交付物所具有的成果可见能力。缺少整体把控,敏捷也容易堆叠“技术债务”。所以,敏捷开发也需要有整体思维做指导而不是只关注“速度”。如果敏捷也需要整体思维,那本就因此被“诟病”的传统软件工程方法和系统分析方法也就更应该“且行且珍惜”了,众所周知,Zachman 模型、TOGAF 模型和 DODAF 模型都很强调全景信息。

二、切勿因小失大

所有局部问题的解决都离不开对整体的分析,分析的范围不同,得出的结论也会不同。举个简单的例子,如果我们为功能开发任务排定优先级,那么,10 个任务之间进行排序和 20 个任务之间进行排序,很有可能得出排序结论是有很大差异的,分析范围会决定分析结论。随着输入的增加,各类因素在总体上的权重就会有变化,原本认为重要的事情也可能因此不再重要了,最近大家又常提起一句话:“时代的一粒灰落在个人头上就是一座山”,其实也有这个意味。

面向局部的分析和面向整体的分析是有很大差别的,而现在的企业管理越来越注重提升整体性,因此,B 端软件的架构设计、需求解读都应当有一个全局观,分析范围不同,解决方案也可能不同。

过于关注局部,将视野局限在小范围内,很可能会造成“因小失大”。近年某大型电商曾在自己的支付平台上引进社交功能,但却被用于不法用途,结果导致功能下线。该电商实力不凡,在系统设计方面也可谓独步青云,但是出现这样大的“失误”,很可能是分析问题时,没能更广泛地观察已有案例和功能实际价值对整体的贡献,低估了相关影响。尽管上述说法未免“事后诸葛亮”,但我们不是一直希望避免出现此类问题吗?那回首原因,没做更全面的分析,就不能仅是一种“说辞”了。

三、工具何其难

基于整体分析的架构设计是一件极其耗费心力的工作,我们不能总是依靠架构师这台“碳基计算机”,总给架构师压上千斤重担而不提供支持,架构师不是魔术师,我们也经常忘记了,“架构”是整个企业的架构而不是架构师的“架构”。

工欲善其事必先利其器。工具不仅仅是软件类工具,方法论、流程管理工具、已有的模型资产、架构管理软件都属于工具的范畴,而所有这些资产中,其实最重要的两样是方法论和模型资产。

大家可能会觉得架构管理软件更重要、更直接,但是架构管理软件是根据架构设计方法论和架构设计实践做出来的,所以方法论和模型资产是更重要的基础性工具,而以目前架构设计的“混乱”现状而言,没有通用的架构管理工具也是必然的,因为公认能普适的架构理论和行业级标准化的模型资产都没有,也就没有合适的、可以真正直达“痛处”架构管理工具,如果能做出这样的工具,那么,一定可以开辟一个世界级的市场。

除了工具的支持,来自企业的整体支持也很重要,不过这就属于资源层面而不仅仅是工具了。面向整体的设计,应当有整体的参与,企业的各个部分都应当参与到整体设计中,而整体设计也应当向整个企业传导。走不出架构师的架构设计,没有持久的维持能力;走不出 IT 部门的架构设计,不会凝聚起整个企业;走不出企业的架构设计,就无法真正落地企业战略。

支柱二:洞察能力

一、深入理解业务

洞察能力是个老话题,不过架构领域本也没多少新鲜事,任何架构方法都需要深入实践才能逐渐掌握要领,架构领域没有快餐,不大可能“一夜顿悟”,也不要急着“PK”,更多的是需要反复去啃的“硬骨头”。

做软件设计,大家常说要对业务进行深入分析,要抓住需求本质,要有合适的抽象力度,这些说的其实都是洞察能力。洞察需要的是深入理解,而不仅仅是对需求的字面理解或者浅层的沟通。架构领域一直不乏有对哲学方法论的应用,比如本体论,笔者近期阅读维特根斯坦的《逻辑哲学论》时也发现,尽管难以深入理解大师的思想精髓,但是计算机领域对面向对象编程的研究与这本一次世界大战期间写就的哲学著作如出一辙。

加强洞察能力,一般都会认为是要提升思维穿透能力,这当然是必须的,但是从企业层面而言,也有相对容易操作的方式,就是加强深层次沟通。这首先需要企业逐步改变业务人员的和技术人员的比例,使技术人员能够走到业务人员中间来,加强二者的融合。

所谓深层次沟通并不是两个人要碰撞出哲学火花,如果两个人之间只能具有一个聊聊需求的时间,就急着做产品上线了,那双方之间的了解深度必然是有限的。技术人员如果能够轮班走到业务人员中间提供实地支持,深入理解工作环境,实际感受业务压力,理解的深度自然会增加。我们不需要指望技术人员变成哲学家来增加洞察力,只需要给予他们更多的观察机会和思考时间。这并非“强人所难”,至少,国外的大银行,如摩根大通、高盛、Capital One 等,已经不乏这样的操作了。

可能很多人会觉得这对中小企业不公平,不可操作,毕竟他们资源有限,但是,这也取决于你是否相信“未来的企业都是科技企业”,至少笔者相信,因为软件将是未来最主要的生产方式。也许今天很多企业不用急着进行这个操作,但是,这不代表可以忽视这个问题,而越大的企业应该越早动手,因为企业越大转型越慢、周期越长、沟通模式越复杂,企业的全貌也越难以掌握。

二、努力推进标准化

如果软件行业整体都具备了深入的洞察能力的话,那标准化就应当是件自然的事情,农业和工业的发展都是这个历程。农业的耕种方法、选种和培育、肥料的制作,即便在今天看来极为简陋的原始生产阶段,为了提高农业种植的成功率和产量,也是在进行着不懈的“标准化”努力。农书早已有之,即便在著名的“焚书坑儒”中,也获准可以保留,可见古人对农业技术的重视,更不用说在现代工业条件支持下的大规模农业生产。与之相比,软件行业真有那么特殊吗?真的不会有标准化生产这个历程吗?

反思软件行业目前的情况,也许只能说,洞察力依然不够,至少没有真正理解标准化对行业的意义,否则,一个已经发展了 70 多年、精英辈出的行业,不会在标准化资产、标准化生产方面如此“尴尬”,我们书写了那么多的技术标准,却依然无法提供一套能够有效复用的行业级软件资产,当然,这种复用不是指搬过来就用,而是至少不用从头做起。

开源提供了很好的支持未来大规模软件生产的模式参考,而需要的是增加对标准化的管理的思考,这也许是未来开源的发展方向。

没有标准化能力,软件行业可能无法撑起未来对软件生产的大规模需求。标准化是行业成熟的表现,也是软件行业对自身、对其他行业都具备深刻洞察力的体现,更是设计师在设计时应为之努力的方向。

支柱三:演进思维

一、唯快不破?

“快鱼吃慢鱼”几乎成了当今社会的集体“焦虑”, 企业由于竞争的压力,对“立竿见影”的追求近乎“执着”。笔者也是个二次元的爱好者,每每想到这个问题,自然会浮现出一部漫画作品——《浪客剑心》,主人公绯村剑心的独门绝技就是“拔刀”,一回合解决对手,拔刀的瞬间就致对手与死地。相信很多企业在搞软件建设时也寄望于此,希望采用某个架构、做成某个系统后,可以实现超级应变能力。

然而漫画作品中的主人公是在经历了地狱般的生死训练之后才具备如此能力,带着一身的伤病,成了一台需要精心保养否则很难“善终”的机器,用个通俗点儿的解释就是职业寿命比较短。所以,“快”都是有代价、有基础的,“快”是系统性训练的结果,不是哪个部门的“快”在支撑整个企业的“快”;“快”是整个企业持续演进出来的,而不是被外部因素突然赋予的。大家都不是漫威电影里的“超级英雄”,不是天赋异禀,也不是被蜘蛛咬一口就可以拯救世界。

不注重基础的“快”,只能是“眼见他起高楼,眼见他楼塌了”。在业务领域里,我们不乏见到业务人员被逼急了而出现的业绩造假、财务造假,而忽视软件工程的底线要求,把技术人员催的太紧,也可能出现技术“造假”。也许笔者的说法不够准确,但是英国 TSB 银行的案例也许可以当成一个侧写吧。业绩造假、财务造假对企业管理者而言还是可以搞清楚的问题,但是技术方面出的问题,相信大部分管理者可能搞不清楚。有兴趣的读者可以看看对计算机 BUG 的分类,像薛定谔类型、海森堡类型、分形类型等,这是连技术人员自己都搞不懂的 BUG 形态。

技术目标的实现很难一蹴而就,也许不少传统企业的管理者会问如今互联网企业不是很具备“快”的样子吗?与传统企业相比,他们是挺快,这是因为他们具有更好的技术管理能力和开发环境,有基础设施支持人员能力的发挥,但是,不容忽视的是之前热过的“996.ICU”这个话题。敏捷创始人可是说过,敏捷应该是高效和不用加班的。这种透支技术人员身体,把软件行业搞得像“血汗工厂”的做法,不应该用对“理想”的追求一笔带过。

传统方法只要用的纯熟、坚持对方法论的完善和演进,合适的条件下,一样可以获得“快”的效果。比如二神山的建设就是在瀑布模型和甘特图的指导下实现“中国速度”的,感兴趣的读者可以找找二神山的工程师们公开分享的资料,看看他们对传统方法的运用。

回到正题,架构设计及其实现应该注重的是演进思维,不可能“毕其功于一役”,再着急也无法忽视客观规律。如同搞战略设计,如果给设计人员的只有泡一碗方便面的时间,那交付的也只能是一碗战略方便面。

二、演进方向

架构设计要具备演进思维,演进思维除了意味着大目标要分段实现外,也意味着对目标该有一个整体认知,这个认知对企业软件而言,就是要统一到企业的愿景和战略上。本文笔者延续自己在《企业级业务架构设计:方法论与实践》一书中的观点,将愿景定位于 20-30 年的长期方向,而将战略定位于 3 年左右的“短期”方向。技术变化比较快,战略周期长了不利于调整,但是太短也很难有明显实施效果,尤其是对大型企业而言。

从长期愿景的角度看,数字化转型是必然的,当代的人碰巧处于时代切换的转型阵痛期,作为经历“痛苦”的人,任何企业和个人都无法回避这个问题。笔者将其列为长期方向,是因为笔者所认为的数字化与目前更为贴近信息化的各类主张不同,数字化不是一两个系统或者某个架构就可以快速解决的问题,而是整个社会的数字化,企业的数字化是社会数字化中的一环,并且,不可能仅靠自身的数字化完成。

以数字化转型为架构设计思维演进的长期方向,在每个战略周期内,密切跟踪技术的发展,适时引入可能带来业务模式变化的技术,实现新技术与业务的融合,这种架构驾驭能力才是未来企业竞争的关键。笔者对数字化转型的详细论述包含在即将面世的新书《银行数字化转型》中,本文不再过多着墨于此。

支柱四:开放思维

一、有中心而无权威

这个说法略有“不当”,但笔者暂时没有想到更形象的表述。实际工作中,架构师在项目中是具有“权威”性的,这样比较有利于项目的总体管理,大的项目可能会有很多架构师,因为架构师的分工也是很细的,因此,从效率上来讲,也需要设立个“首架”。

“中心”会提高执行效率,但是,架构师必须具有开放性,保持谦虚,架构师是“中心”,但不要总把“权威”看得太重,架构是企业整体资产,说的不客气点儿,企业搞架构也正是为了能够摆脱对特定架构师的“单点依赖”,使架构工作能够保持“业务连续性”。

架构设计中要保持这种谦逊性,这样才能让更好的设计思路进入设计师的视野,进入设计方案。“海纳百川,有容乃大”。所谓的技术权威,最好是自然形成的,而非来自于职权的任命;技术权威是用来“向我开炮”的,如果用来维护,很可能会产生适得其反的结果;技术权威最终代表的是问题能被更好地解决,而不是“唯马首是瞻”。

架构设计非常需要注重整体,尽可能考虑全景信息,这往往也意味者过于依赖“权威”架构师其实是有风险的,“智者千虑必有一失”,负担太重也会造成核心架构师“过载”。从这个角度讲,架构师团队的开放协作,或者架构师与项目团队的开放协作是非常重要的,整体思维和开放思维之间相辅相成。

二、开放式架构设计

关于开放银行的讨论去年和今年特别多,笔者也曾发布过相关文章,在笔者看来,与其称之为开放银行不如称其为开放式架构含义会更明确。企业之间在生态建设的“大旗”下,连接越来越紧密,而且从商业层面的连接逐渐下沉为技术层面的连接,API、SDK 等对接方式让信息化程度较高的企业之间联系更为密切。

随着企业架构理论和企业实践能力的提升,企业内部一体化程度会逐渐加强,并转化为体现生态分工的跨企业系统协作,这要求架构设计遵循开放的设计方向,以企业之间更好地对接为目标,实现跨企业的流程整合,这样组成的“竞合”关系更稳定、更具竞争力。

面向开放式协作的架构设计,要求企业有更好的、可读性强、可公开的内部架构,这样才能有更好的协作前提,而今天这种充满个性的架构设计风格,要逐渐向更加标准化、更容易沟通的方向发展。PPT 不是架构师的发力点,对架构的过度宣传也许反而不利于架构的健康发展,架构风格的过度自由也许会带来沟通上的不自由。尽管今天架构师们面对的企业环境、技术环境越来越复杂,但是,简单依然是设计应该持续追求的目标。

本文总结的四大思维支柱相信各位读者并不陌生,笔者只是将个人的一些理解融合进去。如果用“T”型人才或者“T”型思维类比的话,整体思维相当于“T”字横头的“一”,洞察能力相当于“∣”,演进思维相当于小“T”逐步积累成大“T”,而开放思维相当于多个“T”的连接,包括企业层面、架构层面和架构师层面的开放与连接。架构说到底就是结构和关系,架构的四大思维支柱,谈的也就是处理好结构和关系的思考原则。文章终归是一家之言,目的是抛砖引玉,希望有更多的人一起关注在当前这个大家都认定的“技术最好的时代”,我们应该如何培育“架构”这朵 IT 领域之花。

作者简介

付晓岩,《企业级业务架构设计:方法论与实践》图书作者,腾讯云最具价值专家。原国有大行资深业务架构师,负责业务架构设计、项目管理,热衷新技术探索与实践,具有丰富的银行业务经验和企业级项目业务架构设计经验,曾主导客户关系、金融市场、同业、资管、养老金等多个领域核心系统的业务架构设计,现就职于建信金融科技有限责任公司。即将发行新书《银行数字化转型》,公众号:晓谈岩说。



Tags:架构设计   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
背景在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。日志存储和检索...【详细内容】
2021-11-23  Tags: 架构设计  点击:(22)  评论:(0)  加入收藏
如何设计一个好的软件架构,如何提高软件的扩展性,移植性,复用性和可读性?很多做嵌入式开发的朋友经常会遇到这种情况:一个项目软件设计完成了,客户提出了一些新的功能需求。这时侯...【详细内容】
2021-11-08  Tags: 架构设计  点击:(35)  评论:(0)  加入收藏
1、网络架构总体说明为了方便网络管理,园区网络通常按照功能或业务进行分层分区设计,园区内部网络包括终端层、接入层、汇聚层、核心层、出口区,园区外部的其他园区、分支、出...【详细内容】
2021-08-17  Tags: 架构设计  点击:(89)  评论:(0)  加入收藏
一:业务背景优惠券是电商常见的营销手段,具有灵活的特点,既可以作为促销活动的载体,也是重要的引流入口。优惠券系统是vivo商城营销模块中一个重要组成部分,早在15年vivo商城还是...【详细内容】
2021-08-06  Tags: 架构设计  点击:(74)  评论:(0)  加入收藏
组织结构是企业的骨架,是实现战略目标的载体,是企业运营的支撑,是岗位设置的依据,是企业信息流的渠道。如果企业缺乏合理的组织结构,就会造成分工不明确、权责不清楚、沟通渠道不...【详细内容】
2021-06-08  Tags: 架构设计  点击:(120)  评论:(0)  加入收藏
1. 前言嵌入式是软件设计领域的一个分支,它自身的诸多特点决定了系统架构师的选择,同时它的一些问题又具有相当的通用性,可以推广到其他的领域。提起嵌入式软件设计,传统的印象...【详细内容】
2021-04-15  Tags: 架构设计  点击:(250)  评论:(0)  加入收藏
背景考拉安全部技术这块目前主要负责两块业务:一个是内审,主要是通过敏感日志管理平台搜集考拉所有后台系统的操作日志,数据导入到es后,结合storm进行实时计算,主要有行为查询、...【详细内容】
2021-04-01  Tags: 架构设计  点击:(260)  评论:(0)  加入收藏
简介: 作为一名Java程序员,相信同学们都听说过微内核架构设计,也有自己的理解。那么微内核是如何被提出来的?微内核在操作系统内核的设计中又有什么作用?本文从插件化(Plug-in)架...【详细内容】
2021-02-24  Tags: 架构设计  点击:(158)  评论:(0)  加入收藏
由于多年前开发了一款聊天软件,今天朋友给我打电话,说他们公司准备开发一款内部使用的沟通交流工具,找我咨询关于即时聊天软件一些经验,于是跟他聊了一些关于这方面的东西,所以在...【详细内容】
2020-12-22  Tags: 架构设计  点击:(284)  评论:(0)  加入收藏
Nginx+Redis+MQ+DB下秒杀实现原理 Nginx+Redis+MQ+DB下限购实现原理 Nginx+Redis+MQ+DB下亿级流量实现原理 Redis在架构中的意义 分布式微服务是快了还是慢了 高可用和可用...【详细内容】
2020-12-22  Tags: 架构设计  点击:(365)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条