使用Azure云原生构建博客是怎样一种体验?(上篇)

640?wx_fmt=gif640?wx_fmt=gif

点击上方蓝字关注“汪宇杰博客”

640?wx_fmt=png

导语

https://edi.wang

我的网站是在.NET Core 平台上使用 C#语言编写的开源博客系统,运行于微软智慧云 Azure 国际版上。

本文将重点介绍 Azure 的各项服务如何为博客带来丝滑体验与保驾护航。


640?wx_fmt=png


历史回顾

我博客的历史可以追溯到2003年,而.NET 版博客最初在10年前由 ASP.NET 2.0 WebForm VB + Access 数据库构建,逐步维护升级至今,使用 ASP.NET Core MVC + Azure SQL 数据库。

目前系统代号为“Moonglade”(月神湖),是对上一版.NET Framework 博客(代号“Nordrassil”)的完全重写。

640?wx_fmt=png

针对单用户博客,极度精简,去除了上一版本设计中过度的多用户权限管理、多级分类、MetaWeblog 接口、文章审核工作流等无用组件,并针对云原生环境设计。

博客目前部署在微软公有云 Azure 国际版的 East Asia 地区。排除国内网络因素后,访问速度几乎是秒开。服务器响应平均速度6.5 ms,页面加载平均速度4s(受国内网络影响,使用“正常”连接可以达到1.5-2s)。曾经被许多人怀疑说不可能是.NET 写的,(毕竟说好的.NET 性能差呢)Entity Framework 说好的性能差呢。其实这不仅需要.NET 和 SQL 代码优化,Azure 的服务在其中也功不可没。

640?wx_fmt=png

接下来为大家详细介绍 Azure 如何助力博客实现质的飞跃 2_06.png


640?wx_fmt=png

WHY AZURE GLOBAL

为什么选择国际版


6年前 Azure 在大中华区落地后,我曾经第一时间把博客系统迁移到国内版,毕竟访问速度明显优于国际版。但却发现大中华区 Azure 的功能相比国际版通常要落后很长一段时间才能落地。一些非常重要功能,如 Application Insight 至今无法使用。

即使功能落地,也经常是部分功能可使用,在网站方面还会受到一些规定的影响。另外,由于博客目前主要面向国外社区,因此我也要考虑全球访问速度的因素,这些让我把网速和钱包的因素抛在脑后,选择世界领先的国际版 Azure。

640?wx_fmt=png

当然,如果各位的业务主要集中于大中华区,又想充分使用 Azure,最适合的还是国内版 Azure,但国内 Azure 并非微软运营,请仔细慎重评估后再使用。


640?wx_fmt=png


App Service + Azure SQL Database


这两项服务是博客的核心,也是博客系统最早上云时采用的唯一两项服务。能够将 VM 或是本地数据中心部署网站需要的一天或几天,缩短到十几分钟。而且价格上也比使用 VM 方式部署网站便宜不少。

640?wx_fmt=gif

图 | 网络


640?wx_fmt=png

App Service

App Service 是 Azure 上的一种 PaaS 服务。相比传统虚拟机部署网站,App Service 提供了一个完全托管的平台,让用户无需关心如何安装配置虚拟机,只需要使用上面的 Web 服务即可。至于底层的系统补丁、网站运行环境、Web 服务器配置,都已经由微软自行管理。

因此,程序员和运维人员再也不需要996进 ICU,就能在几分钟内建完网站环境,而传统方式可能需要数小时甚至数天 smiley_4.png

本地机房/虚拟机部署网站的缺点

✘ 又双叒叕打补丁

✘ 手工安装/升级运行环境(IIS、.NET、Python)

✘手工配置网站程序(环境变量、路径、config)

✘手工连接 CI/CD(安装web deploy、FTP)

✘ 手工配置 IP,网络,生产/ ST 环境、负载均衡

✘ 网站爆了,手工上服务器看文件目录、抓 dump

✘ 难以弹性伸缩

App Service 云原生部署网站

✔ 完全托管的平台

✔ 面向全球拓展业务

✔ 快速构建、部署和缩放

✔ 智能监控、故障定位

✔ 满足严苛的性能、可缩放性、安全性要求

✔ 运维成本低于本地数据中心

