使用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,一经查实,立即删除!

相关文章

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

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

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

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

通过 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…

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

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

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

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

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

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

2021牛客暑期多校训练营1 G Game of Swapping Numbers 思维 + 巧妙的转换

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个数组A,BA,BA,B&#xff0c;你可以选择AAA的两个位置i,j,i<ji,j,i<ji,j,i<j交换Ai,AjA_i,A_jAi​,Aj​&#xff0c;需要交换正好kkk次&#xff0c;问你最大的∑i1n∣Ai−Bi∣\sum_{i1}^n|A_…

.NET Core 3.0之深入源码理解HttpClientFactory(一)

写在前面创建HttpClient实例的时候&#xff0c;在内部会创建HttpMessageHandler链&#xff0c;我们知道HttpMessageHandler是负责建立连接的抽象处理程序&#xff0c;所以HttpClient的维护实际上就是维护HttpMessageHandler的使用&#xff0c;释放HttpClient并不会及时释放连接…

WTM 构建DotNetCore开源生态,坐而论道不如起而行之

作为一个8岁开始学习编程&#xff0c;至今40岁的老程序员&#xff0c;这辈子使用过无数种语言&#xff0c;从basic开始&#xff0c;到pascal, C, C&#xff0c;到后来的 java, c#,perl,php,再到现在流行的python。小时候的我总觉得多掌握一门语言&#xff0c;我的技术能力就又前…

架构杂谈《六》

超时处理模式在服务化或者微服务架构里&#xff0c;传统的整体应用拆分成多个职责单一的微服务&#xff0c;微服务之间通过某种网络通信协议互相通信和交互&#xff0c;完成特定的功能&#xff0c;然而由于网络通信的不稳定&#xff0c;在设计系统时必须考虑到对网络通信的容错…

【BZOJ4543】Hotel加强版【神仙树形dp】【长链剖分】

题意&#xff1a;给一棵 nnn 个点的树&#xff0c;求两两距离相等的三元组个数。 n≤105n\leq 10^5n≤105 显然相当于是找一个点到这三个点距离相等。子树内和子树外到当前点的距离为某个值的点的个数可以长链剖分快速得到&#xff0c;但统计答案非常棘手。 接下来是个鬼才想…

基于surging 的stage组件设计,谈谈我眼中的微服务

一、前言surging 开源地址&#xff1a;https://github.com/dotnetcore/surging随着业务的发展&#xff0c;并发量的增多&#xff0c;业务的复杂度越来越大&#xff0c;对于系统架构能力要求越来越高&#xff0c;这时候微服务的设计思想应运而生&#xff0c;但是对于微服务需要引…

HDU - 6971 K - I love max and multiply sosdp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 直接求i&j>ki\And j>ki&j>k不是很好求&#xff0c;所以转换成i&jki\And jki&jk的情况。 考虑对a,ba,ba,b求一遍超集&#xff0c;让后从[0,n−1][0,n-1][0,n−1]扫…

推荐10个技术圈优质的公众号大号

公众号有很多但需要什么只有自己知道本次筛选了一批技术圈优质的公众号&#xff0c;主要与python、人工智能、机器学习、技术人生相关希望对你有所帮助!▼★长按二维码&#xff0c;选择“识别二维码”进行关注。▲长按二维码&#xff0c;识别关注简介&#xff1a;Python爱好者社…

使用Kubeadm创建k8s集群之部署规划(三十一)

前言 上一篇我们讲述了使用Kubectl管理k8s集群&#xff0c;那么接下来&#xff0c;我们将使用kubeadm来启动k8s集群。部署k8s集群存在一定的挑战&#xff0c;尤其是部署高可用的k8s集群更是颇为复杂&#xff08;后续会讲&#xff09;。因此本教程会在部署的过程中穿插讲…

HDU - 6967 G I love data structure 线段树维护矩阵 + 细节

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个长度为nnn的数组a,ba,ba,b&#xff0c;你需要完成如下四种操作&#xff1a; 思路&#xff1a; 思路还是比较简单的&#xff0c;首先建一颗线段树&#xff0c;线段树中维护a,b,a2,b2,aba,b,a^2,b^…

荐读|属性与可直接访问的数据成员之间应该如何选

写在前面在书写C#代码的时候你是否有过这样的经历&#xff1a;经常混用属性以及公有的数据成员。毕竟他们的用法基本一致&#xff0c;对于使用来说好像没什么区别啊。其实我也经常使用类的公有的数据成员来定义一些常量&#xff0c;为了简单&#xff0c;在一些仅仅需要对外暴露…

2021牛客暑期多校训练营3 I Kuriyama Mirai and Exclusive Or 差分 + 二进制分治

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个数组aaa&#xff0c;让你实现以下两个操作之后输出数组aaa。 n≤6e5,ai≤230−1n\le6e5,a_i\le2^{30}-1n≤6e5,ai​≤230−1 思路&#xff1a; 下面介绍的思路清奇&#xff0c;反正我想不到。 对…

Lock VS Monitor

介绍介绍对开发人员来说&#xff0c;处理关键代码部分的多线程应用程序是非常重要的。Monitor和lock是c#语言中多线程应用程序中提供线程安全的方法(lock关键字的本质就是对Monitor的封装)。两者都提供了一种机制来确保只有一个线程同时执行代码&#xff0c;以避免代码功能被其…