15 高可用网站的软件质量保证

2023-11-12 01:20

本文主要是介绍15 高可用网站的软件质量保证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

在网站运维实践中,除了网络、服务器等硬件故障导致的系统可用性风险外,还有 来自软件系统本身的风险。

关于传统的软件测试和软件质量保证管理无需赘言,本节重点讨论网站为了保证线 上系统的可用性而采取的一些与传统软件开发不同的质量保证手段。


1 网站发布

网站需要保证7x24高可用运行,同时网站又需要不断地发布新功能吸引用户以保证 在激烈的市场竞争中获得成功。许多大型网站每周都需要发布一到两次,而中小型网站 则更加频繁,一些处于快速发展期的网站甚至每天发布十几次。

不管发布的新功能是修改了一个按钮的布局还是增加了一个核心业务,都需要在服 务器上关闭原有的应用,然后重新部署启动新的应用,整个过程还要求不影响用户的使 用。这相当于要求给飞行中的飞机换个引擎,既不能让飞机有剧烈晃动(影响用户体验), 也不能让飞机降落(系统停机维护),更不能让飞机坠毁(系统故障网站完全不可用)o

网站的发布过程事实上和服务器宕机效果相当,其对系统可用性的影响也和服务器宕机相似。所以设计一个网站的高可用架构时,需要考虑的服务器宕机概率不是物理上 的每年一两次,而是事实上的每周一两次。也许你认为这个应用不重要,重启也非常快, 用户可以忍受每年一到两次的宕机故障,因而不需要复杂的高可用设计。事实上,由于 应用的不断发布,用户需要面对的是每周一到两次的宕机古攵障。

但是网站发布毕竟是一次提前预知的服务器宕机,所以过程可以更柔和,对用户影响更小。通常使用发布脚本来完成发布,其流程如图5.14所示。

图5.14网站应用发布流程

发布过程中,每次关闭的服务器都是集群中的一小部分,并在发布完成后立即可以访问,因此整个发布过程不影响用户使用。


2 自动化测试

代码在发布到线上服务器之前需要进行严格的测试。即使每次发布的新功能都是在原有系统功能上的小幅增加,但为了保证系统没有引入未预料的Bug,网站测试还是需要 对整个网站功能进行全面的回归测试。此外还需要测试各种浏览器的兼容性。在发布频 繁的网站应用中,如果使用人工测试,成本、时间及测试覆盖率都难以接受。

目前大部分网站都采用Web自动化测试技术,使用自动测试工具或脚本完成测试。 比较流行的Web自动化测试工具是Thoughtworks开发的Seleniumo Selenium运行在浏览 器中,模拟用户操作进行测试,因此Selenium可以同时完成Web功能测试和浏览器兼容测试。

大型网站通常也会开发自己的自动化测试工具,可以一键完成系统部署,测试数据生成、测试执行、测试报告生成等全部测试过程。许多网站测试工程师的编码能力毫不 逊于软件工程师。


3 预发布验证

即使是经过严格的测试,软件部署到线上服务器之后还是经常会出现各种问题,甚 至根本无法启动服务器。主要原因是测试环境和线上环境并不相同,特别是应用需要依 赖的其他服务,如数据库,缓存、公用业务服务等,以及一些第三方服务,如电信短信 网关、银行网银接口等。

也许是数据库表结构不一致;也许是接口变化导致的通信失败;也许是配置错误导致 连接失败;也许是依赖的服务线上环境还没有准备好,这些问题都有可能导致应用故障。

因此在网站发布时,并不是把测试通过的代码包直接发布到线上服务器,而是先发 布到预发布机器上,开发工程师和测试工程师在预发布服务器上进行预发布验证,执行 一些典型的业务流程,确认系统没有问题后才正式发布。

预发布服务器是一种特殊用途的服务器,它和线上的正式服务器唯一的不同就是没 有配置在负载均衡服务器上,外部用户无法访问,如图5.15所示。

在这里插入图片描述

预发布服务器和线上正式服务器(应用服务器1, 2, 3 )都部署在相同的物理环境(同一个数据中心甚至同一个机架上,如果使用虚拟机,甚至可能在同一个物理服务器上) 中,使用相同的线上配置,依赖相同的外部服务。网站工程师通过在自己的开发用计算 机上配置hosts文件绑定域名IP关系直接使用IP地址访问预发布服务器。如果在预发布 服务器上执行的测试验证是正确的,基本可以确保在线上正式服务器部署时也没有问题。

不过,也有可能会因为预发布验证而引入问题。因为预发布服务器连接的是真实的 生产环境,所有的预发布验证操作都是真实有效的数据,这些操作也许会引起不可预期 的问题。比如创建一个店铺,上架一个商品,就有可能有真的用户过来购买,如果不能 发货,会导致用户投诉。

一个真实的案例是某网站需要验证海外第三方支付功能,每件商品的售价本来是数 千美金,工程师不可能花数千美金去验证自己开发的功能,于是将金额改成一美元,验 证成功后,幸福地发布上线了,第二天上班后,发现大量商品以一美元的价格成交。

此外,在网站应用中强调的一个处理错误的理念是快速失败(fast failed ),即如果系 统在启动时发现问题就立刻抛岀异常,停止启动让工程师介入排查错误,而不是启动后 执行错误的操作。


4 代码控制

对于大型网站,核心应用系统和公用业务模块涉及许多团队和工程师,需要对相同 的代码库进行共同开发和维护。而这些团队对同一个应用的开发维护(开发周期和发布 时间点各不相同),如果代码控制环节岀了问题,可能将有问题的代码发布上线,将问题 带入生产环境,导致系统故障。

