范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

从通用的协议栈层面来优化Redis性能的实践

  Redis 作为最受欢迎的 NoSQL 数据库之一,具备高性能、高可用性、高扩展性等特点,在各互联网业务中使用广泛。目前业界针对 Redis 的性能优化主要针是配置项优化以及使用方式的优化。  本文介绍尝试撇开 Redis 本身,而从通用的协议栈层面来做优化,这种优化方式理论上可推广到其他 Socket 类互联网应用,如 Memcached、Ngnix、Envoy 等。  分 析
  Redis-server 作为一个标准的 Socket 类应用,会通过监听地址端口接收来自客户端的连接,连接建立后会读取连接上的客户端请求,处理后再返回响应给客户端,这其中的连接建立、请求读取、响应返回都是通过内核的 TCP/IP 协议栈来处理的。可以通过火焰图先看一下 Redis-server 在性能压测下的 CPU 消耗情况。
  图中,是在客户端读请求压测的时候抓取的火焰图信息。可见,内核态协议栈所占用的 CPU 消耗较大,其中以 sys_write 为主,占比 40% 左右。所以,如果能对这部分 CPU 占用进行优化,收益还是非常可观的。
  那么这部分 CPU 占比如何进行优化呢?最好还能做到 Redis 应用本身完全无感知。
  协议栈的处理完全省掉是不现实的,这样底层 TCP 通信就玩不转了。但是我们可以考虑将这部分处理剥离出去,不占用 Redis 的 CPU。
  那剥离出去的协议栈实现放在哪儿呢?
  可以放到一个单独的进程中实现。那这样是不是和剥离前没有区别?
  No!因为一台机器上一般会启动多个 Redis 实例,多个 Redis 实例在这种情况下就可以共享这个协议栈实现的进程。相当于将 Redis 和协议栈的 1:1 绑定部署关系,变为 N:1 的独立部署关系。
  那这个协议栈实现进程的性能就非常重要了,绝对不能成为瓶颈,否则会导致最终的性能没有提升,甚至更糟。具体如何实现呢?
  下面该轮到用户态协议栈出场了!  优 化用户态协议栈介绍
  顾名思义,用户态协议栈是将原本在内核态实现的 TCP/IP 协议栈移到用户态实现的技术。放到用户态实现可以带来几大好处:
  1. 高性能
  Redis 本身是一个用户态的应用程序,调用内核态的 TCP/IP 协议栈实现,不可避免地会带来用户态和内核态的上下文切换开销。另外,最重要的一点,内核协议栈和应用绑定在一起,无法做到和应用在资源占用上剥离,也就是前面所述的独立部署。
  2. 易调测
  做过内核态开发的同学应该都知道,内核下程序的调测还是比较痛苦的,动不动给你来个 Oops 就会导致内核挂死。放到用户态实现调测起来就会方便很多。
  3. 易定制
  内核协议栈随着版本的迭代,历史包袱越来越重,导致越来越臃肿。而且新特性的合入时依赖会越来越多,也会越来越谨慎,甚至 bug 的修复周期也越来越长。用户态协议栈则不会有此类问题,可以在内核协议栈的基础上做裁剪和定制,易调测也会让试错成本大大降低。
  相关视频推荐
  徒手实现网络协议栈,请准备好环境,一起来写代码
  linux下的epoll实战揭秘——支撑亿级IO的底层基石
  学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
  需要C/C++ Linux服务器架构师学习资料加qun 812855908 获取(资料包括 C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享
  用户态协议栈具体实现
  用户态协议栈我们采用开源 VPP+VCL 的方案:VPP 作为独立进程在用户态实现 TCP/IP 协议栈,VCL 作为动态库实现 Socket 类接口劫持并和后端 VPP 完成交互。整个系统的架构如下图所示:
  其中:  VCL - 实现 Socket 类接口劫持并和后端 VPP 完成交互  FIFO - 是基于共享内存封装的消息队列,用于 VCL 和 VPP 之间通信  Session - 维持传输层和上层应用会话之间的对应  TCP/IP - 对应内核的 TCP/IP 协议栈实现  DPDK - 实现将网卡的报文收发卸载到用户态
  可见,VPP+VCL 分离式的部署模式将协议栈从应用端剥离,并通过 LD_PRELOAD 方式加载 VCL 动态库实现对于 Redis 的无侵入加速。
  最后,VPP 如何做到本身处理的高效而不会成为瓶颈呢?
  VPP 主要基于 DPDK 实现报文的高效收发,再结合自身的向量化处理(减少 CPU Cache missing)来实现报文的高效处理。另外,graph node+ 插件化也让其非常易于扩展和定制。
  rdbsave 动态进程问题
  使用开源 VPP 加速 Redis 过程中,也遇到和解决了不少社区版本中的问题,比较典型的就是 rdbsave 动态进程引发的问题。
  Redis 可以配置周期性的保存快照,实现上会启用一个动态的 rdbsave 进程来完成,rdbsave 进程非常驻进程,在完成工作后就会退出。配置文件中可以指定保存的周期以及触发保存的变化量,如果周期配置的比较短且触发保存的变化量比较小,则可能会导致 rdbsave 进程频繁的创建和退出,实测过程中这也会导致目前社区中对于动态进程支持的一些问题很快速的就能暴露出来。
  Session 同步问题
  rdbsave 进程创建时会从主线程同步 socket 相关的 session 资源。目前社区中 epoll fd 相关的 session 资源没有同步完全,主要是因为 session handle 中包含了各个进程的 worker_index 信息,而 worker_index 是因进程 / 线程而异的,直接从主线程同步过来的 session handle 需要根据 worker_index 做转换才能使用。相关的 patch 目前已经合入社区。
  死锁问题
  rdbsave 进程退出时需要释放和进程关联的 session 资源,目前是通过主线程捕获 SIGCHLD 信号,在信号处理函数中来释放相关 session 资源。如果主线程在先获取锁 A 的情况下跳转到信号处理函数释放资源,而释放资源的时候也获取了锁 A,则会导致死锁。当然我们可以针对锁 A 的情况想办法解决此问题,但是这种解决方式不彻底,因为主线程可能获取了锁 B 后再去执行信号处理函数释放资源,然后释放资源的时候也获取了锁 B。根源是在于执行信号处理函数之前的主线程状态未知。
  所以,我们可以考虑在信号处理函数中不释放资源,而仅仅将待释放的资源索引进行保存,等到后面合适的时机,如执行 epoll_wait 的时候再进行释放。相关的 patch 目前也已经合入社区。  效 果
  通过优化后的火焰图看效果:
  可见,内核的 socket 读写已经大大降低,还遗留的是用户态协议栈实现中用来在 VCL 和 VPP 之间通知事件的 eventfd 通知。
  基于 redis 4.0.9 以及 memtier_benchmark 1.2.17 测试的结果。
  QPS 提升 31%,此时内核态 Redis CPU 占用 99%,用户态 Redis CPU 占用 80% 左右。
  延迟降低 23.2%,同样此时内核态 Redis CPU 占用 99%,用户态 Redis CPU 占用 80% 左右。  总 结
  用户态协议栈可以轻松做到针对 Redis 的无侵入加速,在占用 CPU 资源更少的情况下,相较内核态协议栈可以取得 31% 的 QPS 加速效果,同时延迟降低 23%。
  用户态协议栈作为通用的加速组件,理论上可以支持所有 Socket 类应用的加速。目前基于用户态协议栈对网易数帆轻舟微服务 API 网关中 Envoy 的加速已经产品化并在网易严选环境中落地,针对 Sidecar 的加速也相继在内外部客户完成测试,针对 Redis 的加速也完成了 PoC 测试。整个加速组件的数据面基于 Kubernetes 的 DaemonSet 部署,而管控面基于 Kubernetes 的 Operator 部署,部署简单、运维方便。我们也会在后续工作中,持续探索基于用户态协议栈的更多应用场景。

正式完成易主切尔西告别阿布结束铁血蓝军时代,伯利能否扛起旗帜切尔西在进入阿布时代,他们从弱小蜕变成为如今的顶级豪门,俱乐部5次拿到英超冠军,2次夺得欧冠冠军,其他杯赛冠军更是数不胜数。阿布让切尔西成为了一个时代的标签,铁血蓝军深入球迷心中,徐根宝的七代弟子,亚洲足球先生领衔,五虎将占据国足半壁江山说到中国足球的青训教练,有一个人可谓是家喻户晓,年轻时他曾入选国家队并担任队长,此后一直从事足球教练事业,曾担任国家二队主教练,国奥队和国家队主教练,职业化初期担任上海申花队主教练去一次新疆,比环游欧洲15国都值,你心动了吗?中国那么大,总要看看新疆的壮丽风景吧。在新疆,都市的现代与自然的荒蛮,让它始终保持着一种独特的魅力。从南到北,新疆广博的土地,高山草原沙漠。看喀纳斯不远千里来到新疆,最重要的目的就69月来新疆不走北疆大环线等于白来俗话说北疆看风景,南疆看风情,如果你是69月来新疆,墙裂推荐北疆大环线,每一帧都是桌面壁纸当你夏季踏上新疆这片土地里,会让你觉得连呼吸的风都是自由的划重点5月8月伊犁花海喀纳斯避暑贝尔发长文告别皇马,9年16冠结束白衣生涯,258次出场进106球北京时间6月1日下午,皇马巨星贝尔发表告别信,宣布离开银河战舰。贝尔于2013年9月从热刺加盟皇家马德里,转会费1。008亿欧元。2020年9月他被租借回归热刺,本赛季又结束租借期新疆楼兰古城,曾经门票3500元,也许普通人以后再也见不到它了这个曾经中国最贵的景区便是位于新疆巴音郭楞蒙古族自治州若羌县北境的楼兰古城,过去一张门票3500元,据说全世界只有不到5万人曾经见过它。最近惊闻一则消息在旅游圈传播,楼兰古城即将永2022年5月15日南非滑翔伞飞行员从珠峰飞下15号晚上,一位德国伞友给我发来一条喜马拉雅时报的新闻,当天一位南非滑翔伞飞行员从珠峰飞下。我说我知道这位飞行员,这是他七大洲最高峰飞行计划中的一站。他问确定?不是尼泊尔七大高峰吗去北京一定要逛人文古迹!这十四个地方,你都去对了吗?(一)八达岭长城推荐理由居庸关的前哨,在明长城中保存最好,也最具代表性。北京市延庆区G6京藏高速58号出口八达岭长城是中国古代伟大的防御工程万里长城的重要组成部分,是明长城的一个隘多喝水养肾还是伤肾?医生若不想伤肾,避免这3种喝水方式蛋白质维生素是人们常挂在嘴边的营养素,可鲜为人知的是,水在人体六大必需营养素中高居首位,因此,健康饮水是每个人每天,甚至一生中最重要的事。水是生命之源,人体的70都是由水组成,覆盖孩子要长个,常吃八种长高菜,补钙增加营养,身体强壮(下)孩子在关键时期饮食非常重要,尤其是四到六岁的小孩子,非常挑食,而且不爱吃蔬菜。其实孩子不爱蔬菜可能是我们的做法不符合孩子的胃口,只要掌握孩子的喜好,将这些钙含量比较高的蔬菜做成孩子国医大师朱南孙,101岁高龄仍在坐诊,养生秘诀两不沾两坚持在上海中医药大学附属岳阳中西医结合医院的特诊部,有一位德高望重的老中医。她就是现年101岁的第三届国医大师朱南孙先生。虽然朱南孙老人已经年过百岁,到了期颐之年,但是在她身上却没有半
感恩节感恩今生相遇的每个人董卿在朗读者中有这样一段话世间一切,都是遇见。冷遇见暖,就有了雨冬遇见春,有了岁月天遇见地,有了永恒人遇见人,有了生命。我们在人间寻寻觅觅,总会在不经意间,遇见形形色色的人和事。人励志语录一路上不管逆风顺风的时候全凭自己掌握励志语录Nov25(1)人生就像自行车,方向掌握在自己手里,用力蹬才能前进没用力还在前进,那说明骑的是下坡路。一路上不管逆风顺风的时候,全凭自己掌握!(2)真正想要的东西不只是踮踮很火的正能量语录,非常走心,写给自己1少年时追求激情,成熟后却迷恋平静,在我们寻找,伤害,背离之后,还能一如既往的相信爱情,这是一种勇气。每个人都有属于自己的一片森林,迷失的人迷失了,相逢的人会再相逢。2在这世上,无一个人最好的活法是,丰富的安静图片来自网络年轻时以为人生最好的活法是融入他人,能够在人群里寻找到快乐。成年后看过了繁华似锦,经历了世事沧桑,才慢慢懂得一个人最好的状态是高级的安静。正如作家周国平说人生最好的境界太阳真的是信号放大器?人类的星际探测,没有太阳恐怕不行随着人类探测火星的脚步不断发展,人类将来肯定要到更遥远的星球考察,在考察的过程中,探测器需要把它得到的图像和其他数据一起传回地球,这件事情远没有想象中的那么简单。火星远在上亿公里之为什么不建议买激光电视?因为它是智商税产品,谁买谁吃亏随着激光技术的逐渐成熟,电器行业突然出现了一种名为激光电视的商品,与普通电视相比,价格高了一倍不止,虽然宣传噱头很足,但实际上它是智商税产品,本期文章结合激光电视的结构应用的技术价华为Mate50王者归来,5G回归共3种方案,花粉终于等到了还记得前几个月,在华为P50系列新品发布会上,余承东沮丧地说道没有办法,现在华为5G处理器只能当4G用,华为新机基本都不支持5G功能,这也让华为手机业务一度陷入停摆,不少业内人士甚有5G版本!华为Mate50Pro新增12512G版本,可惜售价太高据了解,前段时间美国已经对华为开放了一些产业链限制,也就是说接下来华为在制造手机上将会更顺利,并且有消息称华为已经在试图用强大的5G通讯技术来实现新机支持5G网络。具体来说,明年的毛晓彤化身美好生活达人,点赞精工国货万家乐燃气热水器近日,万家乐燃气热水器新晋代言人毛晓彤上线发布开箱Vlog,化身行走的种草机,向大家分享爱用的家电好物。让人印象非常深刻的是,毛晓彤提到,拍戏期间忙起来休息时间非常少,这款热水器可宇树科技四足机器人将在5年内普及,我们不是中国版波士顿动力快公司宇树科技UnitreeGo1(图片来源受访者提供)2021年即将结束,但全球芯片短缺问题尚未解决,其连锁反应可能会持续到2022年。11月23日晚,小米集团表示,预计行业芯片短缺现北京冬奥会主场华丽亮相,昔日巨无霸炼钢炉变身时尚打卡潮流地北京事儿北京冬奥会沿着长安街一路向西,在北京的最西端,沉寂己久的山水之间,一场翻天覆地的变化悄然发生。过去这里原本是一片煤矿和炼钢厂,如今却高楼林立,路桥飞架,青山绿水环绕,一派火