首页 > 社交 > 科普中国

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

常驻编辑 科普中国 2022-06-02 死锁   协议   报文   主线   内核   层面   函数   进程   性能   动态   用户   资源
IxC拜客生活常识网

3. 易定制IxC拜客生活常识网

内核协议栈随着版本的迭代,历史包袱越来越重,导致越来越臃肿。而且新特性的合入时依赖会越来越多,也会越来越谨慎,甚至 bug 的修复周期也越来越长。用户态协议栈则不会有此类问题,可以在内核协议栈的基础上做裁剪和定制,易调测也会让试错成本大大降低。IxC拜客生活常识网

相关视频推荐IxC拜客生活常识网

徒手实现网络协议栈,请准备好环境,一起来写代码IxC拜客生活常识网

linux下的epoll实战揭秘——支撑亿级IO的底层基石IxC拜客生活常识网

学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂IxC拜客生活常识网

需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享IxC拜客生活常识网

IxC拜客生活常识网

用户态协议栈具体实现

用户态协议栈我们采用开源 VPP+VCL 的方案:VPP 作为独立进程在用户态实现 TCP/IP 协议栈,VCL 作为动态库实现 Socket 类接口劫持并和后端 VPP 完成交互。整个系统的架构如下图所示:IxC拜客生活常识网

IxC拜客生活常识网

其中:IxC拜客生活常识网

  • VCL - 实现 Socket 类接口劫持并和后端 VPP 完成交互
  • FIFO - 是基于共享内存封装的消息队列,用于 VCL 和 VPP 之间通信
  • Session - 维持传输层和上层应用会话之间的对应
  • TCP/IP - 对应内核的 TCP/IP 协议栈实现
  • DPDK - 实现将网卡的报文收发卸载到用户态

可见,VPP+VCL 分离式的部署模式将协议栈从应用端剥离,并通过 LD_PRELOAD 方式加载 VCL 动态库实现对于 Redis 的无侵入加速。IxC拜客生活常识网

最后,VPP 如何做到本身处理的高效而不会成为瓶颈呢?IxC拜客生活常识网

VPP 主要基于 DPDK 实现报文的高效收发,再结合自身的向量化处理(减少 CPU Cache missing)来实现报文的高效处理。另外,graph node+ 插件化也让其非常易于扩展和定制。IxC拜客生活常识网

IxC拜客生活常识网

rdbsave 动态进程问题

使用开源 VPP 加速 Redis 过程中,也遇到和解决了不少社区版本中的问题,比较典型的就是 rdbsave 动态进程引发的问题。IxC拜客生活常识网

相关阅读:

  • 越南要涨工资了,却暴露一个大问题
  • 死锁检测实现
  • Java中各种锁的介绍
  • 服贸协议为什么被反对(台湾艺人反服贸)
  • rip是什么意思(rip协议)
  • 什么是网络协议(简述什么是计算机网络)
  • 协议离婚需要什么手续(协议离婚的程序)
  • 单位通知员工签订辞退协议员工必须在什么时候签字?
  • 全国碳市场今日收跌1.36%,报58.00元/吨
  • 霍福德触发健康与安全协议,斯马特足中部扭伤,都将缺席
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。