2014-07-09 41 views
1

我正在创建一个应用程序来优化使用Azure SDK的blob上传。在Windows Azure中,CloudBlockBlob.PutBlock方法是使用TCP还是UDP作为传输协议?

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

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

编辑1: 感谢纪尧姆 虽然我不确定你的意思是什么,即使我做添加一个代理工作者的角色,是不是最终使用REST API的HTTP/TCP协议做工作。在那种情况下,我的协议不会是另一种降低成本的开销吗?

回答

4

Windows Azure存储Blob通过REST API(http或https)进行管理,所以它是TCP。您对Azure Blob存储协议没有任何控制权,您只能选择http或https。

如果要使用自己的协议上传到Azure,则必须添加一个“代理”辅助角色(或另一个VM实例,请参阅David的评论),该角色公开端点的协议,然后将数据上传到blob使用常规REST blob端点。由于您的工作人员和存储帐户在同一个数据中心内,因此不应成为瓶颈。


要回答你的问题的第二部分,是的是有更多的开销,但它可能不会减慢速度。 假设Blob协议开销为10%,并且您自己的协议有5%的开销。假设客户端和Azure之间的连接速度为128kbps和1Gbps Azure内部(完全随机数字仅用于演示潜在结果)。

  • 客户端以斑点==> 10Mb的用10%的开销,在128kbps的=>零点11分27秒
  • 客户端代理=> 10Mb的用5%的开销在128kbps的==>零点10分56秒
  • 代理成团块==>的10Mb与1Gbps的== 10%的开销> 00:00:00 (真快!)

客户端代理+代理成团块= 10分钟56sec,这是速度更快;)

现在自己做download time calculations w测得的带宽和开销(你也应该考虑延迟,......)。

+0

好的答案,但*工作者角色*是特定类型的虚拟机实例,与问题无关。代理代码可以存在于很多地方(移动服务,虚拟机,网络角色,工作者角色,网站......)。 –

0

对于HTTP/1.1的RFC 2616,写道HTTP可以在任何可靠协议的基础上实现。但UDP不可靠,因此我不期望合理实现HTTP over UDP。

HTTP通信通常发生在TCP/IP连接上。 默认端口是TCP 80 [19],但可以使用其他端口。 并不排除在Internet上或其他网络上的任何其他协议 之上实施HTTP。 HTTP仅假设可靠的 传输;任何提供这种保证的协议都可以使用;

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

相关问题