我正在构建一个网站,该网站(除其他外)允许用户通过 web api 上传照片。用户图像将存储在 azure storage blob 中以显示在用户相册中,并与社交媒体共享。该站点将作为一个 azure 网站托管。我渴望将数据传输成本降至最低。我了解 azure 网站和表/blob 存储之间的数据传输不会产生数据传输费用(因为它不被视为“出站”),而从 azure 网站外部请求的数据会产生数据传输费用。作为对此的回应,我有两种将图像暴露给浏览器的策略:
1.) 通过 URI 到 azure 存储中的图像 blob,例如使用本地存储帐户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”按钮等插件绕过所有这些,但这没关系。
我只是在学习这些东西,所以我可能会走得很远。关于未将出站传输成本应用于 azure 网站,我错了吗?我不认为我是,但至少可以说,整个定价模式令人困惑。
正在从具有标记和 src 属性的浏览器 html 页面访问 blob 存储,被视为出站数据传输;即使 html 页面来自 azure 网站域?我的意思是它只有在服务器端代码访问存储时才免费,而不是 html 客户端?
是否通过方法 2 节省了任何数据传输成本(如果确实有的话),只是被与 web api 方法相关的不同成本(如带宽成本)所抵消?
我对直接访问 blob 存储的性能优势是错误的,还是对 web api 请求的开销可能是错误的?
这是设计的早期阶段,所以我可以在必要时抛弃 Azure。我宁愿不这样做,因为我认为这就是我正在寻找的东西。我不想要什么东西,我很乐意为我使用的服务付费。当然,我不想让我的无知付出代价。
在这方面,我可以接受您的建议,并非常感谢您的帮助。