使用Azure云原生构建博客是怎样一种体验?(上篇)
点击上方蓝字关注“汪宇杰博客”
导语
https://edi.wang
我的网站是在.NET Core 平台上使用 C#语言编写的开源博客系统,运行于微软智慧云 Azure 国际版上。
本文将重点介绍 Azure 的各项服务如何为博客带来丝滑体验与保驾护航。
历史回顾
我博客的历史可以追溯到2003年,而.NET 版博客最初在10年前由 ASP.NET 2.0 WebForm VB + Access 数据库构建,逐步维护升级至今,使用 ASP.NET Core MVC + Azure SQL 数据库。
目前系统代号为“Moonglade”(月神湖),是对上一版.NET Framework 博客(代号“Nordrassil”)的完全重写。
针对单用户博客,极度精简,去除了上一版本设计中过度的多用户权限管理、多级分类、MetaWeblog 接口、文章审核工作流等无用组件,并针对云原生环境设计。
博客目前部署在微软公有云 Azure 国际版的 East Asia 地区。排除国内网络因素后,访问速度几乎是秒开。服务器响应平均速度6.5 ms,页面加载平均速度4s(受国内网络影响,使用“正常”连接可以达到1.5-2s)。曾经被许多人怀疑说不可能是.NET 写的,(毕竟说好的.NET 性能差呢),Entity Framework 说好的性能差呢。其实这不仅需要.NET 和 SQL 代码优化,Azure 的服务在其中也功不可没。
接下来为大家详细介绍 Azure 如何助力博客实现质的飞跃
WHY AZURE GLOBAL
为什么选择国际版
6年前 Azure 在大中华区落地后,我曾经第一时间把博客系统迁移到国内版,毕竟访问速度明显优于国际版。但却发现大中华区 Azure 的功能相比国际版通常要落后很长一段时间才能落地。一些非常重要功能,如 Application Insight 至今无法使用。
即使功能落地,也经常是部分功能可使用,在网站方面还会受到一些规定的影响。另外,由于博客目前主要面向国外社区,因此我也要考虑全球访问速度的因素,这些让我把网速和钱包的因素抛在脑后,选择世界领先的国际版 Azure。
当然,如果各位的业务主要集中于大中华区,又想充分使用 Azure,最适合的还是国内版 Azure,但国内 Azure 并非微软运营,请仔细慎重评估后再使用。
App Service + Azure SQL Database
这两项服务是博客的核心,也是博客系统最早上云时采用的唯一两项服务。能够将 VM 或是本地数据中心部署网站需要的一天或几天,缩短到十几分钟。而且价格上也比使用 VM 方式部署网站便宜不少。
图 | 网络
App Service
App Service 是 Azure 上的一种 PaaS 服务。相比传统虚拟机部署网站,App Service 提供了一个完全托管的平台,让用户无需关心如何安装配置虚拟机,只需要使用上面的 Web 服务即可。至于底层的系统补丁、网站运行环境、Web 服务器配置,都已经由微软自行管理。
因此,程序员和运维人员再也不需要996进 ICU,就能在几分钟内建完网站环境,而传统方式可能需要数小时甚至数天
本地机房/虚拟机部署网站的缺点
✘ 又双叒叕打补丁
✘ 手工安装/升级运行环境(IIS、.NET、Python)
✘手工配置网站程序(环境变量、路径、config)
✘手工连接 CI/CD(安装web deploy、FTP)
✘ 手工配置 IP,网络,生产/ ST 环境、负载均衡
✘ 网站爆了,手工上服务器看文件目录、抓 dump
✘ 难以弹性伸缩
App Service 云原生部署网站
✔ 完全托管的平台
✔ 面向全球拓展业务
✔ 快速构建、部署和缩放
✔ 智能监控、故障定位
✔ 满足严苛的性能、可缩放性、安全性要求
✔ 运维成本低于本地数据中心
Azure Portal 在网页端提供了非常完整的管理界面,可以用来完成所有部署(包括不同环境)、诊断、设置、备份、缩放实例、绑定域名/SSL 等几十种操作。
.NET虽然应当成为正确的选择,但微软并没有只支持自家.NET。你可以选择 Node.js、PHP、Python 或其他语言,同样能使用 App Service 的几乎全部体验,甚至可以选择 Linux/Docker 的底层机器。
除了每个网站都会配置的域名、SSL 等基础功能,博客使用了一部分 App Service 的其他功能。
部署槽
该功能的用途是创建和切换不同环境。如我的博客仅有 staging 和 production 两个环境。代码从 Azure DevOps 的持续集成自动发布到非常接近于 production 的 staging 环境,测试完成后,再手动触发 production 环境的部署。Azure 可以做无缝切换两个环境,让你的应用程序几乎是 zero down time,就算爆了,你也可以偷偷切回来,假装没爆过。
图 | 网络
而传统上如果部署爆了,通常需要回滚操作,这段时间内用户肯定会截图给你发微博上庆祝你的爆。所以,我的博客之所以看起来一直非常稳定,并不是每次我写的代码都不爆,而是爆了大家也不知道(手动doge)。
备份
传统 VM 或本地数据中心做备份要么人工操作,要么自己写一套复杂的脚本,或者配合系统定时任务操作,或者购买三方产品,非常麻烦,容易996进 ICU。而 Azure App Service 可以在网页端点点鼠标,几分钟内配置定时自动备份,而且包含数据库一起打包。网站爆掉的时候,可以一键选择备份文件进行回档操作,减少损失。你也可以随时下载备份包,以便还原到本地环境。
扩大
Azure App Service 可以点点鼠标就在几分钟内轻松配置缩放规则。例如,当 CPU 使用率在1分钟内达到平均70%以上,持续10分钟,就自动增加一个实例。而传统 VM 或本地数据中心要配置这样的缩放规则,很容易996进ICU。
高级工具
Kudu 是一个微软的开源工具,由 ASP.NET(可惜不是Core)构建,它正是 App Service 的幕后英雄。可以发布、管理、诊断 IIS 上的网站。微软不仅免费开源了这个工具,也将它整合到了 Azure Portal,通过它,我能查看和操作博客服务器的高级功能。
Kudu 不仅可以查看应用设置、服务器环境变量、浏览或编辑网站目录文件、查看实时 log stream,还能查看 IIS、node、dotnet 等进程,并下载 dump 文件用于本地 debug。简直就是个网站应用的瑞士军刀。
Kudu 项目源代码传送门
https://github.com/projectkudu/kudu
App Service 的其他功能也很实用。例如,你可以在“拓展”里找到能够全自动续命、全自动配置免费SSL证书的 Let's encrypt 服务;在 Web Jobs 里跑定时任务,而不用自己996折腾任务框架进 ICU;还能0代码实现登录验证等等,本文篇幅有限,不逐一介绍。
使用传送门了解 App Service
https://azure.microsoft.com/en-us/services/app-service/
图 | 网络
Azure SQL Database
和 App Service 类似,Azure SQL Database 是一个完全托管的数据库服务,包含 SQL Server 的几乎全部功能,也支持 My SQL。使用 Azure SQL Database 就意味着你也无须关心如何安装和配置数据库运行环境,不用给机器打补丁,不用纠结防火墙配置,所有常用操作都在 Azure Portal 里点点鼠标就能分分钟完成。
Azure托管的SQL Server数据库可以用你熟悉的工具管理,如SSMS、Azure Data Studio。
为了保证数据库安全性,默认情况下,Azure 允许内部服务访问数据库(你可以随时禁用/启用这项设置),但会把其他公网IP排除在外。你可以在网页端,或SSMS、Azure Data Studio中添加IP白名单。
更牛逼的是,SQL数据库并不是只托管就完事了,Azure 还提供了数据安全(包括合规,比如对敏感数据打码)、性能优化服务,可以分析哪些SQL Query最慢,给出准确的调优建议,也能自动找到需要加索引的位置,甚至可以帮你自动加索引。可惜我除了CRUD以外并不了解数据库技术,所以无法给大家深入介绍。
使用传送门了解 Azure SQL Database
https://azure.microsoft.com/en-us/services/sql-database/
图 | 网络
DNS, CDN, Blob Storage, Azure AD, Application Insights, Azure DevOps 等更多精彩内容请听下回分解
关注汪宇杰博客
微软最有价值专家 汪宇杰
.NET, Windows, Azure 技术分享
博客地址 https://edi.wang
点击阅读原文查看往期精彩内容
使用Azure云原生构建博客是怎样一种体验?(上篇)相关推荐
- 使用Azure云原生构建博客是怎样一种体验?(下篇)
点击上方蓝字关注"汪宇杰博客" 接上篇<使用Azure云原生构建博客是怎样一种体验?(上篇)> DNS Azure DNS 是一套分布全球的域名解析服务.具有超高可用性 ...
- 从入门到放弃,.net构建博客系统(二):依赖注入
文章目录:<从入门到放弃,.net构建博客系统> 从入门到放弃,.net构建博客系统(一):系统构建 从入门到放弃,.net构建博客系统(二):依赖注入 上一篇中有讲到项目启动时会进行io ...
- Vuepress-theme-reco 构建博客上传GitHub可以访问,无法正常显示。
Vuepress-theme-reco 构建博客上传GitHub可以访问,无法正常显示. 问题解决 修改.vuepress/config.js 在 docs/.vuepress/config.js 中 ...
- 腾讯云部署hexo博客系统
腾讯云部署hexo博客系统 1. 云服务器端配置 git 1. 安装依赖库和编译工具 安装依赖库: yum install curl-devel expat-devel gettext-devel o ...
- 【nodeJS】从nodejs原生的博客网站搭建到 koa框架实现个人博客网站搭建
nodejs实现搭建博客网站 前言:原java后端渣渣一枚,因项目需要转学了nodejs进行开发,正式进行项目开发之前,师傅安排了一些项目训练,先熟悉js语法,然后熟悉nodejs,再慢慢重构向框架的 ...
- 阿里云搭建个人博客(workpress)
阿里云搭建个人博客,此篇文章介绍的搭建的博客为workpress,在阿里云的官网上也有介绍怎样搭建workpress的详细教程,但此篇文章介绍的是如何通过Docker来搭建workpress,了解过D ...
- 从头再来博客_免费课程:从头开始构建博客吗?
从头再来博客 by ZAYDEK 由ZAYDEK 瓷砖... (TIL-) 免费课程:从头开始构建博客吗? (Free Course: Build A Blog From Scratch ??) 可 ...
- 腾讯云cos html,Docsify+腾讯云对象存储 COS,一键搭建云上静态博客
最近一直在想如何利用 COS 简化静态博客的搭建过程.搜了很多的静态博客搭建过程,发现大部分的静态博客都要通过编译才能生成静态页面.功夫不负有心人,终于让我找到了一个超简洁博客的搭建方法. 效果预览 ...
- 行云流水| CI 3.0 云原生构建全新上线
研发过程中,如何直观且准确地获悉代码提交后的质量状态? 引入持续集成,可以自动化的对代码进行代码检查.单元测试.编译构建.甚至部署与发布,大幅提升开发人员的效率. 腾讯云 CODING 推出 CI 3 ...
最新文章
- boost::movelib::unique_ptr相关用法的测试程序
- 《中秋书月》月圆之夜,我和德鲁克
- linux网络体系架构
- leetcode117. 填充每个节点的下一个右侧节点指针 II
- sklearn中的train_test_split函数
- adb指令禁用软件_免Root使用ADB命令_停用手机系统应用
- 保定华电计算机考研真题,华北电力大学(保定)离散数学试题(含2005年真题)...
- Html+css仿淘宝页面练习
- IT人力外包越来越流行的原因剖析
- 技术债不是负担,而是成功的战略杠杆
- Oracle snapper ASH监控工具
- CVE-2019-11478 Sack SlownessExcess Resource Usage漏洞解析与利用
- 红米note9pro和华为Nova8哪个好 红米note9pro和华为Nova8哪个更加值得入手
- 《Kali Linux高级渗透测试原书第2版》网络渗透测试技术书 无线网络渗透测试详解 黑客攻击与防范实战从入门到精通书
- 服务器安全神器,Linux 上安装 Fail2Ban 保护 SSH
- 【C++】Dijkstra算法
- 非常适合新手使用的吉他调音软件!
- 计算机思维在化工方面的应用,计算思维在化学上的应用.pdf
- android studio开发整合资源简单实现android扫一扫功能
- 程序员的五个开发神器助你更好的开发!