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

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

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

開篇 很早之前就想做一套案例,介紹.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,大概是這么個東西:

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

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

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

整個應(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)行介紹):

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

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

項目框架結(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):

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

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

  1. API網(wǎng)關(guān) :采用nginx反向代理實現(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實現(xiàn),目前提供“貼紙”的管理功能(簡單地說,就是增刪改查)
  4. Sticker前端應(yīng)用 :使用.NET Blazor WebAssembly實現(xiàn),由nginx容器托管
  5. pgsql數(shù)據(jù)庫 :PostgreSQL數(shù)據(jù)庫,不用多說,API微服務(wù)和Keycloak都依賴它

第一階段我們先實現(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)。

工具和IDE

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

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

從Sticker微服務(wù)開始

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

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

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

總結(jié)

今天做了一個開篇,打算把基于微服務(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/ 。

小編推薦閱讀

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

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

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動

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

相關(guān)視頻攻略

更多

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

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

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

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