ceph存储原理_浅谈分布式存储中的网络通信

论坛 期权论坛     
选择匿名的用户   2021-6-1 16:19   1400   0
<div class="._5ce-wx-style" style="font-size:16px;">
<div class="rich_media_content" id="js_content">
  <p><img alt="0cbca4c9a9ca2ebfae9ceafb1430d915.gif" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-90c340ea61e855ee7d334e01c025cfcf.gif"></p>
  <img alt="056d5630266f4cdc6ca33df993f08a11.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-c651d945017b68eee2597c7c06a11909.png">
  作者 | 火尉子
  责编 | Carol
  封图 | CSDN 下载自视觉中国
  <p>在各行各业数字化转型深入的当下,数据呈爆炸式增长。面对海量数据的存储需求,分布式存储显然在架构上有着天然优势,但在这波数据洪流之中也面临着性能上的全新挑战。</p>
  <p>由于分布式存储的工作原理是将各个存储节点使用网络互联的方式构建为集群,向外部提供更加可靠的高性能服务,因此可以说分布式存储本质上是一种网络存储,其性能在很大程度上受网络的影响。</p>
  <p>在高性能的分布式存储中,使用传统的TCP网络进行各存储节点之间的网络互联很容易形成网络瓶颈,<strong>而在分布式存储最容易让用户诟病的IO延时方面,网络部分的开销是不可忽视的一部分。</strong></p>
  <p>随着网络带宽的高速增长,在软件上的消耗已成为网络性能的瓶颈,而通过绕过CPU实现高性能传输的RDMA网络成为分布式存储不错的选择。 </p>
  <p>RDMA(Remote Direct Memory Access),可以简单理解为网卡完全绕过CPU实现两个服务器之间的内存数据交换。其作为一种硬件实现的网络传输技术,可以大幅提升网络传输效率,帮助网络IO密集的业务(比如分布式存储、分布式数据库等)获得更低的时延以及更高的吞吐。</p>
  <p><strong>最初的RDMA是实现在IB(Infiniband)上,由于其新的硬件技术栈成本比较高,主要用于HPC(高性能计算)等少数场景。而新的技术发展下,能够实现在以太网上使用RDMA。 </strong></p>
  <p>当前RDMA在以太网上的传输协议是RoCEv2,RoCEv2是基于无连接协议的UDP协议,相比面向连接的TCP协议,UDP协议更加快速、占用CPU资源更少,但其不像TCP协议那样有滑动窗口、确认应答等机制来实现可靠传输,一旦出现丢包,依靠上层应用检查到了再做重传,会大大降低RDMA的传输效率。</p>
  <p>所以要想发挥出RDMA真正的性能,突破数据中心大规模分布式系统的网络性能瓶颈,势必要为RDMA搭建一套不丢包的无损网络环境,而实现不丢包的关键就是解决网络拥塞。<strong>在解决拥塞问题的关键在支持ECN等特性的交换机,而这个技术在一般的交换机都普遍支持。</strong></p>
  <p>既然RDMA是一个硬件技术方案,而且在分布式存储中又能快速地解决网络高延时等相关问题,是不是直接更换上这个新的硬件技术就能万事大吉?<strong>实际可能并没有那么简单,那么我们就来简单聊聊RDMA技术实践过程中踩过的坑。</strong></p>
  <p><img alt="6ac0fb99c611a500952aabfa416b013d.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-66bd55b199ef829be3fff44fb3ab7611.png"></p>
  <h3><span style="font-weight:bold;"><strong><span style="font-weight:bold;">RDMA想说爱你却不容易</span></strong></span></h3>
  <ul><li><h6><strong><span style="font-weight:bold;">RDMA的使用需要应用程序的代码配合(RDMA编程)。</span></strong></h6></li></ul>
  <p>RDMA操作的语义更加贴近硬件实现的语义形态,与传统TCP/IP的Socket编程有很大的差别,不能直接将现有程序简单地直接套用RDMA接口,而使用原生RDMA编程库比Socket编程要复杂很多。</p>
  <p>并且在编程方式上RDMA编程是异步的,而原始的Socket编程是同步的。这样将导致对大多数开发者来说,无论是改造原有应用程序适配RDMA,还是写一个全新的RDMA原生应用程序,都不容易。</p>
  <p>那么如果完成了RDMA对接,是否就能使我们的程序获得高性能呢?我们再看看在通信模块中对接完RDMA的对比性能测试。</p>
  <ul><li><p><strong>RDMA在RPC模块中使用</strong></p></li></ul>
  <p>分布式存储中通常使用RPC框架进行节点之间的通信,RPC性能对整体的存储性能有重要的影响。笔者团队实现了一个基于C&#43;&#43;的RPC框架,可以灵活支持多种数据传输协议并支持协程快速处理,适用于有高性能需求的场景。该RPC框架同时支持传统TCP和RDMA两种传输方式,RDMA方式下注册了统一管理的RDMA内存,并采用双边操作进行数据传输,支持事件和轮询的请求检测机制。笔者团队对两种传输方式的性能进行了对比测试,测试结果参见下图:</p>
  <img alt="3747cd768c0bbdcd02a3472902b9a9e2.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4e6e6822ba6895fd25358c7f62
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP