开发和运维高并发系统的工程师可能都有过类似经验,明明系统已经调优完毕,该异步的异步,该减少互斥的地方引入无锁,该减少IO的地方更换引擎或者硬件,该调节内核的调节相应参数,然而,如果在系统中引入实时监控,总会有少量响应的延迟高于均值,我们把这些响应称为尾延迟(Tail Latency)。对于大规模分布式系统来说,尾延迟的影响尤其严重,例如大规模搜索引擎,单个请求可能就会发送到上万台服务器,系统不得不等待尾延迟响应返回之后才能返回给用户。

尾延迟可能是程序设计本身导致的毛病,但是,即便程序设计完全无误,尾延迟依然可能存在。华盛顿大学的Jialin Li等人经过研究发现,硬件,操作系统本身,都可能导致尾延迟响应,例如:主机系统其他进程的影响,应用程序里线程调度,CPU功耗设计等等。

在本公众号之前提到的数据中心操作系统设计中,我们提到了Distributed OS设计的核心挑战——如何让延迟敏感性任务和批处理型任务混跑,这个核心挑战,就在于如何对付尾延迟。我们在当时提到了Google最新的成果Heracles,在国内还没有造出Borg类似机制的框架时,Heracles已经可以让Google数据中心的资源利用率达到90%以上。那么我们也就顺道来介绍一下Heracles以及它是如何对付尾延迟的。

Heracles把数据中心运行的任务分为两类:BE(Best Effort Batch)和LC(Latency Critical),LC型任务运行依赖严格的SLO(Service Level Objectives,包含CPU缓存,主存,IO,以及网络等主机物理资源)。混排时,由于物理资源的SLO冲突导致LC任务会有更多的尾延迟发生。Heracles的目标在于提供对这些共享资源更好的隔离机制,尽可能避免SLO冲突。下边分别谈谈这些引起SLO冲突的共享资源:

CPU方面:
操作系统的资源调度,不能简单地给LC任务分配更高的优先权来达到目标,通常的Linux内核调度算法CFQ(公平调度器)在LC和BE混跑时,会轻易导致大量SLO冲突。实时调度算法如SCHED_FIFO则会导致很低的资源利用率。CPU设计中的超线程机制,也会给问题带来更多的复杂性,例如:一个超线程在执行BE任务时,会从CPU指令带宽,共享L1/L2缓存,TLB等方面影响另一个超线程执行的LC任务。

内存方面:
大多数LC型任务都会依赖巨大的内存,例如搜索,内存KV等等,因此,这些任务的延迟对于内存的带宽非常敏感。目前并不存在硬件机制来确保内存带宽隔离,而在多CPU机器上简单地采用NUMA机制又会导致不能充分使用内存,或者访问远端CPU Socket内存区域而带来更大的延迟。

网络方面:
大多数数据中心都会通过精细设计拓扑图来确保机器之间双向通信的带宽。在单机情况下,可以通过修正一些协议栈确保LC型的短消息能够比BE的大型消息有更高的优先权

功耗是另外一个不得不考虑的因素:
大多数CPU都有节能设计,系统会根据平均负载来动态调整CPU的主频,因此混跑时的负载取决于LC和BE的平均负载,当CPU主频降低时,LC型任务的延迟也会受到影响。

Heracles在设计上引入多种隔离机制,在确保SLO时尽可能提升资源使用负载:

CPU方面:Heracles会借助cpuset和cgroups尽可能让LC和BE型任务不在同一个Core上运行。此外,Heracles采用了目前Intel CPU上的CAT(Cache Allocation Technology)技术,这是个硬件机制。CAT可以在共享的L1/L2缓存上定义分区,确保缓存不会相互污染。

内存方面:由于目前并不存在硬件的隔离机制,因此Heracles实现了一个软件层面的监控机制,定期检查内存带宽使用情况,并估计LC和BE的带宽使用,如果LC没有获得足够的带宽,Heracles会减少BE使用的CPU Core数目。

网络方面:Heracles使用了Linux流量控制机制——qdisc调度器,确保BE任务的吞吐量和配额,并频繁更新调度策略。

功耗方面:Heracles基于现有硬件支持的特性实现了主频监控。

通过这些工作,Heracles让Google数据中心的集群资源使用率达到了惊人的90%。在思路上,Heracles的实现并不复杂,但它是跟Borg一体化的系统,我们不能说实现了这些资源隔离手段就能解决了尾延迟,因为单机的资源管理与隔离跟数据中心操作系统是一体化的。

实时上,除了依赖于复杂的Heracles和Borg机制,Google之前也曾经公开了另一种简单有效的策略对付尾延迟:在12年左右我们曾经看到过Google基础架构之神Jeff Dean的一篇Slide,里边提到了Google分布式系统响应的概率延迟分布。在该Slide发布的时候,并没有引起本人的关注,因为当时并没有猜透这些概率分布的背后代表了什么意义。结合尾延迟,我们终于可以更好的了解这些意图:尾延迟的发生可以看作是随机行为,引入多副本,任何一个请求,都会多次发送到多副本之上,系统会选择延迟最短的响应返回,就可以大大降低尾延迟对于最终响应的影响,十分简单有效的思路。至于发送多少次,就是这些概率延迟分布数字本身的意义了。

