vlambda博客
学习文章列表

软件性能测试(连载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所示。

       

软件性能测试(连载20)

                                3-40  最原始的互联网络结构

软件性能测试(连载20)

3-41  Web服务器和数据库服务器分离

       第三代互联网架构引入本地缓存和分布式缓存的模块,性能得到了提升,如图3-42所示。

       第四代互联网架构引入了Nginx反向代理实现负载均衡,如图3-43所示。

 

软件性能测试(连载20)

        3-42  本地缓存和分布式缓存

软件性能测试(连载20)

3-43  Nginx反向代理实现负载均衡

第五代互联网架构将数据库读写进行了分离,如图3-44所示。

第六代互联网架构数据库按业务分库,在这里分离了课件业务、购买业务以及其他业务,如图3-45所示。

软件性能测试(连载20)

  3-44  数据库读写分离 

软件性能测试(连载20)

3-45  数据库按业务分库

第七代互联网架构把数据库中的大表拆分成小表,如图3-46所示。

第八代互联网架构使用LVSF5来使多个Nginx负载均衡,如图3-47所示。

软件性能测试(连载20)

3-46  把大表拆分成小表

软件性能测试(连载20)

 3-47  使用LVSF5来使多个Nginx负载均衡

第九代互联网架构通过DNS轮询实现机房间的负载均衡,如图3-48所示。

第十代互联网架构引入NoSQL数据库和搜索引擎等技术,如图3-49所示。

软件性能测试(连载20)

3-48  通过DNS轮询实现机房间的负载均衡

软件性能测试(连载20)

3-49 引入NoSQL数据库和搜索引擎等技术

第十一代互联网架构把大应用拆分为小应用,如图3-50所示。

第十二代互联网架构复用的功能抽离成微服务,如图3-51所示。

软件性能测试(连载20)

  3-50  把大应用拆分为小应用

软件性能测试(连载20)

3-51  Nginx反向代理实现负载均衡

第十三代互联网架构把应用建立到云上。

互联网架构的改进使得产品的性能越来越好,但是千万不能认为只要加机器就可以解决性能问题的观念,有些问题,比如内存溢出,不是简单地通过加机器就可以解决的。

2. 虚拟节点

       接下来看一下虚拟节点。分布式结构是由多台机器集成的,但是每台机器的性能往往是不相同的,如果不引入虚拟节点,每个机器承载的负载是相同的,如图3-52所示,任务通过m=rand(232)%4+1分配到1号机、2号机、3号机和4号机这四个节点上。这里1号机与2号机硬件性能比较好,3号机其次,4号机最差。所以可以这样建立虚拟节点,如图3-53所示。

软件性能测试(连载20)

3-52  不带虚拟节点的分布式结构图

软件性能测试(连载20)

3-53  带虚拟节点的分布式结构

1号机、2号机性能好,分配3个虚拟节点;3号机其次,分配2个虚拟节点;4号机最差,分配1个虚拟节点。这样分配公式变为m=rand(232)%9+1。性能好的机器分配到的任务概率比性能差的机器要高。

在看一种情况,随着业务需求的增长,要向虚拟节点中插入一台5号机器,如图3-54所示。

软件性能测试(连载20)

3-54 在分布式结构中加入节点

软件性能测试(连载20)

3-55 带虚拟节点的分布式结构

软件性能测试(连载20)

3-56 在带虚拟节点的分布式结构中加入节点

       由于存在“会话黏连效应”,以前分配给1号机、2号机、3号机、4号机上的任务不会由于加入新的物理机器而进行重新分配,比如,添加新节点前服务A1以前在1号机上运行,添加后服务A1仍旧会滞留在1号机上上。据说前几年京东发生的“缓存雪崩”事故就是这样造成的,加入了新的物理节点,但是没有引入虚拟节点,结果新节点没有被有效地利用,缓存溢出,从而造成事故。如果采取虚拟节点,当5号机器加入之前,服务在每个虚拟节点上分配如图3-55所示。当5号机器加入后,虚拟节点号是可以进行的重新分配的,而服务又仅仅与虚拟节点号绑定,所以加入新机器后,服务发生了重组,新加入的节点起到了分担服务的作用,如图3-56所示。。

3. MapReduce

       MapReduce是一种大数据技术,其实分为MapReduce两个方法,它也是通过分布式提高性能的一种手段。假设现在有一套《大英百科全书》,要统计每个单词出现的次数,如果这个工作让单机来完场,显然是十分困难的。如果采用分布式架构,把《大英百科全书》的第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,收看。有不同观念欢迎与顾翔老师交流!