前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件性能测试(连载20)

软件性能测试(连载20)

作者头像
顾翔
发布2020-03-26 12:44:04
6420
发布2020-03-26 12:44:04
举报

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方法。这样就大大提高了单机作业的速度。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 互联网架构演化
  • 2. 虚拟节点
  • 3. MapReduce
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档