目录
四、软件架构演化评估方法
根据演化过程是否已知可将评估过程分为:演化过程已知的评估和演化过程未知的评估。
4.1 演化过程已知的评估
演化过程已知的评估其目的在于通过对架构演化过程进行度量,比较架构内部结构上的差异以及由此导致的外部质量属性上的变化,对该演化过程中相关质量属性进行评估。
架构演化评估的执行过程如下图所示。图中A0和An表示一次完整演化前后的相邻版本的软件架构。每经过一次原子演化,即可得到一个架构中间演化版本Ai。对每个中间版本架构进行度量,得到架构Ai的质量属性度量值Qi。D(i-1,i)是版本间的质量属性距离。
基于度量的架构演化评估方法,其基本思路在于通过对演化前后的软件架构进行度量,比较架构内部结构上的差异以及由此导致的外部质量属性上的变化。具体包括:架构修改影响分析、监控演化过程、分析关键演化过程。
4.1 演化过程未知的评估
当演化过程未知时,我们无法像演化过程已知时那样追踪架构在演化过程中的每一步变化,只能根据架构演化前后的度量结果逆向推测出架构发生了哪些改变,并分析这些改变与架构相关质量属性的关联关系。
五、大型网站系统架构演化实例
大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以 P 计的数据和面对数以亿计的用户,问题就会变得很棘手。通常大型网站架构主要解决这类问题。
5.1 第一阶段:单体架构
应用程序、数据库、文件等所有资源都在一台服务器上。如下左图:
5.2 第二阶段:垂直架构
将应用和数据分离,整个网站使用 3 台服务器:应用服务器、文件服务器、数据服务器。如上有图。
5.3 第三阶段:使用缓存改善网站性能
包括在应用服务器上的本地缓存和在专门的分布式缓存服务器上的远程缓存。
5.4 第四阶段:使用服务集群改善网站并发处理能力
通过负载均衡调度服务器,将来自用户浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,解决高并发、海量数据问题。
5.5 第五阶段:数据库读写分离
应用服务器在写数据时,访问主数据库,主服务器通过主从复制机制将数据更新同步到从服务器。在应用服务器读数据时,访问从数据库。
5.6 第六阶段:使用反向代理和 CDN 加速网站响应
CDN 和反向代理的基本原理都是缓存。
(1)CDN 部署在网络提供商的机房,用户在请求网站服务时,可在距离最近的网络提供商机
房获取数据。
(2)反向代理部署在网站的中心机房,用户请求到达中心机房后,先访问反向代理服务器。
5.7 第七阶段 ~ 第十阶段
第七阶段:使用分布式文件系统和分布式数据库系统。进行业务分库,将不同业务的数据部署在不同的物理服务器上。
第八阶段:使用 NoSQL 和搜索引擎。
第九阶段:业务拆分。将一个网站拆分成许多不同的应用,每个应用独立部署。
第十阶段:分布式服务。
六、软件架构维护
软件架构维护过程一般涉及架构知识管理、架构修改管理和架构版本管理。
软件架构知识管理是对架构设计中所隐含的决策来源进行文档化表示,进而在架构维护过程中帮助维护人员对架构的修改进行完善的考虑,并能够为其他软件架构的相关活动提供参考。
架构知识的定义:架构知识=架构设计+架构设计决策。即需要说明在进行架构设计时采用此种架构的原因。
架构知识管理侧重于软件开发和实现过程所涉及的架构静态演化,从架构文档等信息来源中捕捉架构知识,进而提供架构的质量属性及其设计依据以进行记录和评价。
在软件架构修改管理中,一个主要的做法就是建立一个隔离区域保障该区域中任何修改对其他部分的影响比较小,甚至没有影响。为此,需要明确修改规则、修改类型,以及可能的影响范围和副作用等。
软件架构版本管理为软件架构演化的版本演化控制、使用和评价等提供了可靠的依据,并为架构演化量化度量奠定了基础。
往期推荐
【系统架构设计师】十二、系统质量属性与架构评估(系统架构评估|SAAM|ATAM|CBAM)-CSDN博客文章浏览阅读1k次,点赞29次,收藏9次。系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。它利用数学或逻辑分析技术,针对系统的一致性、正确性、质量属性、规划结果等不同方面,提供描述性、预测性和指令性的分析结果。敏感点:是实现质量目标时应注意的点,是一个或多个构件的特性。权衡点:是影响多个质量属性的敏感点。例如修改某个功能,影响到了架构的性能属性和安全性属性。https://shuaici.blog.csdn.net/article/details/140444642【系统架构设计师】十三、软件可靠性(基本概念|软件可靠性建模)-CSDN博客文章浏览阅读588次,点赞10次,收藏9次。软件可靠性是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。软件可靠性和硬件可靠性区别: (1)复杂性:软件复杂性比硬件高,大部分失效来自于软件失效。 (2)物理退化:硬件失效主要是物理退化所致,软件不存在物理退化。 (3)唯一性:软件是唯一的,每个COPY版本都一样,而两个硬件不可能完全一样。 (4)版本更新周期:硬件较慢,软件较快。https://shuaici.blog.csdn.net/article/details/140492470【系统架构设计师】十一、系统架构设计(中间件|典型应用架构)-CSDN博客文章浏览阅读194次。中间件:在一个分布式系统环境中处于操作系统和应用程序之间的软件,可以在不同的技术之间共享资源,将不同的操作系统、数据库、异构的网络环境以及若干应用结合成一个有机的协同工作整体。JSP发一个数据到Servlet,Servlet收到后做下解析再根据数据调用相应的Service去服务,Service如果有要调用数据库就通过DAO跟数据库交互,使用JavaBean完成封装,返回结果给Servlet,Servlet再返回给JSP。https://shuaici.blog.csdn.net/article/details/140464924【系统架构设计师】十四、软件架构的演化和维护(演化和定义|面向对象软件架构演化过程|软件架构演化方式的分类)-CSDN博客文章浏览阅读437次,点赞10次,收藏9次。软件架构的演化就是软件整体结构的演化,演化过程涵盖软件架构的全生命周期,包括软件架构需求的获取、软件架构建模、软件架构文档、软件架构实现以及软件架构维护等阶段。所以,人们通常说软件架构是演化来的,而不是设计来的。https://shuaici.blog.csdn.net/article/details/140522109