我正在创建一个应用程序来使用Azure SDK优化blob上传。
我想知道PutBlock方法是否使用TCP或UDP作为其底层传输协议?
无论它使用哪个,我可以编写一个自定义函数,它使用我自己的协议进行blob上传操作吗?因为这是我计划做的,以优化我的用例。
编辑1:谢谢盖伊表示,虽然我不确定这是什么意思,但即使我添加了代理工作者角色,它最终不会使用REST API的HTTP/TCP协议来完成这项工作吗?在这种情况下,我的协议不是又增加了一个开销,降低了运行速度吗?
Windows Azure存储blob通过REST API (http或https)进行管理,因此是TCP。你对Azure Blob存储协议没有任何控制,你只能在http或https之间选择。
如果你想用你自己的协议上传到Azure,你必须添加一个"代理"工作者角色(或另一个VM实例,参见David的评论),它使用你的协议公开一个端点,然后使用常规REST blob端点将数据上传到blob。由于您的工作帐户和存储帐户位于同一个数据中心,因此这不应该成为瓶颈。
回答你问题的第二部分,是的,有更多的开销,但它可能不会减慢东西。假设Blob协议开销是10%而你自己的协议开销是5%。让我们假设客户端和Azure之间的连接是128kbps和1Gbps在Azure内部(完全随机数字只是为了演示潜在的结果)。
- 客户端到Blob ==> 10Mb, 10%开销,128kbps => 00:11:27
- 客户端到代理=> 10Mb, 5%开销,128kbps => 00:10:56
- 代理到Blob ==> 10Mb, 1Gbps时开销为10% ==> 00:00:00(非常快!)
客户端到代理+代理到Blob = 10min 56秒,这样更快;)
现在使用测量的带宽和开销(您还应该考虑延迟,…)进行您自己的下载时间计算。
在HTTP/1.1的RFC 2616中写到,HTTP可以在任何可靠的协议之上实现。但是UDP不可靠,因此我不期望在UDP上合理实现HTTP。
HTTP通信通常通过TCP/IP连接进行。的默认端口为TCP 80[19],也可以使用其他端口。这并不排除在任何其他协议之上实现HTTP在互联网上,或在其他网络上。HTTP只假定是可靠的运输;任何提供这种保证的协议都可以使用;
可以通过并行和异步方式优化blob上传。你可以从这里开始你的研究。