每天上百万通话,携程电话系统性能测试实践

2020 年 8 月 23 日

每天上百万通话,携程电话系统性能测试实践

一、背景


作为全球领先的在线旅游企业,携程注重服务质量,并拥有全球最大的旅游呼叫中心,分别部署在国内自建系统、国内和国外第三方云服务平台上。呼叫中心每天承接着上百万通的通话,电话服务系统是整个呼叫中心中非常重要的一套系统,服务着数万客服座席,系统的稳定性至关重要。


二、性能测试开展


2.1 原因


旅游受季节和时间的影响比较大,五一和十一等长假期间旅游量会暴增,随着业务的暴增,电话咨询和反馈也会随着增加。对于研发人员来说,掌握负责系统的性能指标来迎接随之而来的业务高峰非常重要。因此研发团队会不定期的做系统的性能压测,来评估和衡量业务高峰期间带来的系统压力。


2.2 工具


目前 SIP 协议性能测试一般采用基于流程的测试方法,流程指一个成功的 SIP 会话所包含的 SIP 实体双方交换消息的类型和顺序。且测试应当根据被测设备特点,通过实现对特定呼叫流程场景的模拟来实现,因此测试工具应当支持符合呼叫流程要求的信令与媒体流发送与接收。


测试的开展首先是选取测试工具。SIPp 是一个测试 SIP 协议性能的工具软件,它包含了一些基本的 SipStone 用户代理工作流程(UAC 和 UAS),并可以使用 INVITE 和 BYE 建立和释放多个呼叫,当然 SiPp 还有许多其他的功能,比如通过读 XML 场景文件,模拟 SIP 信令来重现故障等等。SIPp 与我们常用 Http 协议的性能测试的工具有着一定的不同,当然熟练使用 Loadrunner 等工具对 SIPp 的使用也有一定帮助。


2.3 系统架构分析


对于性能测试的指标的选取,需要结合被测系统的架构(如图 2-1),从而设计出相应的压测场景和具体实现脚本。



2-1 电话系统结构流程图


2.4 测试脚本设计


用 SIPp 做测试的必要文件:


uac.xml:根据需要编写的 uac 侧的 sip 信令流程。


uas.xml:根据需要编写的 uas 侧的 sip 信令流程。


uac.xml 和 uas.xml 用来模拟 SIP 消息流程,


data.csv:用于 uac.xml 和 uas.xml 中需要引入的数据,例如分机号,被叫号码等等。


uac.bat:调用 sipp 命令,并传入相应参数的批处理文件,模拟 UAC(主叫)。


uas.bat:调用 sipp 命令,并传入相应参数的批处理文件,模拟 UAS(被叫),


2.5 目标


a. 验证和确保呼叫中心系统支持最大并发通路,使得用户能接入座席进行咨询和沟通或进行 IVR 流程操作,以及超出阈值后,会进行熔断,不再增加系统压力,确保当前服务运行正常。


b. 高并发的异地分配准确性。


2.6 场景设计


根据系统的场景,我们对系统的 2 个方向进行压测。


a. IVR 和 PBX 分配的限流保护措施。


  • PBX排队溢到IVR的场景。


携程呼叫中心分三地,各地区根据业务量不同分为一套或多套 PBX 服务,每套 PBX 针对技能组和整套服务都做了限流,所以此场景我们目的是为了验证当 PBX 技能组达到限流时候系统会将电话溢出到 IVR 流程的场景,来确保当前服务的正常和可用。


  • 正常IVR满后,分配到溢出IVR的场景


正常可服务 VR 服务同样是有系统限流措施的,所以这个场景,我们的目的是验证当达到正常的 IVR 限流数量之后,会溢出到溢出 IVR 流程,溢出 IVR 流程进行语音播报:“当前系统繁忙,请稍后再拨”。


  • 正常IVR和溢出IVR全部满之后,电话无法呼入到IVR的场景


当 PBX,正常 IVR 和溢出 IVR 都达到限流时,其余拨打进来的电话无法再拨通。目的是为了保证此时当前系统的稳定性


b. PBX 的异地分配准确性


多个地区的呼叫中心,每个地区都有服务同一个业务线的坐席,所以会涉及到多个地区的电话异地分配,根据 EWT(Excepted Wait Time)进行异地分配,在高并发场景验证系统的分配准确性。


压测服务器配置如下:


IVRSMPBX(ACD)
上海4台,南通4台1台上海1台,南通1台


2.7 执行压测


当压测方案和压测脚本都准备完成后,接打所使用的分机都需要先进行注册,如果需要使用的分机数量在比较大的情况下,建议另外先编写注册分机的脚本。压测运行结果如图 2-2。



2-2 运行结果


压测过程中需要注意的几个点:


(1)先开启被叫,再开启主叫;如果先开启主叫,被叫没开启会出现异常,影响压测数据的准确性。


(2)压测过程中观察对应的异常,来判定抛出的异常原因,排查对应的 error-log 来确认是否是所压测的系统问题或者是系统配置问题。


(3)需要抓取被压测服务器的内存和 CPU,在压测前通过服务器监控平台设置指标进行监控。


2.8 运行结果分析


针对上一小节的场景设计,运行结果如下:


  • PBX排队溢到IVR的场景


酒店 VDN 对应南通和上海两地有两个 VDN 有数据进线,目前单个 VDN 上最大排队数 N,各地在压测阶段达到单技能最大排队数 N。机票 VDN 对应南通和上海两地有两个 VDN 有数据进线,南通机票 VDN 最大排队数为 M,压测阶段也达到单技能最大排队数;上海机票 VDN 因为人数少,根据 EWT 计算,所以进线压测阶段进线量很少,不会达到限流值的数量,如图 2-3。故该场景符合预期。