可能这个思路对于大多数基础架构开发者来说,是更加简单有效的策略,与其试图从操作系统内核和Distributed OS来解决这个挑战,不如放到应用层,多副本多次发送单个请求。在复杂与简单上,Google都是我们重点学习的对象。

</article>

[转帖]高并发系统中的尾延迟Tail Latency的更多相关文章

  1. 如何在高并发分布式系统中生成全局唯一Id

    月整理出来,有兴趣的园友可以关注下我的博客. 分享原由,最近公司用到,并且在找最合适的方案,希望大家多参与讨论和提出新方案.我和我的小伙伴们也讨论了这个主题,我受益匪浅啊…… 博文示例: 1.     ...

  2. 如何在高并发分布式系统中生成全局唯一Id(转)

    http://www.cnblogs.com/heyuquan/p/global-guid-identity-maxId.html 又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文, ...

  3. 高并发应用中客户端等待、响应时间的推算,及RT/QPS概念辨析

    高并发应用中客户端等待.响应时间的推算,及RT/QPS概念辨析 对于一个网站,已知服务端的服务线程数和处理单个请求所需的时间时,该如何算出高并发时用户从点击链接到收到响应的时间?注意这个时间并不等于服 ...

  4. (转)如何在高并发分布式系统中生成全局唯一Id

    又一个多月没冒泡了,其实最近学了些东西,但是没有安排时间整理成博文,后续再奉上.最近还写了一个发邮件的组件以及性能测试请看 <NET开发邮件发送功能的全面教程(含邮件组件源码)> ,还弄了 ...

  5. 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)

    课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...

  6. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  7. 程序员修神之路--用NOSql给高并发系统加速(送书)

    随着互联网大潮的到来,越来越多网站,应用系统需要海量数据的支撑,高并发.低延迟.高可用.高扩展等要求在传统的关系型数据库中已经得不到满足,或者说关系型数据库应对这些需求已经显得力不从心了.关系型数据库 ...

  8. 3年Java开发6个点搞定高并发系统面试疑惑

    前言 其实所谓的高并发,如果你要理解这个问题呢,其实就得从高并发的根源出发,为啥会有高并发?为啥高并发就很牛逼? 说的浅显一点,很简单,就是因为刚开始系统都是连接数据库的,但是要知道数据库支撑到每秒并 ...

  9. 2020重新出发,NOSQL,redis高并发系统的分析和设计

    高并发系统的分析和设计 任何系统都不是独立于业务进行开发的,真正的系统是为了实现业务而开发的,所以开发高并发网站抢购时,都应该先分析业务需求和实际的场景,在完善这些需求之后才能进入系统开发阶段. 没有 ...

  10. Java面试之高并发系统

    在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.

随机推荐

  1. 华为云IoT设备接入服务全体验

    摘要:华为云IoT设备接入服务,海量设备,一键接入,你值得拥有! 本文分享自华为云社区<[云驻共创]Huawei Mate 40产线直击之 华为云IoT设备接入服务全体验>,原文作者:启明 ...

  2. OpenMetric与时序数据库模型之主流TSDB分析

    摘要:为大家带来当下时序数据模型的主流TSDB分析及云厂商在时序数据模型方面的最新动态. 本文分享自华为云社区<[万字干货]OpenMetric与时序数据库存储模型分析(下)>,作者:敏捷 ...

  3. 云图说|Git云上仓库哪家好?一张图了解华为云代码托管服务

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 云办公时代已然到 ...

  4. nodejs升级到最新LTS版本方法汇总:linux/mac/window—npm/yum/ssh

    nodejs不同版本的差异还是蛮多的,比如obj?.a 在nodejs12是不支持的,必须得升级到14才可以.但是centos yum 默认安装的,或者系统集成的nodejs版本都是很老的.项目上传到 ...

  5. 火山引擎 DataLeap:如何构建一套完整、易用的数据标准体系

    数据标准是数据治理体系中的核心要素之一.   一方面,统一的数据标准可以在复杂的业务场景下,帮助团队对齐数据口径,提升数据在分析.诊断等场景的质量与效率:另一方面,数仓团队与分析师团队也需要沉淀一套敏 ...

  6. OpenvSwitch系列之九 Group表

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  7. lab3 page tables

    1.Speed up system calls (easy) 要求:有些操作系统(例如 Linux)通过在用户空间和内核之间的只读区域共享数据来加速某些系统调用.这样可以消除在执行这些系统调用时进行内 ...

  8. Mysql--日期,时间相关

    一.日期,时间戳格式转换 在数据库中,时间的存储格式一般为时间戳,但这样对于使用人员不太方便,故在查询时可以先转换格式 1.1.FROM_UNIXTIME() 将时间戳转换为日期格式 > sel ...

  9. POJ 1011 Sticks​ (DFS + 剪枝)

    题目地址:http://poj.org/problem?id=1011 题目大意 给出n个小木棒,组合成若干长度最短棍子 解题思路 首先将木棒从大到小排序 dfs(k, l), k是还剩多少木棒没用, ...

  10. AcWing 第 2 场周赛

    比赛链接:Here AcWing 3626. 三元一次方程 暴力即可 void solve() { int n; cin >> n; for (int i = 0; i <= n / ...