Azure 入门系列 (第五篇 Azure Storage)
本系列
这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能.
一共 6 篇
1. Virtual Machine (VM) 和 SQL Server
3. Publish Web Application to VM (IIS, HTTPS)
5. Azure Storage (with custom domain) <-- 你在这里
6. Computer Vision (smart-cropped thumbnails, OCR)
以前的学记笔记:
Secret 和 Data Protect Azure key-vault & Storage Account 第 2 篇
When to use it?
Serve static files
网站最佳实践说, 静态文件 (图片, js, css 等) 尽可能分开处理.
一是为了减轻服务器压力, 二是可以做 CDN 优化速度, 所以 storage 自然就是首选方案了.
这里提一下它的代价. 在关于磁盘里有提到 VM Disk, Azure 默认的 VM OS Disk 是 125GB (可以增加).
如果使用 storage 处理静态文件, 意味着 OS Disk 的 100 GB 基本上是空着的 (有点浪费), storage 要配上 custom domain https 的话, 一定要 CDN
那边又是一笔费用了. 我个人的意见是, 如果 VM 没有需要减压, 也没有要 CDN 做优化. 那不推荐使用 storage, 把 static file 让 VM 处理就好了呗.
除了解压和 CDN 优化, 还有一种情况必须要用 storage 就是 files 太多, 企业应用需要保存很多 document pdf, 又不可以丢掉, 日子久了就会非常多. 这时用 disk 很不划算.
但是如果把整个文件管理换成 storage 也很伤 (下面会讲到几个难点). 所以比较 trade-off 的方案是, 做定时器, 把比较旧的资料搬过去 storage. 然后 server as 一个代理.
这样降低了 VM disk -> storage 的负面影响和 migration 代价, 只有在访问旧文件的时候才可能出现不好的情况. 这样就比较可以接受了.
参考:
Why you should use a Cookie-less domain for serving your static content (CDN)
Serve static content from a cookieless domain
SEO Help us discover all your images
Data Protection
Data protection 需要一个地方存放 Keys 的 xml 文件. 如果有多台 VM 的话, 就需要把这个 xml 存在一个中心, 好让所有 VM 可以一直访问.
Storage 自然就是好地方. 但如果只有 1 台 VM 的话, 把 xml 存在 VM 里也是 ok 的.
VM Disk -> Storage 遇到的难点
VM disk 在 ASP.NET Core 就是直接 static files 获取就对了, 一切简简单单.
转去 Storage 会遇到不少问题
Domain 换了
这个问题不大, 有些大公司也不 care. 比如
https://s3.amazonaws.com/cdn.freshsales.io/130644/documents/17000031818/original/1642066047884495_avatar_yangmi.jpg
这个是 freshworks 的图片路径, 用的是 AWS 的 storage, 如果真的不喜欢也可以换成 custom domain. 下面有教
权限访问
Storage 比较难做权限管理, 图片嘛, 要做权限有 2 个方式, 第一个是用 cookie, 第二个是用 query params.
没办法用 header bearer token 搞.
cookie 的话需要搞 Azure AD 让用户登入.. 这个有点...大工程了
query params 就需要维护一个 SAS 创建. 但是 cache 方面就不太能做了. 毕竟 query params 做权限的话, 最多 1 天就得换了. 而游览器缓存是基于 full url 的, 所以多少影响到.
freshworks 也是用 SAS 方式做的哦.
Pre-process
pre-process 主要是讲 upload 的时候, 通常会做一些缩略图, 压缩, convert to webp 之类的动作.
方案 1 就是先 upload 到 VM 处理了在存入 storage.
方案 2 是让 browser js 处理, 或者让 Azure Function 处理, Storage 可以 set 一个 on uploaded run Azure Funtion 的
我选方案 1
性能
read file 走 CDN 会比 disk 快, 这也是它主要的好处啦. 但是如果 server as proxy 的话就慢多了.
browser -> CDN -> storage = 快
browser -> server -> disk = 普通
browser -> server -> storage 比 to disk 慢一倍左右, 我拿了 100mb 的 file 做测试, 直接读 disk vs get from storage. (disk maybe < 1 sec, storage 大概 2-3 sec)
upload 的话也是 t
browser -> server -> disk = 普通
browser -> server -> storage 比 to disk 慢一倍左右, 我拿了 100mb 的 file 做测试, 直接写入 disk vs upload to from storage. (disk 1 sec 左右, storage 3sec 左右)
Storage 小知识
1. Storage 是独立的 server, 即使没有 VM 我们也可以访问到 Storage 里面的资料
2. Storage 结构是 Account > Container > Blob
3. Container 不是 folder, folder 是通过创建 blob 的时候给 path 来实现的
4. Blob 主要分 3 种, 用于图,视频,文件, 用于 DIsk, 用于 Log
5. Storage 有自己的 url 访问, 可以使用 Custom domain, 如果要 HTTPS 就要配上 Azure CDN
Storage Account & CDN & Custom Domain & HTTPS
参考:
Integrate an Azure Storage account with Azure CDN
Access storage blobs using an Azure CDN custom domain over HTTPS
Add a custom domain to your endpoint
Map a custom domain to an Azure Blob Storage endpoint
Configure HTTPS on an Azure CDN custom domain
Set up the Standard rules engine for Azure CDN
Create Storage Account

storage 的 redundancy 是 GRS, 所以不需要另外在 Recovery Services Vault 做 Disaster Recovery

