这不是一篇介绍infiniband是什么的文章,而仅仅站在Oracle RAC和Exadata的角度上阐述infiniband。 如果您不知道infiniband是什么,请点击这里。
很多人可能不知道,绝大多数高性能计算机内部或者集群之间都是使用infiniband互联的。在国家超算中心,在亚马逊的云计算中心都有它的身影。为什么infiniband会如此受欢迎呢?原因无非有两个: 一是目前infiniband本身能提供比传统以太网更高的带宽, 二是通常infiniband的开销比以太网要小,对于节点间通信大量数据传输比以太网效率要更高。当然Oracle也是这一技术的主导者, 其中RDS本身就是Oracle的一个开源项目。常见的运行在infiniband之上协议有哪些呢?下面就简单介绍一下Oracle DB可能会用到的几个:
IPoIB协议:
Internet Protocol over InfiniBand 简称IPoIB 。传统的TCP/IP栈的影响实在太大了,几乎所有的网络应用都是基于此开发的,IPoIB实际是infiniband为了兼容以太网不得不做的一种折中,毕竟谁也不愿意使用不兼容大规模已有设备的产品。IPoIB基于TCP/IP协议,对于用户应用程序是透明的,并且可以提供更大的带宽, 也就是原先使用TCP/IP协议栈的应用不需要任何修改就能使用IPoIB。例如如果使用infiniband做RAC的私网,默认使用的就是IPoIB。下图左侧是传统以太网tcp/ip协议栈的拓扑结构,右侧是infiniband使用IPoIB协议的拓扑结构。
RDS协议:
Reliable Datagram Sockets (RDS)实际是由Oracle公司研发的运行在infiniband之上,直接基于IPC的协议。之所以出现这么一种协议,根本的原因在于传统的 TCP/IP栈本身过于低效,对于高速互联开销太大,导致传输的效率太低。RDS相比IPoIB, CPU的消耗量减少了50%, 相比传统的UDP协议,网络延迟减少了一半。下图左侧是使用IPoIB协议的infiniband设备的拓扑图,右侧是使用RDS协议的 infiniband设备的拓扑结构。默认情况下,RDS协议不会被使用,需要进行额外的relink。另外即使relink RDS库以后,RAC节点间的CSS通信也是无法使用RDS协议的,节点间心跳维持以及监控总是使用IPoIB。下图左侧infiniband使用IPoIB协议的拓扑结构,右侧是infiband使用RDS协议的拓扑结构。
SDP协议:
知道并且使用过RDS协议的人不少,但是可能不少人都没有听过sdp协议 。这个协议实际早在10g时代就存在过,只是没有专门的文档。这个白皮书算是比较少见的。其中只是简要的提到了sdp,所著笔墨不多,也没有提到如何实 现,可能在这个版本属于试验性的功能。文中提到依靠一个Oracle Application Server端的驱动,SDP协议可以与TCP/IP协议栈进行透明的转换。Database端如何配置SDP连接可以点击这里: 11.1 11.2, Exalogic端如何配置SDP的链接可以在这里找到。甚至还有如何在java程序中使用SDP协议的案例介绍。在实际应用中,多个Exadata机柜 的相连可以通过配置SDP协议连接,Exalogic和Exadata的连接也是通过SDP‘协议的。但是需要注意的是Oracle的Net Service目前是无法走RDS协议的。下图左侧是传统以太网tcp/ip协议栈的拓扑结构,右侧是infiniband使用SDP协议的拓扑结构。
还有可能会听过的协议有ZDP和IDB协议,这两个是新名词,如果有一点了解就知道是久瓶装新酒。iDB协议用于Exadata 数据库节点(DB node)和存储节点(cell node)之间的通信。i代表 intelligence, 言下之一就是智能数据库协议,您可不要小看它,整个Exadata的精髓offloading全靠它来完成,之所以其它第三方Oracle数据库一体机只 有Exadata的形而没有Exadata的神,原因就在此。简单的说它是由Oracle数据库内核来实现的,可以智能的将表扫描的工作放到存储一端去完 成,然后由存储进行过滤,最后只返回查询需要的数据。举个简单的例子: 比如某个表有1亿行,但是满足过滤条件的就只有1万行,数据库节点会发出一个指令告诉存储节点,“我需要查询某某表过滤条件是什么,你去处理一下,把结果 告诉我就成,我还有别的事情要忙”。这个指令就是iDB。iDB的实现是Oracle公司的最高机密,除了Exadata的核心研发团队和技术高管没有人 知道内部是如何实现的,只知道iDB协议是运行在ZDP协议(Zero-loss Zero-copy Datagram Protocol)之上,基于基于RDS协议的V3版本(OFED version 1.3.1))的标准进行研发的。Oracle的官方数据显示使用ZDP协议进行数据传输能达到每秒3GB/s,而仅仅消耗主机CPU资源的2%。
以上仅仅讲到Oracle相关的一些infiniband协议,最后上传一张图片讲囊括infiniband的Stack作为补充。