写点什么

WDT:多 TCP 链路的数据传输开源库

  • 2015-07-27
  • 本文字数:998 字

    阅读完需:约 3 分钟

作为国际著名的社交网站, Facebook 与开源项目一直关系密切。目前,其设立的开源项目个数已经超过200 个。这些开源项目在为广大开发人员提供便利的同时,也为Facebook 带来了各方面丰厚的回报。近日,Facebook 又公布了一个开源项目——超高速数据传输工具(Warp speed Data Transfer,WDT)。接下来,本文就对WDT 项目进行简要介绍。

从2004 年上线开始,Facebook 迅速发展。时至今日,Facebook 每月的活跃用户量超过20 亿。在西方的万圣节,Facebook 每天所接收到的照片数量更是多达20 几亿张。为了满足用户的巨大需求,该公司先后在美国俄勒冈州和北卡罗来纳州等多个地方建立了数据中心。那么,如何在数据中心内部的主机之间以及数据中心之间进行高效的数据传输就成了迫切需要解决的问题。为此,Facebook 设立了WDT 项目。

WDT 可以被视为一个嵌入式的库或者命令行工具,其目的是在尽量减少资源(CPU/ 内存等)消耗的情况下,利用多个 TCP 路径提高两个系统之间传送文件的效率。为了提高代码的可移植性,Facebook 尽量减少了 WDT 的依赖关系。由此,代码的编译时间也大量减少,并使得项目轻量化。此外,WDT 没有采用异常,以保证传输效率和代码的易于集成。

在传输机制方面,WDT 采用了阻塞式线程 IO,保证在任何点都会有线程在读和写。这样,数据就可以被缓冲在双向传输道路上,使得最小内核 / 用户空间切换的情况下,每个子系统仍然处于忙碌状态。正是这样的双向传输机制进一步保证了系统吞吐率的最大化。

目前,WDT 代码已经托管在 GitHub 中。其代码中包含了一个小的命令行工具 wcp.sh,用来测试传输性能。据透露,在Facebook 内部传输系统之间的RocksDB 快照时,WDT 通过长距离和高延迟的传输链路提供了高达600MB/s 的传输速率。相比于之前高度优化的基于HTTP 的传输方案,WDT 传输速率约是其3 倍左右,且系统资源消耗更少。在没有进行节流控制的情况下,WDT 可以轻易使得40Gb/s 的网卡饱和,并得到近乎理论的链路传输速度(大于4GB/s)。

未来,Facebook 会借助开源社区继续对WDT 项目进行改进。其关注点包括重新构建代码来使用无需复制的流/ 缓存流水线和处理乱序的报文等。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者)。

2015-07-27 08:4510086
用户头像

发布了 268 篇内容, 共 127.7 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

2023-04-21:用go语言重写ffmpeg的metadata.c示例。

福大大架构师每日一题

Go ffmpeg

Appuploader安装指南

MySQL 序列使用

Node 版本控制

程序员海军

Node 三周年连更

C语言检测输入的ip地址中含有几个.

linux大本营

C语言 字符串

报名开启,明天直播!龙蜥社区多位专家在线报告 | 2023 大学生操作系统大赛培训会

OpenAnolis小助手

活动 操作系统 计算机 大学生 龙蜥社区

linux环境下用c语言实现reactor网络模型的代码案例

linux大本营

Linux reactor 高并发 epoll

解析mmap系统调用的所有的标志位

linux大本营

Linux 内存管理 Mmap 系统调用 内存映射

QUIC技术分享

linux大本营

网络协议 udp QUIC

C语言检测输入的ip地址是否合法

linux大本营

C语言 IP地址

Android XML数据解析

芯动大师

android XML配置 三周年连更

怎么看电脑上是否有lindex命令可运行

linux大本营

bash Linux linux命令

挑战 30 天学完 Python:Day11 函数

MegaQi

Python 挑战30天学完Python 三周年连更

如何快速在手机中查看UDID,无需itunes、itools

仅需三步,快速打造指标数据应用

Kyligence

数据分析 指标平台

ORACLE EBS:多组织结构 理解与配置

back_wang

oracle oracle ebs oracle apex

lindex命令在shell脚本里的应用

linux大本营

Shell linux命令 脚本 shell脚本

网络视频监控如何入门?如何安装和配置、设备选择和实时监控?

wljslmz

三周年连更

C头文件是什么,使用mmap

linux大本营

C语言 Mmap

一文初探 Goroutine 与 channel

陈明勇

Go golang channel goroutine 三周年连更

一键搭建web版chatGPT,无需魔法,国内可用

石云升

AI AIGC ChatGPT 三周年连更

组播ip地址,广播ip地址,特殊ip地址

linux大本营

TCP IP地址

怎么查看自己的mac地址和ip

linux大本营

Mac 网络 Windows Server IP地址

IPv6过渡技术概述

穿过生命散发芬芳

ipv6 三周年连更

MySQL 教程

kafka常用命令

烟波

kafka MQ 中间件

大模型带来的Web复兴,会是昙花一现吗?

脑极体

AI 云厂商

创建型模式之单例模式和工厂模式

共饮一杯无

设计模式 创建型模型 三周年连更

MySQL WHERE 子句

重塑元宇宙体验!3DCAT元宇宙实时云渲染解决方案来了

3DCAT实时渲染

元宇宙 元宇宙解决方案

运行脚本报错lindex:未找到命令

linux大本营

bash Linux 脚本

WDT:多TCP链路的数据传输开源库_Meta_张天雷_InfoQ精选文章