文章插图
对应到软件架构,“木”代表构件(要素),“结构”代表架构的产物:
木就是系统中的要素,我们将他们称之为架构构件(要素) 。架构要素可以是子系统、模块、应用服务、组件 。
结构,是架构的产物 。不同的软件系统会有不同的结构,这些结构是为解决不同场景而设计的 。连接,通过定义架构元素之间的接口和交互关系、集成机制,实现架构元素之间的连接 。连接可以是分布式调用、进程间调用、组件之间的交互关系等 。
总结一下架构的组成 = 要素 + 结构 + 连接,将系统要素按照特定结构进行连接交互 。我在这重新定义架构(见仁见智,自己独立思考):软件架构指软件系统顶层结构设计 。架构是经过系统性地思考, 权衡利弊之后在现有资源约束下的最合理决策, 最终明确的系统骨架: 包括子系统, 模块, 组件. 以及他们之间协作关系, 约束规范, 指导原则. 并由它来指导系统各方面的设计和指导团队中的每个人思想层面上的一致 。
涉及四方面:
1、系统性思考的合理决策:比如技术选型、解决实施方案(包括执行目标计划)、成本评估、性价比评估等等 。
2、结构:明确的系统骨架(结构):明确系统有哪些构件组成 。
3、连接:系统协作关系:各个组成部分如何协作来实现业务请求 。
4、规范:约束规范和指导原则:保证系统有序,高效、稳定运行,包括规范、原则、流程等内容 。
二、架构设计目的
如果没有架构设计,说明你的系统不够复杂 。随着业务的增长,系统由单体应用渐进演化为分布式和微服务化 。系统整体的复杂性越来越高,技术团队可能从一个团队变成多个专业化团队 。假如没有架构设计,系统定会是一个无序失控的状态,带来的问题:
1、应用服务的边界不是很清晰:到底该怎么拆分没有一个明确的原则,研发人员为了所谓微服务化而拆分,而不是从当前业务考虑 。导致系统无序的状态,开发效率低 。
我们系统出现过类似的情况:一个简单项目拆分成 8 个子服务,问他为什么这么拆分,说微服务化是为了应对以后扩展方便 。结果这个项目从 2017 年到现在都没有再修改过,接手人宁愿新开发一个项目也不愿重构 。
2、应用服务层次不清晰,系统耦合严重:导致服务依赖出现网状依赖结构,牵一发动全身,后续修改和扩展困难 。
3、系统应用服务跟踪问题:由于微服务化后,系统逻辑复杂,服务出现问题后,你很难快速的定位问题和修复 。这是我们踩过不少坑,我们使用 dubbo 服务化,系统一旦出现问题,一推人手忙脚乱 。
4、系统服务监控问题:由于研发人员基本没有服务监控意识,都是出现问题后再想办法如何添加服务监控接口 。
5、技术体系失控问题:不同的开发团队使用不同的技术栈或者组件,造成公司内部的技术架构失控 。甚至研发人员为追求时髦新潮技术,拿应用项目来试验新技术 。
架构设计的目的是为了解决系统复杂性带来的问题,其本质就是对系统进行有序化地重构以致符合当前业务的发展,并可以快速扩展 。从上面架构的定义,也知道架构设计的作用涉及四方面:
1、系统性思考的合理决策 。
2、明确的系统骨架 。
3、系统协作关系 。
4、约束规范和指导原则 。
架构的本质是管理和解决系统的复杂性,提高效率 。管理复杂性:对系统进行有序化重构,不断减少系统的“熵”,使系统不断进化,改善软件质量为目的的内在结构性变化;提高效率:对系统进行有序化重构,以符合当前业务的发展,并可以快速扩展 。
无论是何种变化,架构师通过理解业务,全局把控,权衡业务需求和技术实现,选择合适技术,解决关键问题、指导研发落地实施,促进业务发展,提高效率 。那什么样的系统要考虑做架构设计? 技术不会平白无故的出和自驱动发展起来,而架构的发展和需求是基于业务的驱动:
-
需求相对复杂
-
非功能性需求在整个系统占据重要位置
-
系统生命周期长,有扩展性需求
-
推荐阅读
- Go 语言自带设计模式
- 如何做好表结构设计?
- 十个提高你网页设计能力的 CSS 技巧
- 求职|上海36岁设计师被HR喊叔,求职遭拒因为年龄不合适
- |三版人民币炼钢五元,设计精美,市场认知度高,收藏价值大
- 工装是什么意思(办公室装修)
- pe是什么材质(pe面料是什么材质)
- 包装设计是什么(包装设计的特点)
- 什么是产品设计(低碳环保的产品设计)
- 设计师接单平台排行__68design接单靠谱么?
