架构设计00-架构师知识体系01-什么是软件架构?

简介: 架构设计00-架构师知识体系01-什么是软件架构?

架构设计系列文章,请参见连接。

背景

从事软件行业多年后总有一些疑问:软件架构是什么?业务模型是什么?业务蓝图怎么做?等等问题萦绕在心头。这些问题很多都是因为业界没有标准、没有标准实施方法,这样就会就需要有人去了解、理解、分析、权衡。

人的认知过程可以简单的说成:对于同一件事物不同的人的理解也是不同的,一个人在不同的时间对同一件事也有着不同的理解。所以在软件架构实施过程中不同的人有不同的方法去实施、不同的实施侧重非常常见,故对于架构的实施效果就不能很好的把控。

对于软件来说架构的实施效果是软件架构的最终价值。前人也对软件架构的价值思考与总结,这些总结对于真正的实施软件架构建设的人员来说总有那么一些借鉴意义。故在此对这些内容进行汇总。

架构的历史

在1968年时,软件架构还不叫软件架构那会叫:软件体系结构。

The Structure of the 'THE' Multiprogramming System

戴克斯加(Edsger Dijkstra)在THE操作系统设计时,定义了这个操作系统的结构。这个结构最初的就是软件体系结构。软件体系结构在1975年,软件体系结构思想被升华:

Architecture is the complete and detailed specification of the user interface

那时的布鲁克斯(Frederick Brooks)认为架构就是对用户接口的完整详细的规范。这个是对软件的对外属性的描述工作。从一个侧面定义软件架构。而另外一个高人帕纳斯在20世纪80年代左右对软件架构有一系列的认知提升:

information hiding and usage of interface(Parnas,1972)
structure separation (Parnas, 1974)
the relationships between software structure and its quality (Parnas,1976)

而在1991年由罗伊斯(Walker E. Royce)和 罗伊斯(Winston W. Royce)在正式文献中使用Software Architecture

Software Architecture: Integrating Process and Technology authored

又过了两年,在1993年时Software Architecture被定义,此定义成为软件体系结构研究的公认基础,由加兰(David Garlan)和肖(Mary Shaw)对其进行了总结:

An Introduction to Software Architecture

在这篇文章中还说明了软件架构模式。到此之后软件架构就被正式定义了。学术界的发展变成。而在此之后还是有很多实践中对软件架构有不断深入的理解。

大名鼎鼎的马丁·福勒(Martin Fowler)在《企业应用架构模式》中就说

很多人都试图给“架构”下定义,而这些定义本身却很难统一。

可以看到在实践中对架构进行单一的定义是不能满足实践指导意义的。而雅各布森(Ivar Jacobson)在《AOSD中文版-基于用例的面向方面软件开发》也有类似的阐述:

什么是架构?如果你问五个不同的人,可能会得到五种不同的答案。

鲍勃大叔(Robert C. Martin)在《架构简洁之道》也对很多人的错误理解做出了很好的解释。

架构并不是框架(也不应该是)。架构不应该由框架提供。框架是要使用的工具,而架构并不是。

上文中也说道:架构的实施效果是软件架构的最终价值。从这个角度看软件架构定义、解释、诠释都不能很好的为软件架构做实际的指导意义。

架构定义分类

在看《系统之美》时,作者在书中说到系统思维就是为大家提供一种认识世界的思维模式。那我们了解软件架构各种侧面的定义,让我们更加全面的理解软件架构。
软件架构定义分类

  • 组合派:软件架构=抽象+元素+交互

  1. 1997年,Bass,Ctements和Kazman在《使用软件体系结构》一书中给出如下的定义:一个程序或计算机系统的软件体系结构包括一个或一组软件构件、软件构件的外部的可见特性及其相互关系。
  2. IEEE610.12-1990,IEEE 1471-2000,ISO/IEC/IEEE 42010-2011
  • 决策派:软件架构=重要决策的集合

  1. RUP定义的核心思想是:软件架构是在一些重要方面作出的决策的合集。
  2. woods观点:软件架构是一系列设计决策,如果做了不正确的决策,你的项目可 能最终会被取消
  • 高层设计派:软件架构=受环境影响的高层设计

  1. Mary Shaw和David Garlan认为软件体系结构是软件设计过程中的一个层次,这一层次超越计算过程中的算法设计和数据结构设计。
  2. 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式及这些模式的约束组成。
  • 模型派:软件架构=不同模型的组合方式

    这一派最主要的是关注模型间的关系。

思考

对于有一定经验的架构师来说,对软件架构的意义也有着不同的思考。从不同的角度思考的话会得出不同的结论。业界两位大神对软件架构的思考如下:

架构的目的是为了业务增长。
《聊聊架构》--王概凯

架构的本质是管理复杂性。
《优秀架构师必须掌握的架构思维》--杨波

这基本上代表了两个方向的思考,一个是对企业来说软件架构能完成什么,另一个是对于软件架构应该怎样进行内部管理与实施。可以再看一下王概凯在《聊聊架构》中关于软件的另一段描述:

业务是核心,技术是解决业务问题的工具,而架构是让业务长大的组织方法。架构需要用技术来实现拆分,而技术需要架构来合理组织,以提升效率。
《聊聊架构》--王概凯

从作者的角度来看,要理解架构是什么架构可以从从业务价值和技术价值角度来去思考。但要做到最起码的一点:

跳出代码看代码才能真正的理解架构。

只有做到这一点才能真正的理解架构到底是什么,要做什么。

总结

架构是什么?我相信每个人都有自己的理解。使用更加通用的思维模式思考,就可以得到一个结论:软件架构就是为了使系统有序

参考

Design Patterns Lecture 6.

软件架构学习1
软件体系结构
The Clean Architecture
读 Clean Architecture

架构整洁之道, 看这一篇就够了!

优秀架构师必须掌握的架构思维

01 | 架构的本质:如何打造一个有序的系统?

目录
相关文章
|
1月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
128 6
|
1月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
50 1
|
4月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
2月前
|
消息中间件 运维 数据库
架构设计之解析CQRS架构模式!
架构设计之解析CQRS架构模式!
架构设计之解析CQRS架构模式!
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
4月前
|
监控 安全 中间件
Python Django 后端架构开发: 中间件架构设计
Python Django 后端架构开发: 中间件架构设计
51 1
|
4月前
|
存储 缓存 Cloud Native
MPP架构数据仓库使用问题之ADB PG相比Greenplum的HAWQ在架构设计上有什么不同
MPP架构数据仓库使用问题之ADB PG相比Greenplum的HAWQ在架构设计上有什么不同
|
5月前
|
人工智能 供应链 架构师
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
60 2
|
20天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。