它有一个 version control 的功能, 所以也不需要另外在 Recovery Services Vault 做 Backup
Create container

Create Blob

进入 container 就可以 upload blob 了, folder 是在这个阶段创建的哦, container 不是 folder
进入 blob 就可以拿到访问 blob 的 url 了.

Create CDN

Add Custom Domain To CDN
到 DNS 添加 CNAME record

到 endpoint 里创建 Custom domain

Enable HTTPS on Custom Domain
进入 custom domain 打开 HTTPS

这个过程需要大概 30 分钟, 等就对了

Add Rule Engine Enforce HTTPS

访问 https://static.jbreviews.com.my/static/images/yangmi.jpg 搞定
Azure 入门系列 (第五篇 Azure Storage)的更多相关文章
- 微软云平台windows azure入门系列八课程
微软云平台windows azure入门系列八课程: Windows Azure入门教学系列 (一): 创建第一个WebRole程序与部署 Windows Azure入门教学系列 (二): 创建第一个 ...
- Azure Data Factory(五)Blob Storage 密钥管理问题
一,引言 之前讲解的ADF 集成Azure DevOps 实现CI/CD,在 Releases Pipeline 阶段,我们是将两个 Blob Storage 的链接字符串复制.粘贴到 "O ...
- Windows Azure 入门系列课程Windows Azure 入门系列课程
Windows Azure 入门系列课程 https://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/NewSeries/A ...
- 前端工程师技能之photoshop巧用系列第五篇——雪碧图
× 目录 [1]定义 [2]应用场景 [3]合并[4]实现[5]维护 前面的话 前面已经介绍过,描述性图片最终要合并为雪碧图.本文是photoshop巧用系列第五篇——雪碧图 定义 css雪碧图(sp ...
- Angular2入门系列(五)———— 路由参数设置
Angular2入门系列(五)---- 路由参数设置路由配置: { path: '', component: CarProFile, children: [ { path: 'add', compon ...
- HTML5简单入门系列(五)
前言 本篇将讲述HTML5的服务器发送事件(server-sent event) Server-Sent 事件 Server-Sent 事件是单向消息传递,指的是网页自动获取来自服务器的更新. 以前的 ...
- Vue入门系列(五)Vue实例详解与生命周期
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
- 【Windows编程】系列第五篇:GDI图形绘制
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数 ...
- EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由
目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...
- Azure技术系列之Redis篇---第一章数据缓存
嘈杂和忙碌的生活占据占据了生活的每一天,好久没有静下心来对自己喜欢的技术进行归纳总结了.痛定思痛,今天开始开荒,把之前研究的技术进行归纳总结,先从Azure的Redis的开发技术开始. Azure 的 ...
随机推荐
- Git 奇幻之旅⌛️
第一天: 本地仓库 故事的主角是小明,一个刚入门编程的小白.他正在为一个项目写代码,但是他发现每次修改代码都很麻烦,因为他要不断地备份文件,而且很容易弄混版本.有一天,他听说了一个叫 Git 的神奇工 ...
- Webpack3.x升级至 4.x 小记
近期项目部署遇到点问题,需要升级webpack版本,特此整理一小记,记录升级过程中的依赖包及报错处理. 本次升级的依赖包及对应版本对照表: npm 包 当前版本 升级版本 S/D vue ^2.5.1 ...
- django redirect_authenticated_user
redirect_authenticated_user是在Web开发框架(如Django)中常见的设置,用于控制身份验证重定向的行为. 当启用redirect_authenticated_user时, ...
- 12、SpringMVC之拦截器
12.1.环境搭建 创建名为spring_mvc_interceptor的新module,过程参考9.1节和9.5节 12.1.1.页面请求示例 <a th:href="@{/test ...
- 【OracleDB】 10 数据处理 DML
DML(Data Manipulation Language – 数据操纵语言) - 向表中插入数据 - 修改现存数据 - 删除现存数据 [事务是由完成若干项工作的DML语句组成的] INSERT 语 ...
- (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制) —— python3.12版本下成功通过测试
前文: signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) -- 强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程 ...
- 强化学习 —— reinforce算法中更新一次策略网络时episodes个数的设置对算法性能的影响 —— reinforce算法中迭代训练一次神经网络时batch_size大小的不同设置对算法性能的影响
本文相关的博客:(预先知识) 强化学习中经典算法 -- reinforce算法 -- (进一步理解, 理论推导出的计算模型和实际应用中的计算模型的区别) 本文代码地址: https://gitee.c ...
- MindSpore分布式并行训练 (GPU-Docker)mindspore—1.2.1—gpu—docker版本运行报错,Failed to init nccl communicator for group,init nccl communicator for group nccl_world_group
如题目所述: 计算框架MindSpore分布式并行训练报错,具体版本:docker-gpu-1.2.1 运行环境: 硬件:Intel CPU, 4卡泰坦 软件:Ubuntu18.04宿主机,docke ...
- .gitignore文件的使用方法(学习总结版)
平时总是喜欢把日常学习的代码以代码库的形式上传到Gitee或Github上(Github上的代码正逐渐迁移至Gitee上),但是有时候总有一些中间编译的文件不行要一起上传,原有有两个: 1.是不行Gi ...
- Apache DolphinScheduler:深入了解大数据调度工具
一.海豚调度介绍 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统.适用于企业级场景,提供了一个可视化操作任务.工作流和全生命周期数据处理过程的解 ...