在Windows Azure中,CloudBlockBlob.PutBlock方法是否使用TCP或UDP作为传输协议?

时间:2014-07-09 07:50:13

标签: azure azure-storage azure-storage-blobs

我正在创建一个使用Azure SDK优化blob上传的应用程序。

我想知道PutBlock方法是否使用TCP或UDP作为其底层传输协议?

无论使用哪种方式,我都可以编写一个使用我自己的协议进行blob上传操作的自定义函数吗?因为这是我计划优化我的用例。

编辑1: 谢谢纪尧姆, 虽然我不确定你的意思,即使我确实添加了代理工作者角色,但它最终不会使用REST API的HTTP / TCP协议来完成这项工作。在那种情况下,我的协议不会只是另一个减慢东西的开销吗?

2 个答案:

答案 0 :(得分:4)

Windows Azure存储Blob通过REST API(http或https)进行管理,以便它的TCP 。您无法控制Azure Blob存储协议,只能在http或https之间进行选择。

如果您想使用自己的协议上传到Azure,则必须添加一个代理服务器'工作者角色(或其他VM实例,请参阅David的评论),使用您的协议公开端点,然后使用常规REST blob端点将数据上载到blob。由于您的员工和存储帐户位于不应成为瓶颈的同一数据中心。


要回答问题的第二部分,是的,有更多的开销,但它可能不会减慢速度。 我们假设Blob协议开销为10%,您自己的协议有5%的开销。让我们说客户端和Azure之间的连接是128kbps和1Gbps Inside Azure(完全随机数只是为了证明潜在的结果)。

  • Blob的客户==>在128kbps下具有10%开销的10Mb =>时间00:11:27
  • 客户端代理=>在128kbps时具有5%开销的10Mb ==> 0时十分56秒
  • 代理到Blob ==> 10Gb,10G开销,1Gbps ==> 00:00:00 (真快!)

客户端到代理+代理到Blob = 10分56秒,这更快;)

现在用测量的带宽和开销来做你自己的download time calculations(你还应该考虑延迟,......)。

答案 1 :(得分:0)

在HTTP {1.1的RFC 2616中写道,HTTP可以在任何可靠的协议之上实现。但UDP不可靠,因此我不期望通过UDP合理实施HTTP。

  

HTTP通信通常通过TCP / IP连接进行。该      默认端口是TCP 80 [19],但可以使用其他端口。这样做      不排除在任何其他协议之上实现HTTP      在互联网上或其他网络上。 HTTP只假设可靠      运输;可以使用任何提供此类保证的协议;

您可以通过使blob上传并行和异步来优化它。您可以开始研究here