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