Azure Portal 在网页端提供了非常完整的管理界面,可以用来完成所有部署(包括不同环境)、诊断、设置、备份、缩放实例、绑定域名/SSL 等几十种操作。

640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png

.NET虽然应当成为正确的选择,但微软并没有只支持自家.NET。你可以选择 Node.js、PHP、Python 或其他语言,同样能使用 App Service 的几乎全部体验,甚至可以选择 Linux/Docker 的底层机器。

640?wx_fmt=png

除了每个网站都会配置的域名、SSL 等基础功能,博客使用了一部分 App Service 的其他功能。

部署槽

该功能的用途是创建和切换不同环境。如我的博客仅有 staging 和 production 两个环境。代码从 Azure DevOps 的持续集成自动发布到非常接近于 production 的 staging 环境,测试完成后,再手动触发 production 环境的部署。Azure 可以做无缝切换两个环境,让你的应用程序几乎是 zero down time,就算爆了,你也可以偷偷切回来,假装没爆过。

640?wx_fmt=gif

图 | 网络

而传统上如果部署爆了,通常需要回滚操作,这段时间内用户肯定会截图给你发微博上庆祝你的爆。所以,我的博客之所以看起来一直非常稳定,并不是每次我写的代码都不爆,而是爆了大家也不知道(手动doge)。

640?wx_fmt=png

备份

传统 VM 或本地数据中心做备份要么人工操作,要么自己写一套复杂的脚本,或者配合系统定时任务操作,或者购买三方产品,非常麻烦,容易996进 ICU。而 Azure App Service 可以在网页端点点鼠标,几分钟内配置定时自动备份,而且包含数据库一起打包。网站爆掉的时候,可以一键选择备份文件进行回档操作,减少损失。你也可以随时下载备份包,以便还原到本地环境。

640?wx_fmt=png


扩大

Azure App Service 可以点点鼠标就在几分钟内轻松配置缩放规则。例如,当 CPU 使用率在1分钟内达到平均70%以上,持续10分钟,就自动增加一个实例。而传统 VM 或本地数据中心要配置这样的缩放规则,很容易996进ICU。

640?wx_fmt=png

高级工具

Kudu 是一个微软的开源工具,由 ASP.NET(可惜不是Core)构建,它正是 App Service 的幕后英雄。可以发布、管理、诊断 IIS 上的网站。微软不仅免费开源了这个工具,也将它整合到了 Azure Portal,通过它,我能查看和操作博客服务器的高级功能。

Kudu 不仅可以查看应用设置、服务器环境变量、浏览或编辑网站目录文件、查看实时 log stream,还能查看 IIS、node、dotnet 等进程,并下载 dump 文件用于本地 debug。简直就是个网站应用的瑞士军刀。smiley_55.pngsmiley_55.pngsmiley_55.pngsmiley_3.png

640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png640?wx_fmt=png


Kudu 项目源代码传送门

640?wx_fmt=gif

https://github.com/projectkudu/kudu 


App Service 的其他功能也很实用。例如,你可以在“拓展”里找到能够全自动续命、全自动配置免费SSL证书的 Let's encrypt 服务;在 Web Jobs 里跑定时任务,而不用自己996折腾任务框架进 ICU;还能0代码实现登录验证等等,本文篇幅有限,不逐一介绍。

使用传送门了解  App Service

640?wx_fmt=gif

https://azure.microsoft.com/en-us/services/app-service/ 




640?wx_fmt=gif

图 | 网络

640?wx_fmt=png

Azure SQL Database

和 App Service 类似,Azure SQL Database 是一个完全托管的数据库服务,包含 SQL Server 的几乎全部功能,也支持 My SQL。使用 Azure SQL Database 就意味着你也无须关心如何安装和配置数据库运行环境,不用给机器打补丁,不用纠结防火墙配置,所有常用操作都在 Azure Portal 里点点鼠标就能分分钟完成。

Azure托管的SQL Server数据库可以用你熟悉的工具管理,如SSMS、Azure Data Studio。

640?wx_fmt=png

为了保证数据库安全性,默认情况下,Azure 允许内部服务访问数据库(你可以随时禁用/启用这项设置),但会把其他公网IP排除在外。你可以在网页端,或SSMS、Azure Data Studio中添加IP白名单。

640?wx_fmt=png

