前言
welcome to chenqionghe's blog,架构能力其实更像是一种内功,须要咱们不断地去学习,让咱们用一张正能量的图片开启美好的学习生活,let's do it~
python
1、软件架构的定义
架构是一个系统的基本组织,涵盖所包含的组件 ,组件之间的关系、组件与环境的关系,以及指导架构设计和演进的原则等内容
设计模式
2、软件架构与设计
软件架构和软件设计中都有“设计”的意思,但与后者相比 ,前者具备更高的抽象性和更广的范围安全
- 软件架构关注如何对系统中的结构和交互进行较高级别的描述,它关注的是那些与系统骨架相关的决策问题,例如:功能、组织 、技术、业务和质量标准等。
- 软件设计关注构成系统的部件或组件,以及子系统是如何组织的,关注的问题一般更接近代码或模块自己,例如:
- 将代码分红哪些模块?如何组织?
- 给不一样的功能分配哪些类(或模块)?
- 对于类“C”应该使用哪一种设计模式?
- 在运行时对象之间是如何交互的?传递什么消息?如何实施交互?
3、软件架构的几个方面
系统
系统是以特定方式组织的组件集合,以实现特定的功能。
软件系统是其软件组件的集合。一个系统一般能够划分为若干个子系统。
架构
结构
结构是根据某个指导规则或原则来组成或组织在一块儿的一组元素的集合,能够是软件或硬件系统。
软件架构能够根据观察者的上下文展现各个层次的结构
框架
环境
软件系统所在的上下文或环境对其软件架构有直接的影响。
这样的上下因素能够是技术、商业、专业、操做等
函数
利益相关者
任何对某个系统及其成功与否感兴趣或关心的个体或团体,都是利益相关者。
例如:架构师、开发团队、客户、项目经理和营销团队等
工具
4、软件架构的结构特征
运行时结构
在运行时建立的对象及其之间的交互方式常常决定部署架构。
部署架构与可扩展性、性能、安全性和交互操做性等质量属性密切相关
性能
模块结构
为了分解任务,如何拆分代码并把代码组织到模块和包中,这与系统的可维护性和可修改性密切相关,由于学习
- 在代码组织过程当中考虑到可扩展性的话,一般会将父类放在单独定义好的具备恰当文档和配置的包中,这样就能够轻易地经过增长外部模块进行扩展,而不须要处理太多的依赖关系
- 对于那些依赖于外部或第三方开发者(库、框架等)的代码,经过会根据提供的安装或部署步骤,从外部源手动或自动地获取并补丁所有各类依赖。此类代码还提供多种文档(例如README、INSTALL)等,它们清楚地记录了这些步骤
5、软件架构的质量属性
质量属性是系统的可度量和可测试的特性,可用于评估系统在其指定环境中的非功能性需求方面的达成状况测试
可修改性
定义为对系统进行修改的容易程度,以及系统对理发进行调整的灵活性。
这是讨论的修改不光是代码的修改、部署的修改,而是任何层次上的修改。
通常架构师对可修改性的兴趣点以下:
- 难点:对系统进行修改的难易程度
- 成本:进行修改须要的时间和资源
- 风险:任何与系统修改相关的风险
代码可读性越强,其可修改性就越强,代码的可修改性与可读性成正比
可测试性
指一个软件系统支持经过测试来检测故障的程度。
可测试性也能够认为是一个软件系统向最终用户和集成测试隐藏了多少bug
一个系统的可测试性越好,它能隐藏的bug就越少。
可扩展性
指系统可以适应不断增加的负载需求,但同时要保证可接受的处理性能,通常分为两大类:
- 横向(水平)扩展性。意味着经过向其中添加更多多的计算节点。
- 纵向(垂直)扩展性。涉及系统单个节点中资源的添加或移除
性能
指系统在给定的计算资源内完成的工做量,完成的工做量和计算资源的比例(work/unit)越高,性能越高。
计算资源的单位有如下几种
- 响应时间。一个函数或执行单元运行所须要的时间。
- 延迟。某个系统被激活并提供响应所需的时间。
- 吞吐量。系统处理信息的某种比率。
可用性
指系统处于彻底可操做状态的程度,以便在任什么时候候得到调用请求时能够执行的能力
- 可靠性
系统的可用性和可靠性密切相关,系统越可靠,可用性就越高。 - 故障恢复能力
影响可用性的另外一个因素是从故障中恢复的能力,包括了故障检测、故障恢复、故障预防 - 数据一致性
CAP定理指出,系统的可用性与其数据一致性有密切联系。一致性和可用性通常膛会同时成立,由于可能通讯失败,系统能够在一致性或可用性之间进行选择
安全性
避免被未通过身份验证的访问损害数据和逻辑,同时继续向经过谁的其余系统和角色提供服务的一种能力。
可部署性
指软件从开发环境到产品运行环境移交的难易程度。
有如下相关因素:
- 模块结构。
将系统划分为易于部署的一个个子单元,则部署会容易 - 产品运行环境与开发环境。与
开发环境结构很是类似的产品运行环境会使部署 - 开发生态系统支持。
为系统提供成熟的工具链支持,容许各类依赖关系自动创建和验证等配置项内容,从而提升可部署性。 - 标准配置。
一个好的方式是开发者保持开发环境的配置结构和产品运行环境一致。 - 标准化基础设施。
将部署保持在一个标准化的基础设施上,提升可部署性 - 容器使用
随着Docker容器技术的普及,能够规范软件,减小启动/中止的开销,从而使部署更容易。
6、其余常见概念
内聚
一个模块内相关联程度的度量,描述的是模块内的功能联系
若一个模块之间各元素联系紧密,则内聚性就高(高内聚)
若是能作到将模块作成一个功能类聚、独立性强、内部紧密结合才是一个理想的类聚模块,这对初学都来讲,很是不容易,不光是我的技术能力的挑战,更是对某个领域业务水平的挑战。
耦合
各模块间相互联系紧密程度的一种度量。
模块之间联系少,耦合性就越低,模块之间的相对独立性就越强。
企业架构
企业架构是一个定义企业结构和行为的概念蓝图。它肯定了企业结构、流程、人员和信息流动如何与其核心目标相一致,以便有效地实现当前和将来的目标
系统架构
系统架构是系统的基本组织形式,由其结构和行为视图表示。该结构由两部分肯定:构成系统的组件和组件的行为。组件的行为是指组件之间的交互,以及组件与外部系统之间的交互blo
以上内容由chenqionghe,参考《软件架构-python语言实现》,light weight baby~