我正在建立一个网站(除其他外)允许用户通过网络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。我宁愿不要,因为我认为这是我所期待的。我不想做任何事情,我很乐意为我消费的服务付费。但是,当然,我不想让我的无知付出代价。
我可以就此提出建议,并真诚地感谢您的帮助。
答案 0 :(得分:12)
回答你的问题:
对于未应用于azure的出站转移成本,我是错误的 网站?
可悲的是,是的:)任何来自Azure数据中心(DC)的数据都会产生出站转移成本,并且包含通过您的网站提供的数据。
从带有标记和src的浏览器html页面访问blob存储 属性,考虑出站数据传输;即使是html页面 来自天蓝色的网站域名?我的意思是它只有免费的时候 服务器端代码访问存储,而不是html客户端?
是。请记住,浏览器正在使用位于Azure DC之外的数据。
是否通过方法2保存了任何数据传输成本(如果确实有一个), 只需通过与网络API相关的不同费用取消 方法(如带宽成本)?
没有。因为数据最终流出Azure DC(如果是通过存储直接或通过web api,则无关紧要。)
我对直接访问blob的性能优势是错误的 存储,或者可能是关于web api请求开销的错误?
通过提供直接访问blob存储而不是通过web api传输数据,您肯定会获得更多性能优势。另外,你也会增加延迟。
解决方案建议
对于您的应用程序,我建议您查看Azure Blob Storage提供的Shared Access Signature
功能。我相信这会显着提高您的应用程序的性能。
对于上传,您可以创建SAS URL上传权限,让您的Web应用程序直接上传blob存储中的文件。这样,上传数据就不会通过您的服务器进行路由。我写了一些你可能觉得有用的博客文章:
http://gauravmantri.com/2013/12/01/windows-azure-storage-and-cors-lets-have-some-fun/
要下载图像,请再次让Web API返回SAS URL,而不是从blob存储中读取图像数据,然后将该数据流回客户端浏览器。