更牛逼的是,SQL数据库并不是只托管就完事了,Azure 还提供了数据安全(包括合规,比如对敏感数据打码)、性能优化服务,可以分析哪些SQL Query最慢,给出准确的调优建议,也能自动找到需要加索引的位置,甚至可以帮你自动加索引。可惜我除了CRUD以外并不了解数据库技术,所以无法给大家深入介绍。

640?wx_fmt=png

使用传送门了解  Azure SQL Database

640?wx_fmt=gifhttps://azure.microsoft.com/en-us/services/sql-database/


640?wx_fmt=gif

图 | 网络


DNS, CDN, Blob Storage, Azure AD, Application Insights, Azure DevOps 等更多精彩内容请听下回分解
640?wx_fmt=png

关注汪宇杰博客


640?wx_fmt=jpeg

微软最有价值专家 汪宇杰

.NET, Windows, Azure 技术分享

博客地址 https://edi.wang

640?wx_fmt=gif点击阅读原文查看往期精彩内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和

传送门 文章目录题意:思路:题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值。 n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2e5,ai​≤1e9 思路: 直接枚…

【UOJ574】多线程计算【二元二项式反演】【定积分】【矩阵】【NTT 卷积】

题意:有 nmn\times mnm 的网格,每个结点在 [0,1)[0,1)[0,1) 内的一个随机时刻被点亮。有 hhh 个数对 xi,yix_i,y_ixi​,yi​,对于一个瞬间状态,如果存在一个 xi,yix_i,y_ixi​,yi​ 使得恰好有 xix_ixi​ 行 yiy_iyi​ 列被点亮&a…

Orleans 知多少 | 2. 核心概念一览

Orleans 术语解读上面这张图中包含了Orleans中的几个核心概念:GrainSiloOrleans ClusterOrleans Client从这张图,我们应该能理清他们之间的关系。Grain作为最小的执行单元Silo 是 Grain 的宿主运行环境,用来暴露具体的服务Orleans Server 提供…

Codeforces Round #587 (Div. 3) C. White Sheet 思维

传送门 文章目录题意:思路:题意: 给你一个白色的矩形和俩个黑色的矩形,问白色被黑色覆盖后还能不能看到。 思路: 经典被简单题卡。 一开始写了个自我感觉很对的做法,结果wa41wa41wa41,检查不…

【UOJ575】光伏元件【网络流建图】【上下界网络流】【费用流】

题意: nnn\times nnn 的 01 矩阵,对于 i∈[1,n]i \in [1,n]i∈[1,n] 有三个参数 li,li,kil_i,l_i,k_ili​,li​,ki​,表示第 iii 行,第 iii 列的 111 的个数分别在 [li,ri][l_i,r_i][li​,ri​] 中,且差的绝对值不超过…

动手造轮子:实现一个简单的 EventBus

动手造轮子:实现一个简单的 EventBusIntroEventBus 是一种事件发布订阅模式,通过 EventBus 我们可以很方便的实现解耦,将事件的发起和事件的处理的很好的分隔开来,很好的实现解耦。微软官方的示例项目 EShopOnContainers 也有在使…

Codeforces Round #733 (Div. 1 + Div. 2) E. Minimax 分情况讨论 + 思维

传送门 文章目录题意:思路:题意: 给你一个串,你可以随意安排这个串,使得这个串的每个前缀的kmpkmpkmp数组最大值最小,定义为f(a)f(a)f(a),并且字典序最小,输出安排之后的串。 n≤1e…

【Ynoi2011】成都七中【树论】【点分树】【离线】【树状数组】

题意:给一棵树,点有颜色,qqq 次询问,每次给定 l,r,xl,r,xl,r,x ,求只保留编号在 [l,r][l,r][l,r] 中的点时点 xxx 所在连通块的颜色数。 所有数 ≤105\leq 10^5≤105 题目背景好评 首先所有颜色不同的话就是数连通块…

通过 nginx-proxy 实现自动反向代理和 HTTPS

本章节代码已经上传至 https://github.com/siegrainwong/.NET-Core-with-Docker/tree/master/Part3系列大纲这次我们讲第三篇:用 docker-compose 启动 WebApi 和 SQL Server在容器中集成 Skywalking APM通过 nginx-proxy 对 Portainer、Skywalking、WebApi 实现自动…

P4781 【模板】拉格朗日插值

