1.3 互联网架构目标与度量
互联网架构的IT系统也要满足低成本、高性能、易扩展、高可用、高安全的目标,并对系统从这几个维度进行综合考量。
(1)低成本,实现技术架构要尽量控制成本,从时间阶段上可以分为建设成本、维护成本,从支出类型上可以分为硬件成本、商业中间件成本、软件开发成本等。
(2)高性能,网站性能指标具体体现在响应时间、并发数、吞吐量、系统错误率、系统负载等技术指标上。
■ 系统的响应时间是指系统完成某一功能需要使用的时间,也就是从用户发出请求到收到结果所需要的时间,响应时间可能包括网络传输时间、服务处理、数据库处理时间等。
■ 并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量,准确地说是指同时发出请求的用户数。
■ 系统的吞吐量(TPS)是指系统每秒处理的总的用户请求数。在性能测试中,TPS=VU×R/T,其中VU是同时发出请求的虚拟用户数目,R是每个虚拟用户发出的请求数目,T是性能测试所用的时间。
■ 系统错误率是指系统在负载情况下,失败交易的概率。错误率=(失败交易数/交易总数)×100%。稳定性较好的系统,其错误率应该由超时引起,即为超时率。
■ 资源利用率是各种计算机资源的使用情况,包括系统负载(Load)、内存利用率、SWAP内存交换空间利用率、网络I/O、硬盘I/O等。其中系统负载是系统CPU繁忙程度的度量,是指当前正在被CPU执行和等待被CPU执行的进程数目总和。多核CPU情况下,完美情况是所有CPU都在使用,没有进程在等待处理,所以,Load的理想值是CPU的数目。当Load值低于CPU数目时,表示CPU有空闲,资源存在浪费;当Load值高于CPU数目时,表示进程在排队等待CPU,系统资源不足,影响应用程序的执行性能。对于内存,要衡量系统内存使用率、SWAP(与虚拟内存交换)交换空间利用率,太多的交换将会引起系统性能低下,一般应低于70%。磁盘指标主要有每秒读写多少兆字节、磁盘繁忙率、磁盘队列数、平均服务时间、平均等待时间、空间利用率等,其中磁盘繁忙率是直接反映磁盘是否有瓶颈的重要依据,一般情况下要低于70%。网络吞吐量指标主要是每秒有多少兆字节流量进出,一般情况下不能超过设备或链路最大传输能力的70%。
系统性能问题首先反映在系统资源指标上,例如CPU、内存、磁盘I/O、网络I/O。分析问题时需要查看中间件指标情况,如虚拟机的垃圾收集情况,还要掌握数据库相关指标情况,如慢查SQL、命中率、锁、参数设置等。如果以上指标都正常,而系统性能仍然很低,则应用程序的算法、缓冲、缓存、同步或异步可能有问题。一方面,可以结合问题现象和系统架构对问题正向推导,此时主要依赖对系统的了解和把控。另一方面,对于较难定位的问题,可以利用Java性能分析工具,查看堆栈情况,观察每一步骤的执行时间,精准定位问题发生位置,常用的工具包括JProfiler,jstack,JConsole,以及Java诊断工具Arthas,故障注入工具Chaosblade等。
(3)高可用,系统的可用性(availability)指系统在面对各种异常时可以正确提供服务的能力。系统的可用性可以用系统停止服务的时间与正常服务的时间的比例来衡量,也可以用某功能的失败次数与成功次数的比例来衡量。互联网系统在宏观上用年可容忍停机时间衡量系统的可用性,见表1-1。
表1-1 应用系统可用水平与停机时间对应关系
在系统测试过程中通过可靠性测试和稳定性测试保障系统的高可用。
可靠性指标:在双机热备、集群、备份和恢复等场景中,模拟主备切换、节点变更、备份与恢复的过程。
稳定性指标:系统按照最大容量的80%或在标准压力(系统的预期日常压力)情况下运行,能够稳定运行的最短时间。
(4)易扩展,系统的扩展性(scalability)指分布式系统通过扩展集群机器规模提高系统性能(吞吐、延迟、并发)、存储容量、计算能力的特性。互联网架构在设计时应支持无限扩展,在实施时可以按单日处理情况的三倍部署,遇重大营销推广活动时需要提前规划准备。
扩展能力的计算公式为:(增加性能/原始性能)/(增加资源/原始资源)×100%。扩展能力的度量应通过多轮测试获得扩展指标的变化趋势。理想的扩展能力是资源增加几倍,性能就提升几倍。例如按业务系统水平复制或按服务垂直扩展的能力都应该接近100%,但其扩展能力受限于数据库连接数等资源会有最大限值。
(5)高安全,系统上线前要使用代码检查工具和漏洞扫描工具对系统进行安全检查。业务场景较重要的,按照行业主管要求,达到三级等保标准,并按等保要求定期开展安全等级评测。