第10章 软件架构的演化和维护
文章平均质量分 75
第10章 软件架构的演化和维护
huaqianzkh
路虽远行则将至,事虽难做则必成!
展开
-
软件架构维护
软件架构是软件开发和维护过程中的一个重点制品,是软件需求和设计、实现之间的桥梁。软件架构的开发和维护是基于架构软件生命周期中的关键环节,与之相关的步骤包括导出架构需求、架构开发、架构文档化、架构分析、架构实现和架构维护。原创 2024-04-21 18:35:30 · 288 阅读 · 0 评论 -
大型网站系统架构演化实例_9.分布式服务
随着业务拆分越来越小,存储系统越来越庞大,应用系统的整体复杂度呈指数级增加,部署维护越来越困难。由于所有应用要和所有数据库系统连接,在数万台服务器规模的网站中,这些连接的数目是服务器规模的平方,导致数据库连接资源不足,拒绝服务。既然每一个应用系统都需要执行许多相同的业务操作,比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。由这些可复用的业务连接数据库,提供共用业务服务,而应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。此时,网站系统架构如图1所示。原创 2024-04-21 08:41:09 · 964 阅读 · 0 评论 -
大型网站系统架构演化实例_8.业务拆分
大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将整个网站业务分成不同的产品线。如大型购物交易网站都会将首页、商铺、订单、买家、卖家等拆分成不同的产品线,分归不同的业务团队负责。具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址),也可以通过消息队列进行数据分发,当然最多的还是通过访问一个数据存储系统来构成一个关联的完整系统。此时,网站系统架构如图1所示。图1 第九阶段网站架构。原创 2024-04-21 07:27:58 · 478 阅读 · 0 评论 -
大型网站系统架构演化实例_7.使用NoSQL和搜索引擎
随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂,网站需要采用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。NoSQL和搜索引擎都是源自互联网的技术手段,对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。原创 2024-04-20 09:04:17 · 1124 阅读 · 0 评论 -
大型网站系统架构演化实例_6.使用分布式文件系统和分布式数据库系统
任何强大的单一服务器都满足不了大型网站持续增长的业务需求。数据库经过读写分离后,从一台服务器拆分成两台服务器,但是随着网站业务的发展依然不能满足需求,这时需要使用分布式数据库。文件系统也一样,需要使用分布式文件系统。分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。不到不得已时,网站更常用的数据库拆分手段上业务分库,将不同业务的数据部署在不同的物理服务器上。此时,网站系统架构如图1所示。图1 第七阶段网站架构。原创 2024-04-20 07:43:27 · 535 阅读 · 0 评论 -
大型网站系统架构演化实例_5.使用反向代理和CDN加速网站响应
随着网站业务不断发展,用户规模越来越大,由于区域的差别使得网络环境异常复杂,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。主要手段有使用CDN和反向代理。CDN和反向代理的基本原理都是缓存。使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。原创 2024-04-19 22:48:29 · 391 阅读 · 0 评论 -
大型网站系统架构演化实例_4.数据库读写分离
网站在使用缓存后,使对大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分操作(缓存访问不命中、缓存过期)和全部的写操作都需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载压力。原创 2024-04-19 21:47:46 · 427 阅读 · 0 评论 -
大型网站系统架构演化实例_3.使用服务集群改善网站并发处理能力
使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型网站而言,不管多么强大的服务器,对大型网站而言,不管多强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能,从而实现系统的可伸缩性。应用服务器实现集群是网站可伸缩架构设计中较为简单成熟的一种。原创 2024-04-18 22:13:49 · 535 阅读 · 0 评论 -
大型网站系统架构演化实例_2.使用缓存改善网站性能
网站访问的特点和现实世界的财富分配一样遵循二八定律:80%的业务访问集中在20%的数据上。既然大部分业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能了。网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况。远程分布式缓存。原创 2024-04-18 21:36:48 · 379 阅读 · 0 评论 -
大型网站系统架构演化实例_1.单体架构和垂直架构
大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得很棘手。通常大型网站架构主要解决这类问题。原创 2024-04-17 21:56:59 · 899 阅读 · 0 评论 -
软件架构演化评估方法
根据演化过程是否已知可将评估过程分为:演化过程已知的评估和演化过程未知的评估。演化过程已知的评估其目的在于通过对架构演化过程进行度量,比较架构内部结构上的差异以及由此导致的外部质量属性上的变化,对该演化过程中相关质量属性进行评估。当演化过程未知时,我们无法像演化过程已知时那样追踪架构在演化过程中的每一步变化,只能根据架构演化前后的度量结果逆向推测出架构发生了哪些改变,并分析这些改变与架构质量属性的关联关系。原创 2024-04-17 20:43:34 · 276 阅读 · 0 评论 -
软件架构演化原则
以下列举了18种软件架构可持续演化原则,并针对每个原则设计了相应的度量方案。这些度量方案看似简单,但每个方案都能紧抓该原则的本质,可以做到从架构(系统的整体结构)层面提供有价值的信息,帮助对架构进行有效观察。原创 2024-04-16 21:38:44 · 622 阅读 · 0 评论 -
软件架构动态演化
架构的动态演化主要来自两类需求:①软件内部执行所导致的体系结构改变,例如,许多服务器端软件会在客户请求到达时创建新的组件来响应用户需求;②软件系统外部的请求对软件进行的重配置,例如,操作系统在升级时无须重新启动,在运行过程中就完成对体系结构的修改。原创 2024-04-16 20:32:50 · 463 阅读 · 0 评论 -
软件架构静态演化
软件架构静态演化的需求是广泛存在的,可以归结为两个方面。在架构开发和实现过程中对原有架构进行调整,保证软件实现与架构的一致性以及软件开发过程的顺利进行。软件发布之后由于运行环境的变化,需要对软件进行修改升级,在此期间软件的架构同样要进行演化。原创 2024-04-15 21:17:01 · 465 阅读 · 0 评论 -
软件架构演化方式的分类以及架构演化时期
将软件架构演化方式分为4类(Jeffrey M.Barnes等人的分类方法):第1类是对演化的支持,如代码模块化的准则、可维护性的指示(如内聚和耦合)、代码重构等;第3类是架构变换的形式方法,包括系统结构和行为变换的模型,以及架构演化的重现风格等;第4类是架构演化的成本收益分析,决定如何增加系统的弹性。,前者发生在软件架构的设计、实现和维护过程中,软件系统还未运行或者处在运行停止状态;分类:基于过程和函数的演化、面向对象的演化、基于组件的演化和基于架构的演化。(3)针对软件架构的演化过程。原创 2024-04-15 19:55:38 · 304 阅读 · 1 评论 -
面向对象软件架构演化过程
在顺序图中,组件的实体为对象。组件本身包含了众多的属性,如接口、类型、语义等,这些属性的演化是对象自身的演化,对于描述对象之间的交互过程并无影响。因此,会对架构设计的动态行为产生影响的演化只包括AddObject(AO)和DeleteObject(DO)两种。AO表示在顺序图中添加一个新的对象。这种演化一般是在系统需要添加新的对象来实现某种新的功能,或需要将现有对象的某个功能独立以增加架构灵活性的时候发生。DO删除顺序图中现有的一个对象。原创 2024-04-14 09:01:51 · 342 阅读 · 0 评论 -
软件架构演化和定义的关系
理解软件架构演化时,需要考虑具体的软件架构定义。例如,如果软件架构定义是SA={components,connectors,constraints),也就是说,软件架构包括组件(Components)、连接件(Connectors)和约束(Constraints)三大要素,这类软件架构演化主要关注的就是组件、连接件和约束的添加、修改与删除等。组件。原创 2024-04-13 20:50:14 · 335 阅读 · 0 评论