十分钟上线-基于函数计算开发 Restful web api asp.net core web app
前言
這篇文章適合所有的 C# 開發(fā)新手、老鳥以及想準(zhǔn)備學(xué)習(xí)開發(fā) C# 的程序猿。.NET Core是一個(gè)開源通用的開發(fā)框架,支持跨平臺(tái), 阿里云函數(shù)計(jì)算推出了 dotnetcore2.1 runtime, 使用 C# 編寫 serverless 函數(shù), 詳情見官方文檔:C# 函數(shù)入口. 在官方文檔描述中,我們獲知阿里云函數(shù)計(jì)算可以很好支持 asp.net core 的 Applicaiton:
- ASP.NET Core Web API
- ASP.NET Core Web App
- ASP.NET Core Web App (Model-View-Controller)
在介紹 Serverless Web 開發(fā)新模式之前,我們先了解下將 C# WebApi/WebApp Serverless 化的好處:
本文以部署一個(gè)完善的 asp.net core 工程 Blogifier 為例,在函數(shù)計(jì)算環(huán)境中為例,向您講解如何使用阿里云函數(shù)計(jì)算快速構(gòu)建或移植基于 asp.net core 開發(fā)的 WebApi/WebApp ,通過(guò)本文,您將會(huì)了解以下內(nèi)容:
- 案例概覽
- 傳統(tǒng)服務(wù)器架構(gòu) VS Serverless架構(gòu)
- Serverless架構(gòu)詳解
- 函數(shù)計(jì)算運(yùn)行 Asp.net core App 原理
- 案例開發(fā)配置步驟
- FC Web 設(shè)置自定義域名
案例概覽
在本教程中,我們講解如何利用函數(shù)計(jì)算一步一步來(lái)構(gòu)建 Web 的 Server 端,該案例是把一個(gè) asp.net core 工程Blogifier 部署到函數(shù)計(jì)算,本文旨在展示函數(shù)計(jì)算做 Web Backend 能力,具體表現(xiàn)為以下幾點(diǎn):
- 完善的 ASP.NET Core Web 系統(tǒng)遷移到 FC 的成本不高
- FC 打通了專有網(wǎng)絡(luò) VPC 功能,用戶的函數(shù)可以配置訪問(wèn)專有網(wǎng)絡(luò)的云資源,比如本案例中 NAS
案例體驗(yàn)入口:
http://dotnet.mofangdegisn.cn/
傳統(tǒng)服務(wù)器架構(gòu) VS Serverless架構(gòu)
正常來(lái)說(shuō),用戶開發(fā) Server 端服務(wù),常常面臨開發(fā)效率,運(yùn)維成本高,機(jī)器資源彈性伸縮等痛點(diǎn),而使用 Serverless 架構(gòu)可以很好的解決上述問(wèn)題。下面是傳統(tǒng)架構(gòu)和 Serverless 架構(gòu)的對(duì)比:
阿里云函數(shù)計(jì)算是一個(gè)事件驅(qū)動(dòng)的全托管計(jì)算服務(wù)。通過(guò)函數(shù)計(jì)算,您無(wú)需管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫代碼并上傳。函數(shù)計(jì)算會(huì)為您準(zhǔn)備好計(jì)算資源,以彈性、可靠的方式運(yùn)行您的代碼,并提供日志查詢,性能監(jiān)控,報(bào)警等功能。借助于函數(shù)計(jì)算,您可以快速構(gòu)建任何類型的應(yīng)用和服務(wù),無(wú)需管理和運(yùn)維。
Serverless 架構(gòu)詳解
從上面的示例圖中,整體架構(gòu)十分簡(jiǎn)單明了, 用 FC 替代了 Web 服務(wù)器,但是換來(lái)的是免運(yùn)維,彈性擴(kuò)容,按需付費(fèi)等一系列優(yōu)點(diǎn)
函數(shù)計(jì)算運(yùn)行 Asp.net Core App 原理
Asp.net Core App 運(yùn)行在服務(wù)器上
A http request to your website will go through IIS/Nginx, then Kestrel, and finally will be passed on to ASP.NET Core
Asp.net Core App 運(yùn)行在函數(shù)計(jì)算上
請(qǐng)求通過(guò)函數(shù)(with http trigger), 最后到達(dá)ASP.NET Core
tips: 基于函數(shù)計(jì)算環(huán)境運(yùn)行新建 asp.net core app 可以參考[dotnet runtime HTTP 觸發(fā)器的函數(shù)入口示例]()
在本文中,我們展示把一個(gè)現(xiàn)有的成熟的 asp.net core 工程低成本無(wú)縫遷移到函數(shù)計(jì)算環(huán)境。
案例開發(fā)配置步驟
準(zhǔn)備工作
1. 創(chuàng)建 NAS 掛接點(diǎn),配置 VPC , 具體參考函數(shù)計(jì)算nas使用示例
注:在本示例中使用 sqlite3 數(shù)據(jù)庫(kù),這種文件類型的數(shù)據(jù)庫(kù)直接放置在 nas 即可,如果使用mysql 等其他數(shù)據(jù)庫(kù), 需要?jiǎng)?chuàng)建 RDS 數(shù)據(jù)庫(kù), 配置 VPC , 具體參考通過(guò) VPC 訪問(wèn) RDS 實(shí)例
2. 可選操作,在準(zhǔn)備函數(shù)的 region 創(chuàng)建日志,用于函數(shù)的調(diào)試, 具體參考函數(shù)計(jì)算配置日志服務(wù)
創(chuàng)建函數(shù)
1. 創(chuàng)建 Service (假設(shè)是 csharp-web ), 配置準(zhǔn)備 vpc config , nas config 和日志服務(wù),比如案例體驗(yàn)的 Service 配置如下圖:
2. 下載 asp.net core 工程,Blogifier, 用 vs 打開, debug 本地可以正常運(yùn)行。
注:本地安裝 dotnetcore2.1
3. 在工程中增加入口函數(shù),使得該工程可在函數(shù)計(jì)算執(zhí)行環(huán)境運(yùn)行,diff
4. dotnet publish -c Release, 跳轉(zhuǎn)到publish目錄, 將相關(guān)的靜態(tài)資源/可寫/共享目錄移動(dòng)到上述配置的 NAS 的某個(gè)目錄(這里假設(shè)是 www目錄, 對(duì)應(yīng)步驟2中的diff)
# dotnet publish -c Release# cp -r plugins/Common/bin/Release/netcoreapp2.1/publish/* src/App/bin/Release/netcoreapp2.1/publish/# src/App/bin/Release/netcoreapp2.1/publish/# mkdir lib// 選擇函數(shù)計(jì)算執(zhí)行環(huán)境所需要的so, 其他的刪除即可 # cp runtimes/linux-x64/native/libe_sqlite3.so ./lib# // 這里是傳送對(duì)應(yīng)的靜態(tài)文件和 app.db 到 nas 中, 詳情看下面的描述# rm -rf wwwroot app.db runtimes # zip -r code.zip *// 最后使用這個(gè) code.zip 創(chuàng)建 handler 為 `App::App.FcRemoteEntrypoint::HandleRequest` 函數(shù)將 publish 目錄下的 wwwroot 和 app.db 傳送到 nas 的 www 目錄, 可以使用ecs 掛載nas 傳輸過(guò)去, 也可以采用如下簡(jiǎn)單函數(shù)傳輸過(guò)去
|-- index.py |-- www注: www目錄下面有 wwwroot 和 app.db
index.py代碼:
# -*- coding: utf-8 -*- import logging import osdef handler(event, context):os.system("mkdir -p /mnt/share/www")os.system("cp -r /code/www/* /mnt/share/www/")os.system("chmod -R 777 /mnt/share/www")print( os.system("ls -ll /mnt/share/www") )return 'ok'基于上述代碼創(chuàng)一個(gè)函數(shù) move-res-nas , 執(zhí)行函數(shù),將相關(guān)靜態(tài)和共享資源移動(dòng)到 NAS 的/mnt/share/www/ 目錄。
3. 創(chuàng)建入口函數(shù) blog (使用上一步驟中的 code.zip ), 給函數(shù)設(shè)置 http trigger ,類型為 anonymous , 類型都選上。
4. 給函數(shù)入口配置自定義域名(操作過(guò)程請(qǐng)參考:綁定自定義域名示例), 具體配置假設(shè)如下:
注意: 綁定自定義域名之后,不用使用控制臺(tái)來(lái)進(jìn)行調(diào)試,就只能使用瀏覽器來(lái)觸發(fā)函數(shù),日志服務(wù)來(lái)進(jìn)行調(diào)試。
總結(jié)
函數(shù)計(jì)算有如下優(yōu)勢(shì):
- 無(wú)需采購(gòu)和管理服務(wù)器等基礎(chǔ)設(shè)施
- 專注業(yè)務(wù)邏輯的開發(fā)
- 提供日志查詢、性能監(jiān)控、報(bào)警等功能快速排查故障
- 以事件驅(qū)動(dòng)的方式觸發(fā)應(yīng)用響應(yīng)用戶請(qǐng)求
- 毫秒級(jí)別彈性伸縮,快速實(shí)現(xiàn)底層擴(kuò)容以應(yīng)對(duì)峰值壓力
- 按需付費(fèi)。只需為實(shí)際使用的計(jì)算資源付費(fèi),適合有明顯波峰波谷的用戶訪問(wèn)場(chǎng)景
除了上面所列的優(yōu)勢(shì),FC 可以做為 Web Backend,只需要編寫一個(gè)函數(shù)實(shí)現(xiàn)傳統(tǒng) Web 服務(wù)器中的 conf 中的邏輯,就可以將一個(gè)完整的 Web 工程遷移到 FC ,從而從傳統(tǒng)的 Web 網(wǎng)站運(yùn)維,監(jiān)控等繁瑣的事務(wù)中解放出來(lái)。
最后歡迎大家通過(guò)掃碼加入我們用戶群中,搭建過(guò)程中有問(wèn)題或者有其他問(wèn)題可以在群里提出來(lái)。
函數(shù)計(jì)算官網(wǎng)釘釘客戶群(11721331)。
總結(jié)
以上是生活随笔為你收集整理的十分钟上线-基于函数计算开发 Restful web api asp.net core web app的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 学习笔记(4.8)
- 下一篇: gcd的二进制优化笔记