一、程序员进阶架构师的基础知识【计算机基础】
二、程序员进阶架构师的基础知识【操作系统】
三、程序员进阶架构师的基础知识【计算机网络基础】
四、程序员进阶架构师的专业知识【软件工程基础】
五、程序员进阶架构师的专业知识【UML建模工具】
六、程序员进阶架构师的专业知识【系统分析】
七、程序员进阶架构师的专业知识【系统设计】
八、程序员进阶架构师的专业知识【架构设计】
九、程序员进阶架构师的专业知识【架构质量及评估】
十、程序员进阶架构师的专业知识【软件测试及维护】
对架构设计的工作进行了详细描述,了解了在架构设计的过程中使用什么方法,选用什么架构风格,除此之外,架构设计中还有一项非常重要的工作,就是对架构的质量也就是非功能性需求进行分析和设计。本文围绕质量属性进行展开描述,详细了解各个质量属性以及在系统中的应用。
质量属性属于系统架构中的非功能性需求,并不被功能所决定。一个系统想要更好的运行离不开对非功能性需求进行分析和设计。质量属性如下:
不同的软件项目,关注不同的质量属性,比如保密系统注重于安全,电商的项目注重于性能及可用性。同时质量属性之间可能会相互抑制,比如安全性提升了性能会有所下降。
质量属性通过质量场景描述。比如“在并发用户数量为1000人时,用户的交易请求需要在0.5秒内得到响应”。质量场景的6个组成部分,描述系统如何对刺激做出响应:
可用性是系统正常运行时间的比例。质量场景6个组成部分在可用性的含义如下:
负载技术 | 描述 | 优点 | 缺点 |
---|---|---|---|
基于http的负载均衡 | 根据用户http请求,计算出一个真实的web服务地址,并将该地址写入http重定向响应中返回浏览器,浏览器重新进行访问。 | 比较简单。 | 浏览器需要两次请求服务器才能完成一次访问,性能比较慢。 |
基于DNS的负载均衡 | 网络DNS详细了解 | 将负载均衡工作交给DNS,省却网站管理员维护负载均衡的麻烦,同时DNS还支持基于地理位置的域名解析,将域名解析成距离用户最近的一个服务器地址,加快访问速度,改善性能。 | DNS是多级解析,每一级都可能有缓存记录,当某一服务下线后,该服务器对应的DNS记录可能仍然在,导致分配到该服务器的用户访问失败,负载均衡效果不是很好。 |
基于NAT(Network Address Translation网络地址转换)的负载均衡 | 将一个外部ip地址映射多个内部ip地址,对每次连接请求动态转换为一个内部的地址,从而达到负载均衡目的。 | 在响应请求时速度较反向代理速度快 | 当请求数据较大(视频)时速度较慢。 |
反向代理负载均衡 | 反向代理作用在服务端,是一个虚拟的ip(VIP),对于用户的一个请求,通过反向代理服务器会转发到多个后台服务器处理。 | 部署简单,处于http协议层面。 | web服务器ip不用暴露在外,不需要使用外部ip,而代理服务器作为沟通桥梁需要配置双网卡、内外两个ip。 |
负载算法 | 描述 | 优点 | 缺点 |
---|---|---|---|
轮询法 | 将请求按顺序轮流地分配到每个节点上,不关系每个服务器实际的连接数和当前的系统负载。 | 简单高效,易于水平扩展 。 | 不考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多会受到性能差的服务器影响 。 |
随机法 | 将请求随机地分配到每个节点上 。由概率统计得知,随着客户端调用服务器的次数增多,其实际效果越来越近于平均分配,也就是轮询的效果 | 和轮询相似 | 和轮询相似 |
源地址哈希法 | 根据客户端的ip地址,通过哈希函数计算到一个数值,用该数值对服务器节点数量进行取模运算,得到的结果便是访问节点的序号。同一个IP地址的客户端,当后端服务列表不变时,它每次都会落到同一台服务器进行访问 | 相同的IP每次落在同一个节点,可以人文的干预客户端的请求方向,例如灰度发布。 | 如果某个节点出故障,会导致节点上的客户端无法使用,无法保证高可用。 |
加权轮训法 | 不同服务器的配置可能和当前系统的负载并不相同,因此他们的抗压能力也不同。给配置高、负载高的服务器配置高的权重,让其处理更多的请求。给配置低、负载低的服务器配置低的权重,降低其系统负载,加权轮询可以很好处理该问题,并将请求顺序且按照权重分配到后端。 | ||
加权随机法 | 与加权轮训法一样,不同的是,它是按照权重随机请求后端服务器,而非顺序。 | ||
键值范围法 | 根据键的范围负载,比如0到10万的用户请求第一个节点,10-20万的用户请求第二个节点…以此类推 | 容易水平扩展,随着用户数量增加,可以增加节点而不影响就数据。 | 容易负载不均衡,比如新用户活跃度高,旧用户活跃度低,那么压力就全在新增的节点上,旧节点资源浪费。而且也容易单点故障,无法满足高可用。 |
最小连接法 | 根据每个节点当前的连接情况,动态的选取其中积压连接数最少的一个节点处理当前请求,尽可能的提高服务器的利用效率,将请求合理的分流到每台服务器。俗称闲的人不能闲着,大家一起动起来 | 动态,根据节点状况实时变化。 | 提高复杂度,每次连接断开时需要重新计数。 |
最快响应法 | 根据请求的响应时间,来动态的调整每个节点的权重,将响应速度快的服务节点分配更多请求,响应慢的分配少的请求。俗称能者多劳。 | 动态,实时变化,控制的力度更细 | 复杂度更高,每次需要计算请求的响应速度。 |
观察模式法 | 综合了最小连接数和最快响应度,同时考量这两个指标数,进行一个权重的分配 |
性能是系统处理任务所需要时间或单位时间内的处理量。质量场景6个组成部分在性能的含义如下:
性能指标时软、硬件的性能指标集成,包括计算机、路由器、交换机、网络、操作系统、数据库、WEB服务器等。
性能指标 | 具体能容 |
---|---|
计算机 | 时钟频率(主频)、运算速度、运算精度、内存的存储容量、存储器的存储周期、数据处理速率、吞吐率、各种响应时间等。 |
网络 | 设备级性能指标、网络级性能指标、应用级性能指标、用户级性能指标、吞吐量。 |
操作系统 | 系统的可靠性、系统的吞吐率、系统响应时间、系统资源利用率、可移植性。 |
数据库管理系统 | 数据库的大小、表的数量、大小以及表中行的大小和行的数量、数据库所允许的索引数量、最大并发事务处理能力、负载均衡能力、最大连接数等。 |
WEB服务器 | 最大并发数、响应延迟、吞吐量 |
计算机等处理速度和许多因素有关,例如:机器的主频、执行什么样的操作以及主存的速度等。
方法 | 描述 |
---|---|
时钟频率法 | 计算机的时钟频率在一定程度上反应机器速度。时钟频率越高,就算集的工作速度就越高 |
指令执行速度法 | 计算机发展初期常用指令执行速度法衡量计算机速度,因为加法指令的运算速度大体上可以反应出乘法、除法等其他算数运算的速度。 |
等效指令速度法 | 通过各类指令在程序中所占比例进行计算后得到速度。 |
数据处理速率法 | 采用计算PDR值衡量计算机性能,PDR值越大性能越好。 |
综合理论性能法 | 首先计算出处理部件每个计算单元的有效计算率,再按不同字长加以调整,得出理论性能。 |
基准程序法 | 以上的评估方法主要针对CPU的性能,但没有考虑诸如I/O、操作系统、编译程序的效率对系统的性能的影响,因此很难准确评估计算机系统的实际性能。把应用程序中用到最多、最频繁的和核心程序作为评估计算机系统性能的标准程序,称为基准测试程序。 |
对于数据库系统,造成性能不好的原因可能有数据库连接方式、系统应用架构、数据库设计、数据库管理、网络通信等原因,基于这些原因可以采用修改应用模式、建立历史数据库、利用索引技术和分区技术等优化措施,需要调整的参数主要包括CPU和主存使用情况、数据库设计、进程或线程状态、磁盘剩余空间、日志文件大小等。
对于WEB应用系统,性能瓶颈可能有客户端程序、网关接口、数据库连接等,可以采用的措施有改善应用程序的性能和数据库连接、进行流量管理与负载均衡、使用WEB交换机和WEB缓存等,需要调整的参数包括系统的可用性、响应时间、并发用户数以及占用的系统资源等。
可靠性是系统在规定时间及规定环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。
可用性可以通过可靠性的指标进行计算=MTTF/MTBF✖️100。
假设一个系统由n个子系统组成,当且仅当所有的子系统都有正常工作时,系统才能正常工作,这种系统称为串联系统。如果个别子系统出现故障,并且系统不受个别子系统的影响依旧可以正常工作,这种系统称并联系统。
串联系统中如果各个子系统的可靠度分别用R1,R2…Rn表示,则系统的可靠度为:R=R1✖️R2…✖️Rn。
并联系统中如果各个子系统的可靠度分别用R1,R2…Rn表示,则系统的可靠度为:R=1-(1-R1)✖️(1-R2)…✖️(1-Rn)。
集群技术形成的必要条件
集群技术分类
安全性是系统向合法用户提供服务并组织非法用户的能力。质量场景6个组成部分在安全性的含义如下:
系统的安全防范体系也是分层次的,不同层次反映了不同的安全问题,根据网络的应用现状情况和结构将层次划分为物理层安全、系统层安全、网络层安全、应用层安全和安全管理。
数据加密技术
算法 | 描述 |
---|---|
DES | 迭代的分组密码,明文和密文都是64位,使用一个56位的密钥以及附加的8位奇偶校验位。攻击DES的算法主要是穷举法,由于DES密钥长度较短,为了提高安全性,就出现了112位密钥进行三次加密的算法3DES |
IDEA | 在DES基础上发展起来,类似于3DES 。IDEA明文和密文都是64位,密钥长度为128位 |
认证技术
认证又称鉴别或确认,他是证实某事物是否名符其实或是否有效的过程。认证和加密的区别在于,加密用于确保数据的保密性,阻止对手的被动攻击,例如窃听、截取等。认证用于确保数据发送者和接受者的真实性和数据的完整性,阻止对手的主动攻击,例如冒充、篡改和重放等。
可修改性主要关注的是系统修改的成本、时间、内容和人力。质量场景6个组成部分在可修改性的含义如下:
业界已开发出多种软件架构评估的方法,按基于的技术手段来看,可 以分为三类:基于调查问卷或检查表的方式、基于场景的方式和基于 度量的方式。
SAAM是卡耐基梅隆大学软件工程研究所的Kazman等人于1983年提出的一种非功能质量属性的架构分析分析方法,是最早形成文档并得到广泛应用的软件架构分析方法。SAAM的主要输入是问题描述、需求说明和架构描述,其分析过程主要包括场景开发、架构描述、单个场景评估、场景交互和总体评估。
架构权衡分析方法ATAM是一种系统架构评估方法,主要在系统开发之前,针对性能、可用性、安全性和可修改性等质量属性进行评价和折中。ATAM可以分为4个主要的活动阶段,包括需求收集、架构视图描述、属性模型构造和分析、架构决策与折中,整个评估过程强调以属性作为架构评估的核心概念。
描述ATAM方法:评估小组负责人向参加会议的项目干系人介绍 ATAM评估方法。
描述业务动机:项目决策者从业务的角度介绍系统的概况。该描述应该包括系统最重要的功能、技术/管理/经济和政治方面的任何相关限制、与该项目相关的业务目标和上下文,主要的项目干系人,以及架构的驱动因素等。
描述架构:包括技术约束(例如,操作系统、硬件和中间件等)、将与本系统进行交互的其他系统、用以满足质量属性要求的架构方法等。
确定架构方法:通过理解架构方法来分析架构,在这一步,由架构设计师确定架构方法。
生成质量属性效用树:评估小组、设计小组、管理人员和客户代表一起确定系统最重要的质量属性目标,并对这些质量目标设置优先级和细化。质量效用树如下图:
分析架构方法:这一步的主要结果是一个架构方法或风格的列表,与之相关的一些问题,以及设计师对这些问题的回答。通常产生一个风险列表、敏感点和权衡点列表,识别风险、非风险、敏感点和权衡点是进行软件架构评估的重要过程。
质量特性 | 定义 | 示例 |
---|---|---|
敏感点 | 为了实现某种特定的质量属性,影响一个或多个构件所具有的特性 | 对查询请求处理时间的要求将影响系统的数据传输协议和处理过程的设计 |
权衡点 | 指影响多个质量属性,并且多个质量属性来说都是敏感点 | 改变业务数据编码方式会对系统的性能和安全产生影响 |
风险点 | 某些做法可能有些隐患可能导致一些问题 | 对系统某业务逻辑的描述尚未达成共识,这可能导致部分业务功能的重复,影响系统的可修改性 |
非风险点 | 某些做法是可行的、可接受的 | 业务处理时间小于30毫秒,则将请求响应设置成1秒钟是可以接受的 |
讨论场景和对场景分级:项目干系人进行两项相关的活动,分别是集体讨论用例场景和改变场景。用例场景是场景的一种,在用例场景中,项目干系人是一个终端用户,使用系统执行的一些功能。一旦收集了若干个场景后,必须设置优先级。评估人员通过投票表决的方式来完成。
分析架构方法:在收集并分析了场景之后,设计师就可把最高级别的场景映射到所描述的架构中,并对相关的架构如何有助于该场景的实现做出解释。在这一步中,评估小组要重复第6步中的工作,把新得到的最高优先级场景与尚未得到的架构工作产品对应起来。在第7步中,如果未产生任何在以前的分析步骤中都没有发现的高优先级场景,则在第8步就是测试步骤。
描述评估结果:最后,要把ATAM分析中所得到的各种信息进行归纳,并反馈给项目干系人。ATAM的评估结果包括一个简洁的架构描述、表达清楚的业务目标、用场景集合捕获的质量属性、 所确定的敏感点和权衡点的集合、有风险决策和无风险决策、风险主题的集合。
CBAM用来对架构设计决策的成本和收益进行建模,它的基本思想是架构策略影响系统的质量属性,反过来这些质量属性又会为系统的项目干系人带来一些收益(称为“效用”),CBAM协助项目干系人根据其投资收益率选择架构策略。CBAM可以看作是ATAM的补充,在ATAM评估结果的基础上对架构的经济性进行评估。