传送门 把公式实现一下即可: 当xxx连续的时候可以优化为O(N)O(N)O(N)。 // Problem: P4781 【模板】拉格朗日插值 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P4781 // Memory Limit: 125 MB // Time Limit: 1000 ms // // Powered by CP Edi…

【HNOI/AHOI2018】毒瘤【容斥】【虚树/动态dp】

题意:nnn 个点 mmm 条边的连通无向图的独立集个数模 998244353998244353998244353。 n≤105,m≤n10n\leq 10^5,m\leq n10n≤105,m≤n10 为什么标题要把两个算法写一起?因为这两个东西在这类问题上是本质相同的,这也是写这篇博客的原因。 显…

MediatR-进程内的消息通信框架

MediatR是一款进程内的消息订阅、发布框架,提供了Send方法用于发布到单个处理程序、Publish方法发布到多个处理程序,使用起来非常方便。目前支持 .NET Framework4.5、.NET Stardand1.3、.NET Stardand2.0等版本,可跨平台使用。要在项目中使用…

Codeforces Round #586 (Div. 1 + Div. 2) D. Alex and Julian 数学 + 思维

传送门 文章目录题意:思路:题意: 给你一个无限个点的坐标轴,一个集合BBB,如果存在∣i−j∣bk|i-j|b_k∣i−j∣bk​的话,那么i,ji,ji,j之间就连边。现在问你至少要从集合BBB中去掉多少个数才能使得连完边之…

【十二省联考2019】字符串问题【后缀自动机】【拓扑排序】

题意:给一个字符串 SSS,以子串的形式给出一些 A 类串和 B 类串以及 mmm 对 A 类串支配 B 类串的关系。求一个总长度最长的 A 类串序列,使得每个串都存在一个 B 类串前缀被后一个串支配。无穷输出 −1-1−1。 ∣S∣,m≤2105|S|,m\leq 2\times …

Codeforces Round #586 (Div. 1 + Div. 2) B. Multiplication Table 思维 + 公式

传送门 文章目录题意:思路:题意: 给你一个n∗nn*nn∗n的矩阵,每个位置由ai∗aja_i*a_jai​∗aj​得来,主对角线为000,让你求出来aia_iai​。 n≤1e3n\le1e3n≤1e3 思路: 由公式ai,j∗ai,kaj,…

不好意思,这么久没有更新《从零开始掌握ASP.NET Core 》

点击上方蓝字,关注「我们」等了快个月了,终于开始更新了。因为感冒,弄的嗓子有点沙哑。所以停了半个月才是更新,目前一口气更新了12个章节,大家可以耐心观看内容了。《从零开始学ASP.NET Core 》-- 更新通知视频课程更…

【NOI2018】你的名字【后缀自动机】【可持久化线段树合并】【乱搞】

题意:给一个串 SSS,qqq 次询问,每次给定串 TTT 和 l,rl,rl,r ,求有多少个本质不同的串是 TTT 的子串而不是 Sl…rS_{l\dots r}Sl…r​ 的子串。 ∣S∣≤5105,q≤105,∑∣T∣≤106|S|\leq 5\times 10^5,q\leq 10^5,\sum|T|\leq 10^…

2021牛客暑期多校训练营1 A.Alice and Bob 博弈 SG函数

传送门 文章目录题意:思路:题意: 有两堆石子,两个人每次可以进行如下操作:从某一堆狮子中拿出x(x>0)x(x>0)x(x>0)个,从另一堆石子中拿出s∗x(s>0)s*x(s>0)s∗x(s>0)个。谁不能操作谁输&…

【CTSC2010】珠宝商【后缀自动机】【点分治】【根号分治】

题意:给一棵 nnn 个点的树,每个点有个字符,另给一个长度为 mmm 的特征串,求树上 n2n^2n2 条有向路径在特征串中出现的次数之和。 n,m≤5104n,m\leq 5\times 10^4n,m≤5104 看到母串先建 SAM (bushi 树上路径统计问题…

使用Azure云原生构建博客是怎样一种体验?(下篇)

点击上方蓝字关注“汪宇杰博客”接上篇《使用Azure云原生构建博客是怎样一种体验?(上篇)》DNSAzure DNS 是一套分布全球的域名解析服务。具有超高可用性和接近实时的记录更新及生效速度。我的博客也使用了这项服务。Azure 现在可以提供域名注…