对于Azure中的每一台虚机,它所能支持的TCP最大并发连接数是50万(参考微软官网: http://azure.microsoft.com/en-us/documentation/articles/azure-subscription-service-limits/#networkinglimits)。在绝大部分情况下,应用程序不会触及这一限制,从而感觉不到这个限制的存在。但是,在一些极端情况,例如我们设计这样一个测试案例:在Azure中创建一台虚机,并安装Nginx服务器。使用多台Load Runner客户端,持续向Azure中的这台服务器发送HTTP请求。当Load Runner的客户端机器个数足够多,并且网络环境良好,这样的测试有可能会达到50万并发连接数的限制。

为什么会有这个限制?有如下原因:

1. Azure作为公有云平台,是一个共享的平台。我们不希望个别用户或者虚机,占用了绝大部分的平台资源。这样,对平台上的其他用户是不公平的。

2. 根据我们的调研,绝大部分应用程序在这个限制下完全可以正常工作。

如果应用程序需要比50万更多的并发连接怎么办?解决方案如下:

1. 横向扩展应用服务器。例如一台服务器支持50万,那么两台就是100万。这个数字跟随机器数的增加而线性增长。

2. 调整建立TCP连接的方法。例如建立长连接或连接池。

下面,我们详细讲解一个测试案例,供读者参考。

测试案例分享:

硬件环境:

在同一个公有云平台的区域中,使用1台2核虚拟机作为服务器, 4台4核的虚拟机作为客户端分别对服务器进行压力测试。

软件环境:

在服务器上,运行Ubuntu 操作系统。此外安装Nginx 1.4.6作为Web Server。统一部署一个4个字节的index.html文件,用作测试网页的下载。

在客户端上,运行Windows操作系统, 安装HP Load Runner 11,针对服务器的地址进行压力测试。每台客户端上,Load Runner 模拟200个用户同时向服务器发送5分钟请求,获取所有的事务tps信息,包括成功,失败和中止。

在Load Runner下,编写如下脚本进行测试。其中[URL]的部分根据不同的环境进行修改。

Action()
{
web_url(“webserver",
"URL=[URL]",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST); return 0;
}
例如:

网络环境:

笔者通过两种方式进行了这项测试,得到同样的测试结果。第一种方式,我们将Load Runner安装在Azure平台的虚机中。第二种方式,通过本地数据中心的Load Runner向Azure中的虚机发起请求。网络拓扑结构如下。请注意,这里画出的四台客户机只是示意,在实际的测试中,我们使用了2台、4台、6台和8台的多种场景。

测试结果:

在测试初期,我们将Load Runner跑在Azure中,得到了如下的TPS图形。

从上面的途中我们在一台Load Runner中看到,当每秒处理的事务数达到430的时候(这时我们共有6台机器,服务器端的TPS在430x6=2500TPS左右),服务器突然不接受任何新的请求,TPS骤然间变成了0。经过排查,我们发现该测试触及了另一个限制 - 每个云服务开放的TCP源端口不得超过64000。

要绕开这一限制,有两个方法:

1. 将Load Runner放到不同的云服务中。

2. 为每台测试机指定Public IP。http://msdn.microsoft.com/en-us/library/azure/dn690118.aspx

为虚机指定了Public IP后,或者使用本地机房的物理机所谓客户端,我们即得到了下面的测试结果:

上面的测试持续1小时9分钟,我们并没有发现TPS骤降的现象。这一现象说明,在我们的测试中,服务器的50万并发连接限制没有影响客户端的结果,从而也不会影响客户体验。

结论:

在实际的应用程序设计中,我们可以根据具体的应用程序场景,运用本文谈到的测试方法,来得到系统的指标 - 一台服务器可支持的并发事务处理数(TPS)。通常,服务器处理的瓶颈并不在于TCP并发连接数,而是系统的处理能力,例如数据库查询等。接下来,我们需要检验自己的应用程序是否可以横向扩展,通过增加多台服务器,比较测试结果,我们就可以了解横向扩展的性能变化。根据这两个指标(单台机器处理能力,横向扩展性能指标),我们就可以预估系统的规模。

本文转载自:http://blogs.msdn.com/b/cciccat/archive/2014/08/18/azure-load-runner-tcp.aspx 



在Azure中使用Load Runner测试TCP最大并发连接数的更多相关文章

  1. 测试TCP/IP配置

    安装网络硬件和网络协议之后,我们一般要进行TCP/IP协议的测试工作,那么怎样测试才算是比较全面的测试呢?我们认为,全面的测试应包括局域网和互联网两个方面,因此应从局域网和互联网两个方面测试,以下是我 ...

  2. 在Azure中的Ubuntu中安装Open edX

    最近,由于工作原因,在Azure上的Ubuntu虚拟机中安装了Open edX 实例,安装过程遇到了不少问题, 在从网上找答案的过程中,学习到了不同的知识. 注:若Ubuntu虚拟机Setup在Glo ...

  3. tsung压力测试——tcp测试tsung.xml配置模版说明

    <?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/share/tsung/tsung-1 ...

  4. 如何使用 Packer 在 Azure 中创建 Windows 虚拟机映像

    Azure 中的每个虚拟机 (VM) 都是基于定义 Windows 分发和操作系统版本的映像创建的. 映像可以包括预安装的应用程序和配置. Azure 应用商店为最常见的操作系统和应用程序环境提供了许 ...

  5. 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器

    若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...

  6. 详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题

    本文提供详细的故障排除步骤,用于为基于 Windows 的 Azure 虚拟机诊断和修复复杂的远程桌面错误. Important 若要消除更常见的远程桌面错误,请务必先阅读远程桌面的基本故障排除文章, ...

  7. 对连接到 Azure 中 Linux VM 时出现的问题进行详细的 SSH 故障排除的步骤

    有许多可能的原因会导致 SSH 客户端无法访问 VM 上的 SSH 服务. 如果已经执行了较常规的 SSH 故障排除步骤,则需要进一步排查连接问题. 本文指导用户完成详细的故障排除步骤,以确定 SSH ...

  8. 在实战中使用nginx-rtmp遇到的TCP连接问题分析

    在实战中使用nginx-rtmp遇到的TCP连接问题分析 背景 前段时间公司做了一次体育赛事的现场直播,网络由某通信公司负责搭建,主要测试5G CPE上行网络的带宽和稳定性,为了做到万无一失,他们同时 ...

  9. 【原创】时隔十年,再度审视Performance Testing,性能测试,Load Runner,和企业级性能测试解决方案

    软件测试入行是2006年,最先学习的测试工具囊括了QTP,Test Director,Load Runner,Rational Robot,Rational Performance: 那时的操作系统是 ...

随机推荐

  1. Web开发必备资源汇总[转]

    导读:原文来自< Best “must know” open sources to build the new Web>,译文由酷壳网陈皓整理编译< 开源中最好的Web开发的资源 & ...

  2. IOC主要接口

  3. Object-C Dealloc

    上一篇为Object-C Init dealloc方法在一个对象从内存中删除时被调用.通常在这个方法里面释放所有对象里的实例变量 -(void)dealloc { [super dealloc]; [ ...

  4. iOS 指纹解锁

    目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的c ...

  5. Xcode中需要熟悉的常用快捷键

    因为工作需要,笔者最近开始接触Xcode这款Mac系统下的强大的编程软件.因为个人习惯,每当接触新的软件的时候总会先去了解它的一些常用快捷键.经过多方查阅总结出以下内容,希望对刚刚接触Xcode的初学 ...

  6. 05_天气查询_JAX-WS方式_客户端

    [客户端特点] 支持面向对象开发. 客户端功能调用webService,首先得知道WebService的地址. 一般情况下,只要知道了wsdl的地址,就可以知道WebService的地址. 我们上一篇 ...

  7. LINUX开机启动过程

    LINUX开机启动过程 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息 ...

  8. 菜鸟的MySQL学习笔记(三)

    4-1插入记录INSERT INSERT [INTO] tbl_name [(col_name)] {VALUES|VALUE} ({expr|DEFAULT},...), (...), ...   ...

  9. 【原创】解决国内Android SDK无法更新问题更新

    使用代理,推荐使用shadowsock 在SDK Manage的tools-options填好代理 服务器地址127.0.0.1 端口1080

  10. top工具

    top 显示进程所占系统资源 能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. top命令打印出了很多信息,包括系统负载(loadaverage).进程数(Tasks).c ...