2-3 排队情况


  • 正常IVR满后,分配到溢出IVR的场景


上海和南通正常 IVR 限流 W, 上海和南通各 2 台,正常 IVR 限流满 W*4,进入溢出 IVR,溢出 IVR 上海和南通各 2 台,每台限流 Q,溢出 IVR 也打满。服务器性能如图 2-4,故该场景符合预期。




2-4 正常 IVR 服务器


  • 正常IVR和溢出IVR全部满之后,电话无法呼入到IVR的场景


当溢出 IVR 到达限流,此时拨打电话无法接通,服务器性能如图 2-5。故该场景符合预期。




2-5 溢出 IVR 服务器


  • PBX的异地分配准确性


两个异地分配的技能组登录坐席情况如下:



执行压测过程中观察分配情况,抽查其中的分配日志,上图的技能组对应的 VDN 的 EWT 计算(input route vdn:252820; luodivdn:252701; EWT:8635; input route vdn: 252820; luodivdn:252705; EWT:222)以及数据库中查询该通话的最后分配坐席,&ewt=routevdn=252820&luodivdn=252705&weight=222,确认该通电话的分配正确性。


压测期间,ACD 分配机服务器性能如图 2-6。该场景符合预期。




2-6 分配机服务器


三、小结


当系统的流程和实现方式改变,在功能实现完成并且系统测试相对稳定后,进行性能测试是项目上线前的一颗定心丸,跟着系统的发布节奏进行不定期的压力测试显得非常重要。


整个压测过程看出,各个服务器的使用百分比都不高,由此可见,携程的电话系统所支持的并发能力还有很大的流量扩展空间。此次达到压测前设定的最大并发通话,为现有系统压力的多倍,用设置的限流值来测试系统的的保底机制和分配服务。随着携程业务的开创和发展,相信携程电话系统可以迎接携程高质量和全球化战略带来的更大流量的挑战。


作者介绍


Mario ,携程资深测试工程师,负责携程呼叫中心测试。


本文转载自公众号携程技术(ID:ctriptech)。


原文链接


每天上百万通话,携程电话系统性能测试实践


2020 年 8 月 23 日 14:02980

评论

发布
暂无评论
发现更多内容

架构师训练营第八周

我是谁

极客大学架构师训练营

记不住Spring中Scheduled中的Cron语法?让我们看看源码吧

AI乔治

Java spring 编程 架构

代码简易调试方法.md

HQ数字卡

Java LeetCode 调试

什么?美团T9首发内部JVM高级特性笔记,看完差距不止一点

小Q

Java 学习 程序员 架构 面试

Rethink:多版本文件的命名细节

Sicolas Flamel

团队 随笔杂谈

低代码开发平台核心功能设计——组件自定义交互实现

徐小夕

前端 编辑器 H5 大屏可视化 lowcode

5G为数字化转型插上翅膀

CECBC区块链专委会

5G网络安全

「Java并发编程」从源码分析几道必问线程池的面试题?

Java架构师迁哥

甲方日常 47

句子

工作 随笔杂谈 日常

当我们在讨论实时性的时候,我们在讨论什么?

VoltDB

数据分析 5G 工业互联网

这份笔记我必啃完!美团T9首发内部JVM高级特性笔记,差距不止一点点

Java架构追梦

Java 源码 架构 面试 JVM

文科妹子都会用 GitHub,你这个工科生还等什么

沉默王二

GitHub

深度解析ThreadLocal原理

AI乔治

Java 架构 线程 ThreadLocal

O'Reilly出版社又一经典之作——Python设计模式

计算机与AI

Python

2020双11:每秒58.3万笔!阿里云又扛住了!

阿里云情报局

云计算 互联网 运维 云原生 科技

如何应对大促流量洪峰?揭秘京东技术人的备战手册

京东智联云开发者

云计算 大数据 亿级流量

微信视频号强制置顶朋友圈:盈利不可牺牲用户体验

石头IT视角

Spring bean 加载顺序导致的 bug 问题

AI乔治

Java 架构 Spring Boot

祝贺 StreamNative 团队成员 Jennifer 当选 Apache Pulsar PMC 成员

Apache Pulsar

大数据 开源 Apache Pulsar

Dubbo-go Client端调用服务过程

apache/dubbo-go

dubbo dubbo-go dubbogo

甲方日常 48

句子

工作 随笔杂谈 日常

当人脸识别对准执法者,AI的应用边界博弈

脑极体

Reactor中的Thread和Scheduler

程序那些事

响应式编程 reactor 多线程 程序那些事 reactivex

如何预防工业物联网中的恶意攻击?

VoltDB

大数据 数据分析 5G 工业互联网

Pulsar Summit Asia 2020 | 主题演讲:大咖呈现,紧扣社区

Apache Pulsar

大数据 开源

数字人民币都来了 黄金还有什么用?

CECBC区块链专委会

数字货币

区块链产业,怎样“链”住未来?

CECBC区块链专委会

区块链

靠脑机接口“隔空探物”,大脑植入芯片可实现“心灵感应”

脑极体

架构师训练营第 1 期第 8 周学习总结

好吃不贵

极客大学架构师训练营

实时指挥调度的发展和优势

anyRTC开发者

ios android 音视频 WebRTC RTC

一个技术总监的忠告:精通那么多技术,你为何还是受不到重用?

四猿外

程序人生 技术管理 加薪 职场成长 源码阅读

每天上百万通话,携程电话系统性能测试实践-InfoQ