张恒配 阿里云智能GTS-SRE团队技术服务经理

近7年IT从业经验,多年公有云运维管理经验,擅长云计算、MySQL、应用优化、自动化等,现就职于阿里云智能GTS-SRE团队,任北区技术服务经理。

1.背景

客户的业务是核心API 业务,对整体RT时间/慢速比非常看重,属于客户的核心KPI,目前主要通过单线带宽(联通/移动/电信)基于IDC服务,服务全国用户。从客户通过手机打点测试所得应用侧数据中,发现阿里单线EIP和线下IDC的总体RT(客户端响应时间)存在较大质量差距。其中电信差距50ms左右,联通差距100ms左右。

2.排查思路和步骤

遇到问题可用排除法来排查问题所在,逐级、逐点排除问题,思路明确,最终定位到根本原因所在。排查步骤:公网-内网-负载-机器-双方网络架构特点和差异。

  • 2.1线下IDC与北京单线EIP互联网质量测量对比

    经多轮排查,通过手工对比多点探测的结果,发现线下IDC与北京单线EIP PING时延数据没有明显差异,基本一致;另据向运营商确认,电信线下IDC和阿里单线EIP在同一个机房,且无特殊优化配置;联通线下IDC不在同一个机房,但同样无优化配置。

    结论:物理网络单线EIP和线下IDC的公网质量无差异,排除公网问题。

  • 2.2排除内部网络问题

    和客户沟通,落地负载(Nginx)日志,通过分析客户高峰期日志数据,负载(Nginx)到后端服务器的upstream_response_time(指从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间)来对比,后端耗时阿里平均90ms,线下IDC平均95ms,相差5ms,阿里略优于线下IDC。

    结论:后端upstream_response_time对比,阿里略优于线下IDC,排除内部网络问题。

  • 2.3摘掉SLB,用EIP直挂ECS,排除SLB问题

    待客户摘掉SLB,用EIP直挂ECS后通过客户提供的RT数据来看与之前无明显变化。

    结论:摘掉SLB后,RT数据无明显变化,排除SLB问题。

  • 2.4 ECS系统、内核优化

    工程师对ECS升级内核、调整网卡队列、内核参数调整优化后,客户侧监控看RT有较大改观,阿里和线下IDC差距明显缩小。

    结论:升级内核、调整网卡队列、内核参数优化后,阿里和线下IDC差距明显缩小。

    表

    *配置网卡多队列参考:https://help.aliyun.com/document_detail/52559.html

  • 2.5网络架构对比

    客户线下IDC:公网出入口及四层服务器均在同一IDC内,不会出现网络绕行。

    阿里云:华北2公网出口在可用区A,但实际中间网络设备、带宽包、EIP、ECS服务器可能分布在不同机房,存在网络链路绕行。初始测试整体RT时间相差50~100ms;对比IDC单次round trip时间相差 3.7ms,总体10~20rtt , 符合总体50~100ms延迟差距。

    综上原因,迁移带宽包、EIP、ECS等资源到华北2可用区A,优化网络链路,减少网络链路绕行;迁移到可用区A以后,经过测试,仍发现整体RT有37ms(平均数值)的延迟差距,经过和AIS确认,阿里网络架构由于高可用设计,路由仍会绕行B区,会有一半可能增加1.7ms的延迟,符合总体37ms延迟差距。优化前后链路如下图:

    图1:优化前和优化后的网络链路对比图

    优化前:内网一次rtt时延1/2链路额外增加1.1+1.3+1.3=3.7ms,平均一次http请求大概10-20个rtt。

    优化后:内网一次rtt时延1/2链路额外增加1.1+0.6=1.7ms,平均一次http请求大概10-20个rtt。

    结论:发现了根本问题并得到验证,由于阿里网络架构是高可用设计,会有1/2可能增加延迟。

3.最终结果

客户的业务是核心API 业务,对整体RT时间/慢速比非常看重,属于客户的核心KPI。目前通过主要通过单线带宽(联通/移动/电信)基于IDC服务,服务全国用户。经过不断优化,我们已经从100ms 延迟优化到37ms延迟,但客户的诉求是延迟至少和线下IDC对齐。

4.总结

阿里云是服务于所有客户,网络架构高可用设计,对于服务调度能力弱的中小客户来说是毋庸置疑的,中小客户对这种相差几十ms的延时差异是可接受的;但是对于服务调度能力强,可自己保障网络、服务高可用并且对用户的极致体验需求高的大客户来说,几十ms的延时差异是客户不可接受的。现在科技发展迅速,通信技术5G技术商业化,用户对于产品的体验感要求可想而知,故针对此种极致体验需求的大客户,可为大客户单独提供此种单线网络低冗余甚至于无冗余的极致性能产品,基于客户,服务于客户。网络架构可设计成主备链路,正常情况下网络链路全部走A,B做为备线切换,无多余绕行,不会额外增加时延。如下图所示。

图2:主备链路示意图