使用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云原生构建博客是怎样一种体验?(上篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么说拥抱.NET CORE的时候到了
- 下一篇: Orleans 知多少 | 2. 核心概