软件性能测试(连载20)
http://www.hbz100.com/pc/course/courseInfo.do?courseId=182320200226121405459。疫情期间,您在注意身体安全的同时,关注身体安全了吗?500元工作几天的薪酬,让你薪资翻几倍。
https://item.jd.com/34295655089.html
https://item.jd.com/12082665.html
店铺二维码:
3.6结构优化
随着云计算的大力发展。通过结构优化来提高软件性能,在软件研发中受到越来越大的重视。
1. 互联网架构演化
在谈论结构优化之前,先来看看互联网架构发展的历史。
最原始的互联网架构图如图3-40所示,这个时候后端仅仅存在Web服务器和数据库服务器,而且这两个服务器是处于同一条机器上的。
第二代互联网架构是Web服务器和数据库服务器处于一个单独的服务器中,如图3-41所示。
图3-40 最原始的互联网络结构
图3-41 Web服务器和数据库服务器分离
第三代互联网架构引入本地缓存和分布式缓存的模块,性能得到了提升,如图3-42所示。
第四代互联网架构引入了Nginx反向代理实现负载均衡,如图3-43所示。
图3-42 本地缓存和分布式缓存
图3-43 Nginx反向代理实现负载均衡
第五代互联网架构将数据库读写进行了分离,如图3-44所示。
第六代互联网架构数据库按业务分库,在这里分离了课件业务、购买业务以及其他业务,如图3-45所示。
图3-44 数据库读写分离
图3-45 数据库按业务分库
第七代互联网架构把数据库中的大表拆分成小表,如图3-46所示。
第八代互联网架构使用LVS或F5来使多个Nginx负载均衡,如图3-47所示。
图3-46 把大表拆分成小表
图3-47 使用LVS或F5来使多个Nginx负载均衡
第九代互联网架构通过DNS轮询实现机房间的负载均衡,如图3-48所示。
第十代互联网架构引入NoSQL数据库和搜索引擎等技术,如图3-49所示。
图3-48 通过DNS轮询实现机房间的负载均衡
图3-49 引入NoSQL数据库和搜索引擎等技术
第十一代互联网架构把大应用拆分为小应用,如图3-50所示。
第十二代互联网架构复用的功能抽离成微服务,如图3-51所示。
图3-50 把大应用拆分为小应用
图3-51 Nginx反向代理实现负载均衡
第十三代互联网架构把应用建立到云上。
互联网架构的改进使得产品的性能越来越好,但是千万不能认为只要加机器就可以解决性能问题的观念,有些问题,比如内存溢出,不是简单地通过加机器就可以解决的。
2. 虚拟节点
接下来看一下虚拟节点。分布式结构是由多台机器集成的,但是每台机器的性能往往是不相同的,如果不引入虚拟节点,每个机器承载的负载是相同的,如图3-52所示,任务通过m=rand(232)%4+1分配到1号机、2号机、3号机和4号机这四个节点上。这里1号机与2号机硬件性能比较好,3号机其次,4号机最差。所以可以这样建立虚拟节点,如图3-53所示。
图3-52 不带虚拟节点的分布式结构图
图3-53 带虚拟节点的分布式结构
1号机、2号机性能好,分配3个虚拟节点;3号机其次,分配2个虚拟节点;4号机最差,分配1个虚拟节点。这样分配公式变为m=rand(232)%9+1。性能好的机器分配到的任务概率比性能差的机器要高。
在看一种情况,随着业务需求的增长,要向虚拟节点中插入一台5号机器,如图3-54所示。
图3-54 在分布式结构中加入节点
图3-55 带虚拟节点的分布式结构
图3-56 在带虚拟节点的分布式结构中加入节点
由于存在“会话黏连效应”,以前分配给1号机、2号机、3号机、4号机上的任务不会由于加入新的物理机器而进行重新分配,比如,添加新节点前服务A1以前在1号机上运行,添加后服务A1仍旧会滞留在1号机上上。据说前几年京东发生的“缓存雪崩”事故就是这样造成的,加入了新的物理节点,但是没有引入虚拟节点,结果新节点没有被有效地利用,缓存溢出,从而造成事故。如果采取虚拟节点,当5号机器加入之前,服务在每个虚拟节点上分配如图3-55所示。当5号机器加入后,虚拟节点号是可以进行的重新分配的,而服务又仅仅与虚拟节点号绑定,所以加入新机器后,服务发生了重组,新加入的节点起到了分担服务的作用,如图3-56所示。。
3. MapReduce
MapReduce是一种大数据技术,其实分为Map和Reduce两个方法,它也是通过分布式提高性能的一种手段。假设现在有一套《大英百科全书》,要统计每个单词出现的次数,如果这个工作让单机来完场,显然是十分困难的。如果采用分布式架构,把《大英百科全书》的第1册第1章分配给1号机器处理、第1册第2章分配给2号机器处理、…、第2册第1章分配给m号机器处理…。所有的机器计算完毕汇总给另外一台机器进行总结,如图3-57所示。
图3-57 MapReduce
分发的过程使用了Map方法,汇总使用了Reduce方法。这样就大大提高了单机作业的速度。
顾翔老师与云测学院联合推出:软件测试分析与设计,请点击https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不同观念欢迎与顾翔老师交流!