Sea*_*ett 6 storage azure outbound asp.net-web-api azure-web-sites
我正在建立一个网站(除其他外)允许用户通过网络API上传照片.用户图像将存储在azure存储blob中以显示在用户相册中,并与社交媒体共享.该网站将作为一个天蓝色的网站托管.我渴望尽量减少数据传输成本.据我所知,天蓝色网站和桌面/ blob存储之间的数据传输不会导致数据传输费用(因为它不被视为"出站"),而且从天蓝网站外部请求的数据也是如此.为此,我有两种将图像暴露给浏览器的策略:
1.)通过azure存储中的图像blob的URI,例如使用本地存储帐户http://ipv4.fiddler:10000/devstoreaccount1/bcb2ad7581.jpg
2.)通过web api从存储中下载图像字节并返回它们.例如,使用本地主机http:// localhost:58559/api/image/bcb2ad7581.jpg
这些是我的假设.直接到存储访问(上面的方法1)更有效.通过web api访问图像(上面的方法2)必然会产生直接访问不会产生的开销,对吧?每个web api请求必须使用asp .net线程和cpu周期.对于处理的每个web api映像请求,对于站点上不能且必须排队的其他web api资源的请求少一个.另一方面,与图像共享的任何外部站点将为每个图像请求添加数据传输成本(以及其他成本); 如果通过方法1访问.
所以我的策略是通过直接链接访问存储中的图像(方法1),例如当用户打开相册时,所有标签在其src属性中都有azure blob uri.但是,当用户点击Facebook图标进行分享时,我将通过web api提供图像链接(方法2).我意识到用户可以使用像"PinIt"按钮等插件来绕过所有这些,但这没关系.
我只是在学习这些东西,所以我可能会离开.我是否错误地将出境转移费用应用于天蓝网站?我不认为我是,但至少可以说整个定价模式令人困惑.
从带有标记和src属性的浏览器html页面访问blob存储,考虑出站数据传输; 即使html页面来自azure网站域名?我的意思是它只在服务器端代码访问存储而不是html客户端时才是免费的吗?
是否通过方法2(如果确实存在)节省了任何数据传输成本,只需通过与web api方法相关的不同成本(如带宽成本)取消?
我是否错误地认为直接访问blob存储的性能优势,或者可能错误的是关于web api请求的开销?
这是设计的早期阶段,所以如果必须,我可以转储Azure.我宁愿不要,因为我认为这是我正在寻找的.我不想要任何东西,我很乐意支付我消费的服务.当然,我不想让我的无知付出代价.
我可以就此提出你的意见,并真正感谢你的帮助.
Gau*_*tri 12
回答你的问题:
我是否错误地将出境转移费用应用于天蓝网站?
遗憾的是,是的:)任何来自Azure数据中心(DC)的数据都会产生出站传输成本,其中包括通过您的网站提供的数据.
从带有标记和src属性的浏览器html页面访问blob存储,考虑出站数据传输; 即使html页面来自azure网站域名?我的意思是它只在服务器端代码访问存储而不是html客户端时才是免费的吗?
是.请记住,浏览器正在使用位于Azure DC之外的数据.
是否通过方法2(如果确实存在)节省了任何数据传输成本,只需通过与web api方法相关的不同成本(如带宽成本)取消?
不会.因为数据最终流出Azure DC(无论是直接通过存储还是通过web api都无关紧要).
我是否错误地认为直接访问blob存储的性能优势,或者可能错误的是关于web api请求的开销?
通过提供直接访问blob存储而不是通过web api传输数据,您肯定会获得更多性能优势.另外,您还会增加延迟.
解决方案建议
对于您的应用程序,我是否可以建议您查看Shared Access SignatureAzure Blob Storage提供的功能.我相信这将显着提高您的应用程序的性能.
对于上传,您可以创建SAS URL上传权限,并让您的Web应用程序直接上传blob存储中的文件.这样,上传数据就不会通过您的服务器进行路由.我写了一些你可能觉得有用的博客文章:
http://gauravmantri.com/2013/12/01/windows-azure-storage-and-cors-lets-have-some-fun/
要下载图像,请再次让Web API返回SAS URL,而不是从blob存储中读取图像数据,然后将该数据流回客户端浏览器.
| 归档时间: |
|
| 查看次数: |
2388 次 |
| 最近记录: |