開篇 很早之前就想做一套案例,介紹.NET下如何從零開始搭建一個云原生的應(yīng)用程序。不過這個話題有點大,會要包含很多內(nèi)容。我本打算從新建一個ASP.NET Core Web API應(yīng)用程序開始介紹,但又覺得即便是從零開始,也無法完全涵蓋每一個步驟細(xì)節(jié),而且很多基礎(chǔ)性的東西其實并沒有太大的介紹價值,倒不
很早之前就想做一套案例,介紹.NET下如何從零開始搭建一個云原生的應(yīng)用程序。不過這個話題有點大,會要包含很多內(nèi)容。我本打算從新建一個ASP.NET Core Web API應(yīng)用程序開始介紹,但又覺得即便是從零開始,也無法完全涵蓋每一個步驟細(xì)節(jié),而且很多基礎(chǔ)性的東西其實并沒有太大的介紹價值,倒不如就先略過服務(wù)端RESTful API和Blazor WebAssembly的開發(fā)部分,直接研究討論與云原生相關(guān)的內(nèi)容。如需了解ASP.NET Core的基礎(chǔ)和開發(fā)相關(guān)的內(nèi)容,請點擊 【這里】 ;如需了解Blazor WebAssembly客戶端開發(fā),請點擊 【這里】 。
那什么是云原生?如果你問ChatGPT,大概可以得到下面的解釋:
云原生(Cloud Native)是指構(gòu)建和運行應(yīng)用程序的方法,這些應(yīng)用程序充分利用了云計算模型的優(yōu)勢。云原生應(yīng)用程序通常設(shè)計為在現(xiàn)代云環(huán)境中高效運行,具有以下特點:
容器化 :應(yīng)用程序和服務(wù)被打包在容器中,這提供了隔離、快速啟動和一致性。
微服務(wù) :應(yīng)用程序被分解為小的、獨立的服務(wù),每個服務(wù)執(zhí)行單一的業(yè)務(wù)功能。
動態(tài)管理 :使用容器編排工具(如Kubernetes)動態(tài)地管理容器的生命周期。
持續(xù)交付 :自動化部署流程,以實現(xiàn)頻繁和可靠的代碼發(fā)布。
云原生應(yīng)用程序旨在在云環(huán)境中實現(xiàn)彈性、可伸縮性、可維護(hù)性和快速迭代。
嗯,不錯,這是ChatGPT說的,或許每個人對云原生概念的理解有所不同,無論如何,這段解釋正好說明了我做這個案例所要介紹的內(nèi)容:基于ASP.NET Core Web API和Blazor WebAssembly實現(xiàn)一個以微服務(wù)架構(gòu)和容器化為基礎(chǔ)的分布式的應(yīng)用程序。在實踐的過程中,我會將主要技術(shù)的具體實現(xiàn)以及相關(guān)細(xì)節(jié)問題介紹清楚,內(nèi)容估計會比較多,或許有時候更新會比較慢,還望讀者海涵。
說明: 自從.NET 5開始,原則上不應(yīng)繼續(xù)使用.NET Core這個名稱來指代跨平臺版本的.NET,.NET 5/6/7/8以及即將發(fā)布的.NET 9,都是跨平臺的版本。本系列文章中,如不作特殊說明,.NET指代跨平臺的.NET版本,而不是經(jīng)典的.NET Framework。
本系列文章打算使用“貼紙墻”(Stickers)作為案例進(jìn)行介紹!百N紙”,就是平時用來記錄今天打算做的事情的小卡片,在上面書寫完后,可以貼在電腦上或者桌子上作為提醒,它很像ToDo List,大概是這么個東西:
我們要開發(fā)的應(yīng)用程序就是實現(xiàn)這樣的功能:用戶可以增刪改查自己創(chuàng)建的“貼紙”,為了讓需求足夠簡單以便更高效地討論技術(shù),我們不考慮每個貼紙的布局,也不考慮給貼紙進(jìn)行顏色分類,所以,從用戶的角度,大概就是這樣的效果:
整個應(yīng)用的業(yè)務(wù)很簡單,就是對于貼紙對象的增刪改查,然后維護(hù)一下當(dāng)前登錄賬戶的信息。正如本文一開始提到的那樣,這個系列文章不會從頭開始介紹代碼級別的編程細(xì)節(jié),而是介紹.NET云原生應(yīng)用實踐的各個方面,所以每篇文章的內(nèi)容也會相對獨立,文章之間不一定會連貫,但希望通過這個系列,能夠把.NET云原生的相關(guān)內(nèi)容都覆蓋到。
閱讀本系列文章,你需要一定的C#編程基礎(chǔ)和一些面向?qū)ο蠛图軜?gòu)設(shè)計的思想,在介紹案例的過程中,我會對一些現(xiàn)實問題進(jìn)行分析并從設(shè)計層面提供一些思路,然后一步步地實現(xiàn)這種設(shè)計。通過閱讀,你可以了解這些現(xiàn)實問題的解決過程,相信會給你帶來一定的收獲?偨Y(jié)起來,所需知識結(jié)構(gòu)如下(或者說將會涵蓋如下相關(guān)的內(nèi)容,排名不分先后,后續(xù)文章也不一定會按這個順序進(jìn)行介紹):
P.S.:最后兩個擴(kuò)展話題會在實現(xiàn)完整個應(yīng)用程序的基本功能后進(jìn)行補(bǔ)充拓展,在前期暫不牽涉過多相關(guān)內(nèi)容。接下來,我們就從搭建項目框架結(jié)構(gòu)開始。
在做PPT或者使用文字編輯軟件來撰寫文章,第一步要做的事情并不是直接從文章正文開始寫,而是先把整篇文章的提綱結(jié)構(gòu)定好,然后在文字編輯軟件中對字體和段落樣式進(jìn)行設(shè)置,以便針對不同的文章組成部分可以很方便地應(yīng)用不同的樣式,這樣不僅在樣式查找和處理時可以做到事半功倍,而且整篇文章的結(jié)構(gòu)排版都會非常清晰。軟件項目開發(fā)也是如此,在理解了需要干什么之后,第一步就是思考如何搭建整個框架結(jié)構(gòu)(也就是所謂的“腳手架”)。根據(jù)上文的案例設(shè)定,我們的項目大致會有如下的拓?fù)浣Y(jié)構(gòu):
整體上看,整個分布式應(yīng)用程序會包含5個docker容器,這些容器使用不同的技術(shù)實現(xiàn)了應(yīng)用程序的不同部分,具體地說:
第一階段我們先實現(xiàn)上面的這些內(nèi)容,后續(xù)隨著功能的擴(kuò)展,我們會討論更多的東西,比如消息隊列、緩存、微服務(wù)治理、微服務(wù)通信、分布式事務(wù)等等
如果是開發(fā)一個實際的產(chǎn)品項目,團(tuán)隊可以考慮在一定的設(shè)計規(guī)約基礎(chǔ)上,不同的人同時工作在不同的微服務(wù)上,這也是微服務(wù)架構(gòu)帶來的優(yōu)勢之一,它允許擅長不同技術(shù)的團(tuán)隊成員在異構(gòu)的技術(shù)體系下協(xié)同工作。但目前我是在做案例,所以,我還是會一步步進(jìn)行下去,首先第一步就是實現(xiàn)Sticker微服務(wù),它是一個后端服務(wù),暫時僅提供“貼紙”的管理功能,然后再接入Keycloak完成登錄用戶的認(rèn)證和資源訪問的授權(quán)。
在開始這個案例的介紹和演練之前,請確保開發(fā)機(jī)器上已經(jīng)安裝如下工具和IDE:
現(xiàn)在開始創(chuàng)建我們的代碼項目,首先新建一個文件夾:
$ mkdir stickers
然后,在這個文件夾下,新建
src
文件夾,用來保存所有的開發(fā)代碼文件:
$ cd stickers
$ mkdir src
進(jìn)入
src
文件夾,新建一個.NET solution(解決方案)文件,然后,創(chuàng)建一個ASP.NET Core Web API項目,并將這個項目加入到新建的solution下:
$ cd src
$ dotnet new sln -n stickers
$ dotnet new webapi -n Stickers.WebApi --no-https --use-controllers
$ dotnet sln stickers.sln add Stickers.WebApi/Stickers.WebApi.csproj
于是,你將在
src
目錄下得到一個
stickers.sln
的解決方案文件,以及一個
Stickers.WebApi
的子目錄,在這個子目錄下,包含了我們接下來會對之進(jìn)行編輯修改的Sticker微服務(wù)的代碼,F(xiàn)在,進(jìn)入
Stickers.WebApi
子目錄,然后執(zhí)行
dotnet run
命令,你會看到類似下面的輸出:
daxnet@daxnet-HP-ZBook:~/Projects/stickers/src/Stickers.WebApi$ dotnet run
Building...
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5141
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: /home/daxnet/Projects/stickers/src/Stickers.WebApi
打開瀏覽器,訪問http://localhost:5141/swagger/index.html(注意,端口有可能不同,以上面的輸出結(jié)果為準(zhǔn)),就可以看到API服務(wù)的Swagger頁面:
只不過目前只有一個默認(rèn)的由ASP.NET Core Web API模板自帶的
GET /WeatherForecast
API,但項目是已經(jīng)創(chuàng)建成功了。從下一篇文章開始,我們就開始開發(fā)Stickers微服務(wù)。
今天做了一個開篇,打算把基于微服務(wù)架構(gòu)的.NET云原生應(yīng)用程序的開發(fā)做個系列介紹一下,也不知道是不是會有讀者有興趣去了解這部分內(nèi)容,如果有好的建議,歡迎留言。
一如既往以MIT許可協(xié)議開源,為方便國內(nèi)讀者,代碼托管到碼云,代碼庫為: https://gitee.com/daxnet/stickers ,每個章節(jié)的代碼都會放在以“chapter_XXX”為名的分支下,所以,本章代碼在這里: https://gitee.com/daxnet/stickers/tree/chapter_1/ 。
如何使用 Pytorch 中的 DataSet 和 DataLoader
閱讀golang slice相關(guān)常見的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國產(chǎn)操作系統(tǒng)上實現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時相柵格文件
閱讀多租戶系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計與RuoYi系統(tǒng)的借鑒
閱讀count(*)、count(1)哪個更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計到部署交付各階段說明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2024 haote.com 好特網(wǎng)