首席架构师眼里的架构本质

作者 : 开心源码 本文共3207个字,预计阅读时间需要9分钟 发布时间: 2022-05-12 共138人阅读

架构的本质

目前探讨架构实操(术)的文章较多,探讨架构理念(道)的较少,本文基于作者在大型电商系统架构方面的少量实践和思考,和大家聊聊架构理念性的东西,希望能够抛砖引玉,推进大家对架构的认识。

什么是道,什么是术?道是事物发展的本质规律,术是事物发展的具体途径。

规律只有一个,途径很多,条条大路通罗马,罗马是道,大路是术。道为本,术为途,假如事前知道罗马在哪里,那么遍地是路,路路相通。架构也是如此,假如能领悟架构的本质,就不会拘泥于现有的实践和理论框框,而以最直接的方式处理问题,无招胜有招。

说到这里,也给大家推荐一个架构交流学习群:835544715,里面会分享少量资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,相信对于已经工作和遇到技术瓶颈的码友,在这个群里会有你需要的内容。

本文的内容包括:

架构的本质

架构的服务对象

架构师能力模型

架构境界?

架构的本质

任何系统,自然情况下,都是从有序到无序,这是有科学依据的,?按照热力学第二定律,自然界的一切自发过程都有方向性,一个孤立系统会由有序变为无序,即它的熵会不断添加,最终寂灭。但生物可以通过和外界交互,主动进行新陈代谢,制造“负熵”来保证自身有序,继续生存。

同样,一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐步碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。

架构的本质就是对系统进行有序化重构,不断减少系统的“熵”,使系统不断进化。

那架构是如何实现无序到有序的呢??基本的手段就是分和合,先把系统打散,而后重新组合。

分的过程是把系统拆分为各个子系统/板块/组件,拆的时候,首先要处理每个组件的定位问题,而后才能划分彼此的边界,实现正当的拆分。合就是根据最终要求,把各个分离的组件有机整合在一起,相对来说,第一步的拆分更难。

拆分的结果使开发人员能够做到业务聚焦、技能聚焦,实现开发敏捷,合的结果是系统变得柔性,可以因需而变,实现业务敏捷。

举个例子,在Web?1.0时代,一个ASP或者JSP页面里,HTML和脚本代码混在一起,此时脚本代码越多,系统越混乱(即熵添加),最终连开发者自己都无法了解。此时就需要对系统重新架构,办法是引入view?helper模式,分离HTML和脚本,HTML成为view,脚本成为帮助类。而后再简单整合在一起。通过重新分和合,整个系统层次清晰,职责明确,系统的无序度降低,容易扩展。同时不同技能的开发人员,如UED和程序员,可以负责不同部分,有效提高开发效率。

好的架构就像一篇柔美的散文,形散神不散,表面看无序,实则高度有序。

架构分类和服务对象

架构一般可分业务架构、应用架构、技术架构,那么它们分别处理什么问题,服务于谁呢??我们首先看一个系统落地过程:

对于负责开发的人来说,怕的是业务太复杂,代码逻辑太乱,超出他能了解的范畴,系统无法维护。因而开发的需求是系统整体概念清晰,容易了解,方便扩展。

对于负责运行的机器来说,怕的是业务并发量太大,系统核心资源不够用(如数据库连接)。它希望在业务量添加时,系统能够支持水平扩展,支持硬件容错(如避免单点故障)。

开发的痛点主要由业务架构和应用架构处理,业务架构从概念层面帮助开发了解系统(动态的包括业务流程/节点/输入输出,静态的包括业务域/业务板块/单据模型)。

应用架构从逻辑层面帮助开发落地系统(应用种类/应用形式/数据交互关系/交互方式等),整个系统逻辑上容易了解,最近大家谈的比较多的SOA即属于应用架构的范畴。

机器的痛点主要由技术架构处理,如技术平台选型(操作系统/中间件/设施等),部署上希望支持多机房,水平扩展,无单点等。

