RDMA在典型场景下的技术应用解析与探索
就应用场景而言,需要适应于 RDMA 的传输,大致可分为如下几种类型。 场景一:机器学习、分布式存储等场景,使用社区成熟的方案,如在机器学习场景中使用的NCCL、Tensorflow等框架中都适配了多种传输方式(包含tcp、rdma等),块存储Ceph中也同时支持tcp及rdma两种通信模式,这种业务场景下业务侧更多关注的是配置及使用,在IAAS基础设施层将RDMA环境准备好后,使能框架使用rdma的传输模式即可。 场景二:业务程序使用类似于RPC远程调用的通信方式,业务侧需要将原有使用的RPC(大部分是GRPC)调用改为ORPC调用,在这种场景下业务和传输更像是两个独立的模块,通过SDK的方式进行调用,所以适配起来改造的代码并不多,通常是业务层面修改调用RPC的接口方式。但由于业务方可能使用多种编程语言,RPC over RDMA需要进行编程语言进行适配。 场景三:业务程序通信是私有化通信,比如使用socket套接字结合epoll完全自有实现的一套通信机制。这种场景下其实改造也区分情况,即业务IO与网络IO是否耦合,若比较解耦,代码中抽象出一层类似于最新Redis代码中ConnectionType这样的架构[2],那么只需要实现一套基于RDMA通信且符合Redis ConnectionType接口定义的新传输类型即可,改造量相对可控并且架构上也比较稳定;而若业务IO与网络IO结合的较为紧密的情况下,这种场景下往往改造起来会比较复杂,改造的时候需要抽丝剥茧地找出业务与网络之间的边界,再需要进行基于网络技术部分的自动化改造。 Redis中实现了一套Reactor模式的事件处理逻辑名为AE,其主要流程为: 1、使用epoll等机制监听各文件句柄,包括新建连接、以及已建立的连接等; 2、根据事件的不同调用对应的事件回调处理; 3、循环进行epoll loop并进行处理。 当然,这个过程也是一个非常复杂的过程,需要大量的数据处理和分析才能实现。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |