您的位置:首頁 > 軟件教程 > 教程 > .NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始

.NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始

來源:好特整理 | 時(shí)間:2024-10-10 10:04:24 | 閱讀:139 |  標(biāo)簽: T Net 項(xiàng)目 開始 應(yīng)用   | 分享到:

開篇 很早之前就想做一套案例,介紹.NET下如何從零開始搭建一個(gè)云原生的應(yīng)用程序。不過這個(gè)話題有點(diǎn)大,會(huì)要包含很多內(nèi)容。我本打算從新建一個(gè)ASP.NET Core Web API應(yīng)用程序開始介紹,但又覺得即便是從零開始,也無法完全涵蓋每一個(gè)步驟細(xì)節(jié),而且很多基礎(chǔ)性的東西其實(shí)并沒有太大的介紹價(jià)值,倒不

開篇

很早之前就想做一套案例,介紹.NET下如何從零開始搭建一個(gè)云原生的應(yīng)用程序。不過這個(gè)話題有點(diǎn)大,會(huì)要包含很多內(nèi)容。我本打算從新建一個(gè)ASP.NET Core Web API應(yīng)用程序開始介紹,但又覺得即便是從零開始,也無法完全涵蓋每一個(gè)步驟細(xì)節(jié),而且很多基礎(chǔ)性的東西其實(shí)并沒有太大的介紹價(jià)值,倒不如就先略過服務(wù)端RESTful API和Blazor WebAssembly的開發(fā)部分,直接研究討論與云原生相關(guān)的內(nèi)容。如需了解ASP.NET Core的基礎(chǔ)和開發(fā)相關(guān)的內(nèi)容,請點(diǎn)擊 【這里】 ;如需了解Blazor WebAssembly客戶端開發(fā),請點(diǎn)擊 【這里】 。

那什么是云原生?如果你問ChatGPT,大概可以得到下面的解釋:

云原生(Cloud Native)是指構(gòu)建和運(yùn)行應(yīng)用程序的方法,這些應(yīng)用程序充分利用了云計(jì)算模型的優(yōu)勢。云原生應(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說的,或許每個(gè)人對云原生概念的理解有所不同,無論如何,這段解釋正好說明了我做這個(gè)案例所要介紹的內(nèi)容:基于ASP.NET Core Web API和Blazor WebAssembly實(shí)現(xiàn)一個(gè)以微服務(wù)架構(gòu)和容器化為基礎(chǔ)的分布式的應(yīng)用程序。在實(shí)踐的過程中,我會(huì)將主要技術(shù)的具體實(shí)現(xiàn)以及相關(guān)細(xì)節(jié)問題介紹清楚,內(nèi)容估計(jì)會(huì)比較多,或許有時(shí)候更新會(huì)比較慢,還望讀者海涵。

說明: 自從.NET 5開始,原則上不應(yīng)繼續(xù)使用.NET Core這個(gè)名稱來指代跨平臺(tái)版本的.NET,.NET 5/6/7/8以及即將發(fā)布的.NET 9,都是跨平臺(tái)的版本。本系列文章中,如不作特殊說明,.NET指代跨平臺(tái)的.NET版本,而不是經(jīng)典的.NET Framework。

案例介紹

本系列文章打算使用“貼紙墻”(Stickers)作為案例進(jìn)行介紹!百N紙”,就是平時(shí)用來記錄今天打算做的事情的小卡片,在上面書寫完后,可以貼在電腦上或者桌子上作為提醒,它很像ToDo List,大概是這么個(gè)東西:

.NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始

我們要開發(fā)的應(yīng)用程序就是實(shí)現(xiàn)這樣的功能:用戶可以增刪改查自己創(chuàng)建的“貼紙”,為了讓需求足夠簡單以便更高效地討論技術(shù),我們不考慮每個(gè)貼紙的布局,也不考慮給貼紙進(jìn)行顏色分類,所以,從用戶的角度,大概就是這樣的效果:

.NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始

整個(gè)應(yīng)用的業(yè)務(wù)很簡單,就是對于貼紙對象的增刪改查,然后維護(hù)一下當(dāng)前登錄賬戶的信息。正如本文一開始提到的那樣,這個(gè)系列文章不會(huì)從頭開始介紹代碼級別的編程細(xì)節(jié),而是介紹.NET云原生應(yīng)用實(shí)踐的各個(gè)方面,所以每篇文章的內(nèi)容也會(huì)相對獨(dú)立,文章之間不一定會(huì)連貫,但希望通過這個(gè)系列,能夠把.NET云原生的相關(guān)內(nèi)容都覆蓋到。

所需知識(shí)

閱讀本系列文章,你需要一定的C#編程基礎(chǔ)和一些面向?qū)ο蠛图軜?gòu)設(shè)計(jì)的思想,在介紹案例的過程中,我會(huì)對一些現(xiàn)實(shí)問題進(jìn)行分析并從設(shè)計(jì)層面提供一些思路,然后一步步地實(shí)現(xiàn)這種設(shè)計(jì)。通過閱讀,你可以了解這些現(xiàn)實(shí)問題的解決過程,相信會(huì)給你帶來一定的收獲?偨Y(jié)起來,所需知識(shí)結(jié)構(gòu)如下(或者說將會(huì)涵蓋如下相關(guān)的內(nèi)容,排名不分先后,后續(xù)文章也不一定會(huì)按這個(gè)順序進(jìn)行介紹):

  • C#編程基礎(chǔ)
  • 面向?qū)ο蠓治雠c設(shè)計(jì)(以及某些設(shè)計(jì)模式)
  • ASP.NET Core Web API基礎(chǔ)
  • Blazor WebAssembly基礎(chǔ)
  • 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)初步概念
  • SaaS與多租戶基本概念
  • 分層架構(gòu)與微服務(wù)架構(gòu)
  • 關(guān)系型數(shù)據(jù)庫基礎(chǔ)
  • nginx與反向代理
  • Docker與應(yīng)用程序容器化
  • 基于Docker Compose的編譯和部署
  • .NET Aspire初步
  • Kubernetes初步
  • DevOps相關(guān)基礎(chǔ)知識(shí)
  • Azure DevOps以及Azure云端部署
  • ElasticSearch基礎(chǔ)知識(shí)(擴(kuò)展)
  • 大語言模型的應(yīng)用(擴(kuò)展)

P.S.:最后兩個(gè)擴(kuò)展話題會(huì)在實(shí)現(xiàn)完整個(gè)應(yīng)用程序的基本功能后進(jìn)行補(bǔ)充拓展,在前期暫不牽涉過多相關(guān)內(nèi)容。接下來,我們就從搭建項(xiàng)目框架結(jié)構(gòu)開始。

項(xiàng)目框架結(jié)構(gòu)搭建

在做PPT或者使用文字編輯軟件來撰寫文章,第一步要做的事情并不是直接從文章正文開始寫,而是先把整篇文章的提綱結(jié)構(gòu)定好,然后在文字編輯軟件中對字體和段落樣式進(jìn)行設(shè)置,以便針對不同的文章組成部分可以很方便地應(yīng)用不同的樣式,這樣不僅在樣式查找和處理時(shí)可以做到事半功倍,而且整篇文章的結(jié)構(gòu)排版都會(huì)非常清晰。軟件項(xiàng)目開發(fā)也是如此,在理解了需要干什么之后,第一步就是思考如何搭建整個(gè)框架結(jié)構(gòu)(也就是所謂的“腳手架”)。根據(jù)上文的案例設(shè)定,我們的項(xiàng)目大致會(huì)有如下的拓?fù)浣Y(jié)構(gòu):

.NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始

整體上看,整個(gè)分布式應(yīng)用程序會(huì)包含5個(gè)docker容器,這些容器使用不同的技術(shù)實(shí)現(xiàn)了應(yīng)用程序的不同部分,具體地說:

  1. API網(wǎng)關(guān) :采用nginx反向代理實(shí)現(xiàn)的API網(wǎng)關(guān),客戶端(瀏覽器)通過API網(wǎng)關(guān)訪問后端API微服務(wù)和前端資源
  2. Keycloak :Stickers應(yīng)用程序的認(rèn)證和授權(quán)機(jī)構(gòu),為應(yīng)用程序提供認(rèn)證授權(quán)服務(wù)
  3. Sticker微服務(wù) :后端API服務(wù),使用ASP.NET Core Web API實(shí)現(xiàn),目前提供“貼紙”的管理功能(簡單地說,就是增刪改查)
  4. Sticker前端應(yīng)用 :使用.NET Blazor WebAssembly實(shí)現(xiàn),由nginx容器托管
  5. pgsql數(shù)據(jù)庫 :PostgreSQL數(shù)據(jù)庫,不用多說,API微服務(wù)和Keycloak都依賴它

第一階段我們先實(shí)現(xiàn)上面的這些內(nèi)容,后續(xù)隨著功能的擴(kuò)展,我們會(huì)討論更多的東西,比如消息隊(duì)列、緩存、微服務(wù)治理、微服務(wù)通信、分布式事務(wù)等等

如果是開發(fā)一個(gè)實(shí)際的產(chǎn)品項(xiàng)目,團(tuán)隊(duì)可以考慮在一定的設(shè)計(jì)規(guī)約基礎(chǔ)上,不同的人同時(shí)工作在不同的微服務(wù)上,這也是微服務(wù)架構(gòu)帶來的優(yōu)勢之一,它允許擅長不同技術(shù)的團(tuán)隊(duì)成員在異構(gòu)的技術(shù)體系下協(xié)同工作。但目前我是在做案例,所以,我還是會(huì)一步步進(jìn)行下去,首先第一步就是實(shí)現(xiàn)Sticker微服務(wù),它是一個(gè)后端服務(wù),暫時(shí)僅提供“貼紙”的管理功能,然后再接入Keycloak完成登錄用戶的認(rèn)證和資源訪問的授權(quán)。

工具和IDE

在開始這個(gè)案例的介紹和演練之前,請確保開發(fā)機(jī)器上已經(jīng)安裝如下工具和IDE:

  • .NET 8 SDK
  • Visual Studio 2022,如果在Linux下開發(fā),可以使用Visual Studio Code搭配微軟官方的C#插件,也可以選擇使用JetBrains Rider IDE,不過這個(gè)是收費(fèi)的
  • Docker和Docker Compose

從Sticker微服務(wù)開始

現(xiàn)在開始創(chuàng)建我們的代碼項(xiàng)目,首先新建一個(gè)文件夾:

$ mkdir stickers

然后,在這個(gè)文件夾下,新建 src 文件夾,用來保存所有的開發(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è)子目錄下,包含了我們接下來會(huì)對之進(jìn)行編輯修改的Sticker微服務(wù)的代碼,F(xiàn)在,進(jìn)入 Stickers.WebApi 子目錄,然后執(zhí)行 dotnet run 命令,你會(huì)看到類似下面的輸出:

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頁面:

.NET云原生應(yīng)用實(shí)踐(一):從搭建項(xiàng)目框架結(jié)構(gòu)開始

只不過目前只有一個(gè)默認(rèn)的由ASP.NET Core Web API模板自帶的 GET /WeatherForecast API,但項(xiàng)目是已經(jīng)創(chuàng)建成功了。從下一篇文章開始,我們就開始開發(fā)Stickers微服務(wù)。

總結(jié)

今天做了一個(gè)開篇,打算把基于微服務(wù)架構(gòu)的.NET云原生應(yīng)用程序的開發(fā)做個(gè)系列介紹一下,也不知道是不是會(huì)有讀者有興趣去了解這部分內(nèi)容,如果有好的建議,歡迎留言。

源代碼

一如既往以MIT許可協(xié)議開源,為方便國內(nèi)讀者,代碼托管到碼云,代碼庫為: https://gitee.com/daxnet/stickers ,每個(gè)章節(jié)的代碼都會(huì)放在以“chapter_XXX”為名的分支下,所以,本章代碼在這里: https://gitee.com/daxnet/stickers/tree/chapter_1/

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

項(xiàng)目 1.0.2.24
項(xiàng)目 1.0.2.24
類型:休閑益智  運(yùn)營狀態(tài):正式運(yùn)營  語言: 英文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《項(xiàng)目》(.projekt)是游戲商StampedeGames制作的一款新型簡約益智游戲。.projekt要求你以不同的方式看

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)