网站代码控制的核心问题是如何进行代码管理,既能保证代码发布版本的稳定正确,
同时又能保证不同团队的开发互不影响。

目前大部分网站使用的源代码版本控制工具是SVN, SVN代码控制和版本发布方式 般有以下两种。

  1. 主干开发、分支发布

代码修改都在主干(trunk )上进行,需要发布的时候,从主干上拉一个分支(branch ) 发布,该分支即成为一个发布版本,如果该版本发现Bug,继续在该分支上修改发布,并
将修改合并(merge )回主干,直到下次主干发布。

  1. 分支开发,主干发布

任何修改都不得在主干上直接进行,需要开发一个新功能或者修复一个Bug时,从 主干拉一个分支进行开发,开发完成且测试通过后,合并回主干,然后从主干进行发布, 主干上的代码永远是最新发布的版本。

这两种方式各有优缺点。主干开发、分支发布方式,主干代码反应目前整个应用的 状态,一目了然,便于管理和控制,也利于持续集成。分支开发,主干发布方式,各个 分支独立进行,互不干扰,可以使不同发布周期的开发在同一应用中进行。

目前网站应用开发中主要使用的是分支开发、主干发布的方式,如图5.16所示。

在这里插入图片描述

可以想象,如果使用主干开发、分支发布,那么在同一个应用上,对于不同开发周 期,不同发布时间的项目,有可能A项目发布的时候,B项目只开发了一半,这时候的 主干代码是半成品,根本不能发布。而使用分支开发、主干发布的方式,只需要将A项 目的分支合并回主干即可发布,不受B项目发布时间的影响。

目前在开源技术社区,Git作为版本控制工具,正逐步取代SVN的地位。Git对分布 式开发,分支开发等有更好的支持,也更容易在各个开发分支上及时反映主干的最新更 新,避免SVN在最后提交分支代码时发现和主干代码差别太大难以merge成功。但是Git 的学习成本较高,如何和网站开发流程相结合还缺乏最佳实践和使用规范。不过相信Git 成为网站的标准版本控制工具是迟早的事。


5 自动化发布

网站的版本发布频繁,整个发布过程需要许多团队通力合作,发布前,多个代码分 支合并回主干可能会发生冲突(conflict),预发布验证也会带来风险,每次发布又相当于 一次宕机事故。因此网站发布过程荆棘丛生,一不小心就会踩到雷。

对于有固定发布日期的网站(很多网站选择周四作为发布日,这样一周前面有三天时间可以准备发布,后面还有一天时间可以挽回错误。如果选择周五发布,发现文件就必须要周末加班了。),一到发布日,整个技术部门甚至运营部门就如临大敌,电话声此 起彼伏,工程师步履匆匆,连空气中的温度都仿佛升高了几度。即便如此,发布过程还 是常常岀错,发布日工程师加班到凌晨是常有的事。而且容易忙中岀错,因发布引发的 故障也居高不下。

据说国外某知名互联网公司的CTO就因为没有有效手段控制发布故障、减少发布日 的加班而引咎辞职。其继任者提出了一个火车发布模型:将每个应用的发布过程看作一 次火车旅程,火车定点运行,期间有若干站点,每一站都进行例行检查,不通过的项目 下车,剩下的项目继续坐着火车旅行,直到火车到达终点(应用发布成功)。但实际中, 有可能所有项目都下车了,开着空车前进是没有意义的,火车不得不回到起点,等待解 决了问题再重来一次。还有可能是车上有达官贵人(重点项目,CEO跟投资人拍胸脯的 项目),他不上车,谁也别想走,他出了错,大家都跟着回去重来。简化的火车发布模型 如图5.17所示。

在这里插入图片描述

由于火车发布模型是基于规则驱动的流程,所以这个流程可以自动化。采用火车发 布模型的网站会开发一个自动化发布的工具实现发布过程的自动化。根据响应驱动流程, 自动构造代码分支,进行代码合并,执行发布脚本等。正常流程下,可以做到发布过程无人值守,无需SCM (网站配置管理员)参与,每个项目相关人员基于流程执行相应的 操作,即可完成应用自动发布。人的干预越少,自动化程度越高,引入故障的可能性就 越小,火车准点到达,大家按时下班的可能性就越大。


6 灰度发布

应用发布成功后,仍然可能发现因为软件问题而引入的故障,这时候就需要做发布 回滚,即卸载刚刚发布的软件,将上一个版本的软件包重新发布,使系统复原,消除故障。

大型网站的主要业务服务器集群规模非常庞大,比如某大型应用集群服务器数量超过一万台。一旦发现故障,即使想要发布回滚也需要很长时间才能完成,只能眼睁睁看 着故障时间不断增加却干着急。为了应付这种局面,大型网站会使用灰度发布模式,将 集群服务器分成若干部分,每天只发布一部分服务器,观察运行稳定没有故障,第二天继续发布一部分服务器,持续几天才把整个集群全部发布完毕,期间如果发现问题,只 需要回滚已发布的一部分服务器即可。如图5.18所示。

在这里插入图片描述

灰度发布也常用于用户测试,即在部分服务器上发布新版本,其余服务器保持老版本(或者发布另一个版本),然后监控用户操作行为,收集用户体验报告,比较用户对两个版本的满意度,以确定最终的发布版本。这种手段也被称作AB测试。

这篇关于15 高可用网站的软件质量保证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394113

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

一、什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的。停工时间,就是不能向用户提供服务的时间。高可用,就是系统具有高度可用性,尽量减少停工时间。如何用最简单的方法来搭建一个高效率可用的服务端JAVA呢? 停工的原因一般有: 服务器故障。例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等;访问量急剧上升,导致服务器压力过大导致访问量急剧上升的原因;时间和

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的