强调一下,系统是人的系统,架构首先是为人服务的,业务概念清晰、应用逻辑正当、人好了解是第一位的(即系统有序度高)。现在大家探讨更多的是技术架构,如高并发设计,分布式事务解决等,只是由于这个不需要业务上下文背景,比较好相互沟通。具体架构设计时,首先要关注业务架构和应用架构,这个架构新手要特别注意。

架构师能力模型

架构师只做分和合的事情,但综合能力要求很高,要求内外兼修,下得厨房,上得厅堂,下图通过典型的架构方式详情一个架构师的能力要求:

一个驾校教练,必定开车技术好,一个游泳教练,必定游泳水平好,由于这些都是实践性很强的工作。书上学来终觉浅,梅花香自苦寒来,架构师亦如此,他必定是一个出色的程序员,对代码和系统有很好的驾驽能力。?

在此基础上,架构师要有技术的广度(多领域知识),又有深度(技术前瞻),对主流公司的系统设计非常理解,知道优劣长短,碰到实际问题,很快有多种方案可供评估。

笼统思维是架构师最重要的能力,架构师要善于把实物概念化并归类。比方面对一个大型的B2C网站,能够迅速笼统为采购->经营->前端搜索->下单->履单这几大块,对系统分而治之,庖丁解牛,早已目无全牛。

笼统思维是往高层次的总结升华,由实到虚;而透过问题看本质则是由虚到实,往深层次地挖掘。比方看到一段java代码,知道它在JVM如何执行;一个跨网络调用,知道数据是如何通过各种介质到达目标(操作系统内核/网卡端口/电磁介质等)。透过问题看本质使架构师能够敏锐地发现底层之真实,系统性端到端地思考问题,识别木桶的短板并处理之。

能落地的架构才是好架构,良好的沟通能力确保各方对架构达成共识,愿意采取行动;良好的平衡取舍能力确保架构在现有资源束缚下是最正当的,理想最终照进现实。

总结下,架构师的能力要求包括:

l?兼具技术的广度(多领域知识)和深度(技术前瞻)

l?兼具思维的高度(笼统思维)和深度(问题到本质)

l?兼具感性(沟通)和理性(平衡)

架构境界

架构师从境界上由浅到深可以分为四层:第一看山不是山,第二看山是山,第三看山不是山,第四看山是山。

刚接手项目时,对业务不理解,时时被业务方冒出的术语弄得一愣一愣的,假如把现有问题比作山,则是横看成岭侧成峰,根本摸不透,此时看山不是山。

经过业务梳理和对系统深入理解,可以设计出一个屌丝的方案,把各个系统串起来,处理当前的问题,对当前这个山能够看清楚全貌,此时能够做到看山是山。

通过进一步笼统,发现问题的本质,原来这个问题是共性的,后续还会有很多相似问题。设计上进行总结和升华,得出一个通用的方案,不光能处理当前的问题,还可以处理潜在的问题。此时看到的已经是问题本质,看山不是山。

最后回到问题本身,去除过度的笼统,给出的设计简洁明了,增之一分嫌肥,减之一分嫌瘦,既处理当前问题,又保留最基本的扩展,此时问题还是那个问题,山还是那个山。

第一境界给不出合适方案,不表。

第二境界的方案只处理表面问题,往往设计不够,碰到其它相似问题或者者问题略微变形,系统需要重新做。

第三境界的方案往往过度设计,太追求通用化会创造出过多笼统,生造概念,了解和实现均困难,此时系统的无序度反而添加,过犹不及。

第四境界的方案,在理解问题本质的基础上,同时考虑现状,评估未来,不多做,不少做。

佛教讲空和色,色即事物现象,空即事物本质,从这个意义上说,第一重境界无色无空,第二重境界过色,第三重境界过空,第四重境界站在色和空之间,既色又空,不执着于当前,不虚无于未来。

不空不色,既空既色,道法自然,本性如来,架构之髓也。

想要学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取 ? ?架构群:835544715

点击链接加入群聊【JAVA高级架构】:https://jq.qq.com/?_wv=1027&k=5dbERkY

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 首席架构师眼里的架构本质

发表回复