<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Jackyfei

      使用Dapr和.NET 6.0進行微服務實戰:Dapr簡介

      大家好,我是張飛洪,感謝您的閱讀,我會不定期和你分享學習心得,希望我的文章能成為你成長路上的墊腳石,讓我們一起精進。

      本文是《使用Dapr和.NET 6.0進行微服務實戰》的第2篇Dapr簡介部分,大致包括:了解Dapr,探索Dapr核心組件,設置Dapr環境,構建Dapr簡單示例,閑話不說,我們開始系列旅程吧。

      導讀

      Dapr全稱Distributed Application Runtime,翻譯過來就是分布式應用程序運行時,在v1.0發布后得到了極大的發展。

      本章將向您介紹Dapr架構的核心概念,為您使用Dapr進行開發做好預熱和準備工作。

      可以這么說,Dapr加速了新的云原生應用的開發,并簡化了微服務架構的運用。

      在本章中,我們將討論以下主題:

      • 簡單了解Dapr
      • 探索Dapr核心組件
      • 設置Dapr環境
      • 構建Dapr示例

      這些主題是后續使用Dapr和微服務架構的基礎和理論指導。首先,我們進入開篇的第一步,從Dapr的工作原理開始。

      1.簡單了解Dapr

      Dapr是一個事件驅動的、可移植的運行時,由Microsoft使用開源方法創建的,由云原生計算基金會(CNCF)孵化的項目。

      事件驅動(Dapr的定義中強調了這一點)在微服務中扮演著重要的角色;對來自外部系統或第三方的事件作出的反應,同時可以向其他服務轉發新的事件。

      Dapr是可移植的,它有三種托管模式。首先它可以在本地機器上自托管,也可以部署到邊緣,或者在Kubernetes上運行。

      下圖顯示了Dapr提供的許多構建塊:

      從上圖可以看出,Dapr先要運行在微軟Azure、亞馬遜(AWS)、谷歌云或國內阿里,華為云上都是沒問題的。

      Dapr建立在微軟開發超大規模云原生應用的經驗基礎上。它的靈感來自Orleans和Service Fabric(服務網格),同時又反哺微軟云的大規模運用。

      1.1Dapr簡史

      Dapr于2019年10月首次發布,您可以在這里上了解到。

      Dapr在2020年9月,在初始開發階段采用了開放式治理模式;請參見下面的描述.

      Dapr于2021年2月發布了面向生產環境的v1.0版本,請參看這里。2021年11月,Dapr作為孵化項目加入CNCF;請參閱公告

      Dapr為開發人員提供了一種面向微服務架構的設計工具和運行時,以便更好地運行我們的應用。

      微服務提供了面向高可用,高并發等一系列的好處,但是同時帶來了響應的復雜行,比如熔斷限流,服務調用監控,負載均衡等,通常會給開發團隊帶來沉重的負擔。

      而Dapr運行時剛好可以幫助我們簡化以上復雜性操作,我們看看具體如何操作:


      (圖1.2)
      如圖1.2所示,它顯示了兩種Dapr托管模式:Dapr運行時在邊車(sidecar)進程中運行,將應用的大部分復雜性提升到一個單獨的環境中,這大大簡化了開發和操作。這些sidecar進程在您的開發環境的本地運行,或者在Kubernetes的Pod的容器中運行。

      從應用程序的角度來看,Dapr是一種應用編程接口(API),可以通過超文本傳輸協議(HTTP)、遠程過程調用(gRPC)直接訪問,或者更簡單地說,可以通過適用于.NET、Java、Go、Python、PHP、JavaScript、C++和Rust語言的任何軟件開發工具包(SDK)直接訪問。

      當然,你也可以不必采用Dapr SDK(稍后將體驗到),對Dapr服務的請求可以像對HTTP調用一樣簡單,例如:http://localhost:3500/v1.0/invoke//method/。如果您通過Dapr SDK與Dapr交互,或者使用Actor SDK利用Dapr Actor模型,那么使用SDK確實會帶來許多好處。

      您可以在Dapr文檔中了解有關SDK和支持的語言的更多信息,網址

      我們已經了解了Dapr的架構,知道Dapr是什么了,接下來我們要澄清下Dapr不是什么了。

      1.2Dapr不是什么

      我們從正面了解到了Dapr,也許你對此頗感興趣,但是我覺得很有必要全面了解Dapr,我們需要介紹一下Dapr不是什么。這使有利我們消除對Dapr產生的誤解,如下所示:

      • Dapr不會強迫開發人員接受具有嚴格規則和約束的編程模型。相反,雖然Dapr把開發人員從微服務架構的復雜性中解放出來,但開發人員并沒有被規定要如何編寫應用程序。例如,對存儲狀態的數據庫的連接的管理是Dapr的責任(后續的狀態管理會看到),當它對微服務應用是透明的。

      • Dapr不是服務網格。雖然Dapr和服務網格可以找到許多相似之處,但Dapr是在應用級別提供能力,而服務網格在基礎架構上運行。如果出現沖突或間歇性問題,開發人員有權決定如何處理Dapr可能返回的錯誤;無論是采用Dapr的重試策略,還是向客戶端返回錯誤,或者補償操作,這些都是只有開發人員才有權限做出決定。

      Dapr旨在與Istio等服務網格集成,這超出了本專欄的范圍。

      • Dapr不是Microsoft云服務。它確實幫助開發人員在云中構建微服務應用程序,它當然提供了許多與Azure云服務的集成,但它也為AWS、GCP和其他服務提供了同樣多的組件。同時,Azure在具有本機擴展的Azure Kubernetes Service(AKS)、具有Dapr策略的Azure API管理以及具有Dapr本機集成的Azure容器應用程序中確實為Dapr提供了豐富的支持。

      • Dapr不是一種僅限.NET的技術。Dapr本身是用Go語言編寫的,任何語言都可以利用它。我們可以使用多種語言的SDK,但也可以選擇直接與Dapr API交互,而無需任何額外的SDK庫。

      注意事項
      雖然本專欄偏向.NET,但作為示例,我也會演示Dapr和Python的使用關系。

      希望以上介紹能讓你對Dapr的了解會更加全面、客觀,并為你是否采用這項技術提供選項幫助。接下來,我們將專門介紹Dapr的體系結構。

      2.探索Dapr核心組件

      Dapr從一開始就被設計為一組可插拔的構建塊,開發人員可以依賴該構建塊或叫基礎設施進行開發,而運維人員可以通過簡單地配置就可以讓使應用適配其托管環境。

      以下是Dapr工具和組件的完整列表:

      • Dapr命令行工具(CLI):用于配置、管理和監視Dapr環境的跨平臺命令行工具。它也是用于本地調試Dapr應用的工具。
      • Dapr Helm Charts:提供了在Kubernetes環境中安裝和更新Dapr的手段。
      • Dapr API:定義應用如何與Dapr運行時交互,使用其構建塊的API。
      • Dapr runtime:這是實現Dapr API的核心。如果您很好奇,可以在Dapr的存儲庫中查看它是如何開發的.
      • Dapr host:在開發機器上,主機作為獨立進程運行;在Kubernetes中,它是應用pod中的一個sidecar容器。
      • Dapr operator:針對Kubernetes模式,該operator用于管理綁定和配置。
      • Dapr sidecar injector(邊車注入):一旦在Kubernetes下配置了該服務,它會將Dapr sidecar注入到應用程序的pod中。
      • Dapr placement service:該服務的目的是在Dapr pod中分發(或放置)Actor實例。
      • Dapr Sentry(哨兵):一個內置的證書頒發機構(CA),用于頒發和管理Dapr使用的證書,以提供透明的互傳輸層安全(mTLS)。

      截至目前v1.9版本,Dapr提供了九大構建塊(building blocks),微服務開發人員可以根據需求選擇性地采用這些構建塊,具體如下:

      1. 服務調用(Service invocation):服務調用使我們能夠調用位于同一宿主環境中的其他服務,同時處理重試策略。在第4章“服務調用”中會更詳細地介紹了這個構建塊。
      2. 狀態管理(State management):為了將應用狀態作為一個簡單的鍵值對進行有效管理。Dapr提供了許多狀態存儲,包括Redis、Azure Cosmos DB、Azure SQL Server和PostgreSQL,它們可以通過配置插入。在第5章的“狀態管理簡介”中會詳細探討。
      3. 消息的發布和訂閱(pub/sub):pub/sub模式通過交換消息實現微服務之間的解耦通信,服務總線可以在生產者和消費者之間路由消息。在第6章的“發布和訂閱”中會詳細討論該構建塊。
      4. 資源綁定(Resource bindings):這就是Dapr的事件驅動特性所在。通過綁定,您的應用程序可以通過SMS進行觸發(這只是通信API領域的流行服務之一)。第7章“資源綁定”中會更詳細地介紹這個構建塊。
      5. 參與者(Actors):Actors模式可以理解為單線程模型,旨在通過在大量計算單元(Actors)之間分配總請求量的負載來簡化高并發場景,這些計算單元通過一次處理一個Actors的請求,在較小但獨立的范圍內處理任務。在第8章“使用Actors”中會詳聊該構建塊。
      6. 可觀察性:Dapr使開發人員和運維員能夠觀察應用和服務的行為,而無需對它們進行檢測。第11章“跟蹤Dapr應用”中會更詳細地介紹了這個構建塊。
      7. 安全密鑰(Secrets):將安全與代碼分開是一種良性的做法。Dapr能夠存儲密鑰,并從Kubernetes或Azure密鑰庫等其他組件中引用這些密鑰。
      8. 配置(Configuration):在Alpha狀態的Dapr 1.8版中引入了此構建塊,它解決了檢索應用程序所需配置數據的常見需求。
      9. 分布式鎖(Distributed lock:):Dapr 1.8版在Alpha狀態下引入分布式鎖,它提供了一種強大的基于租約的機制來管理對命名鎖的互斥訪問。應用程序可以使用該鎖來確保多個并發實例對資源的獨占。
        了解了Dapr體系結構和組件后,在開始使用之前,我們需要在我們的開發環境中設置Dapr。

      3.設置Dapr環境

      Dapr是多個平臺和語言的運行時,本專欄的重點是.NET中的C#,并使用Visual Studio Code作為開發工具。
      我們使用的開發環境是Windows,如果你需要有關在Linux或macOS上執行特定操作,建議您查看Dapr官方文檔

      Dapr路線圖

      Dapr運行時于2021年2月發布v1.0生產環境版本,我們可以在Dapr官方博客中查看到,Dapr于2021年發布了五個新的次要版本。您可以在Dapr路線圖中查看。

      本專欄中的示例和腳本已經用Dapr的v1.9進行了更新和測試。

      接下來,我們將完成以下步驟:

      • 配置Docker
      • 安裝Dapr CLI
      • 安裝.NET 6.0
      • 安裝VS Code
      • 安裝Windows終端
      • 在自托管模式下安裝Dapr
      • 在Kubernetes上安裝Dapr

      配置Docker

      Docker的安裝很簡單,我們可以在以下位置找到運行Docker的詳細說明。

      安裝Dapr CLI

      Dapr運行時安裝也不難,您可以在此訪問安裝。

      在Windows上,執行以下命令將CLI安裝到c:\dapr目錄中,并將其添加到用戶PATH環境變量中,以便可以從命令行輕松使用工具:
      powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"
      有關Dapr CLI的更多詳細信息,請參閱

      安裝.NET 6.0

      要安裝.NET 6,請參閱,獲取最新二進制文件的鏈接。
      .NET 6是.NET的長期支持(LTS)版本,可獲得3年免費支持和更新。
      在開發機器上,建議安裝包含運行時的完整版SDK。安裝完成后,我們運行dotnet--info命令進行校驗,成功后,您將看到以下輸出:

      安裝VS Code

      VS Code是微軟的一個很棒的跨平臺源碼編輯器。您可以按照以下說明免費安裝它:跳轉

      Dapr擴展

      Dapr有一個VS Code的擴展,它有助于導航Dapr本地環境,并簡化調試配置,我們強烈建議安裝它。

      安裝Windows終端

      推薦一款不錯的新的Windows終端Windows Terminal,是一款新式、快速、高效、強大且高效的終端應用程序,適用于命令行工具和命令提示符,PowerShell和 WSL 等 Shell 用戶。在接下來的章節中,我們通常必須并行運行多個命令和工具。因此,Windows終端的選項卡功能也是我建議您采用它的原因之一。

      在自托管模式下安裝Dapr

      Dapr可以以兩種模式初始化:自托管和Kubernetes。

      由于打算用于開發環境,所以這里采用自托管模式,執行Dapr init后,會在本地會默認安裝Redis、Dapr placement services和Zipkin。

      這里要留意的是Dapr init命令,建議在網絡比較好的早晨進行初始化,如果是下午或者晚上,可能會無法成功。

      默認情況下,Dapr二進制文件和默認組件位于%USERPROFILE%.dpr\文件夾中。

      例如,在本地開發環境中,Dapr打算用于Redis的端口可能已經被占用。在這種情況下,您應該確定哪些進程或容器正在使用該端口,并相應地更改它們。

      一旦啟動init命令成功,您會看到如下輸出:

      PS C:\Repos\practical-dapr\chapter01> dapr init
      Making the jump to hyperspace...
      Installing runtime version 1.8.4
      Downloading binaries and setting up components...
      Downloaded binaries and completed components set up.
      daprd binary has been installed to C:\Users\dabedin\.dapr\bin.
      dapr_placement container is running.
      dapr_redis container is running.
      dapr_zipkin container is running.
      Use `docker ps` to check running containers.
      Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started
      

      我們可以通過docker ps來驗證一下是否成功:

      PS C:\Repos\practical-dapr\chapter01> docker ps --format "{{.
      Image}} - {{.Ports}} - {{.Names}}"
      daprio/dapr:1.8.4 - 0.0.0.0:6050->50005/tcp, :::6050->50005/tcp
      - dapr_placement
      openzipkin/zipkin - 9410/tcp, 0.0.0.0:9411->9411/tcp, :::9411-
      >9411/tcp - dapr_zipkin
      redis - 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp - dapr_redis
      

      下面是在Linux下的驗證:

      在Kubernetes上安裝Dapr

      Dapr專門用于在Kubernetes上執行。在安裝了Dapr CLI的開發機器上,可以在Kubernetes集群上設置Dapr:
      dapr init -k
      或者,您可以使用Helm v3 chart在Kubernetes上安裝Dapr。您可以在官網上查看詳情。

      要驗證k8s當中的安裝是否成功完成,請執行以下命令
      kubectl get pods --namespace dapr-system
      Linux下的效果是這樣的:

      更新Dapr版本

      在開發環境是Windows的機器上,Dapr的早期版本已經存在,只需使用我們在上面提到的命令重新安裝即可更新CLI。
      官網文檔所述,我們必須先卸載Dapr,如下所示:
      PS C:\Repos\practical-dapr\chapter01> dapr uninstall --all
      更新CLI并卸載Dapr后,我們可以按如下方式重新安裝Dapr:
      PS C:\Repos\practical-dapr\chapter01> dapr init

      切記在早上網絡好一點的時候進行初始化,具體原因您懂的。

      在執行dapr-init之后,檢查dapr版本,我們可以看到CLI和運行時的版本都從1.0向前移動到1.9.5,如以下代碼片段所示:

      PS C:\Repos\practical-dapr\chapter01> dapr --version
      CLI version:  1.9.1 
      Runtime version: 1.9.5
      

      我們的Dapr測試環境已啟動并正在運行。我們現在準備用我們的第一個示例進行試驗。

      4.構建Dapr示例

      我們將構建一個返回hello world消息的web API。我們選擇將所有樣本都放在C:\Repos\pactual dapr\文件夾中,并為第一個樣本創建了C:\Repos\Pactual dapr_chapter01文件夾。我們的步驟如下:
      (1)創建Web API ASP.NET項目

      PS C:\Repos\practical-dapr\chapter01> dotnet new webapi -o dapr.microservice.webapi
      

      (2)添加Dapr SDK引用

      PS C:\Repos\practical-dapr\chapter01> dotnet add package Dapr.AspNetCore --version 1.9.5
      

      (3)我們用Vs Code打開項目,并對生成的模板做些更改
      (4)為了在ASP.NET 6中支持Dapr,我們對Program.cs中的代碼進行了一些更改。我們將builder.Services.AddControllers方法更改為builder.Services.addController().AddDapr()。
      最后,為了簡化代碼,我們注釋掉app.UseHttpsRedirection()中間件。
      最后看下最終的代碼:

      
      var builder = WebApplication.CreateBuilder(args);
      // Add services to the container.
      builder.Services.AddControllers().AddDapr();
      // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
      builder.Services.AddEndpointsApiExplorer();
      builder.Services.AddSwaggerGen();
      var app = builder.Build();
      // Configure the HTTP request pipeline.
      if (app.Environment.IsDevelopment())
      {
          app.UseSwagger();
          app.UseSwaggerUI();
      }
      //app.UseHttpsRedirection();
      app.UseAuthorization();
      app.MapControllers();
      app.MapSubscribeHandler();
      app.Run();
      

      (5)最后,我們添加了一個名為HelloWorldController的控制器,如以下代碼片段所示:

      [ApiController]
      [Route("[controller]")]
      public class HelloController : ControllerBase
      {
          private readonly ILogger<HelloController> _logger;
      
          public HelloController(ILogger<HelloController> logger)
          {
              _logger = logger;
          }
      
          [HttpGet()]
          public ActionResult<string> Get()
          {
              Console.WriteLine("Hello, World.");
              return "Hello, World";
          }
      }
      

      以上我們設置了路由和一個Get方法。
      (6)為了運行Dapr應用程序,可以使用以下命令:
      dapr run --app-id <my app id> --app-port <port of the app> --dapr-http-port <port in Dapr> dotnet run
      我們將ASP.NET默認端口設為5000,將Dapr HTTP端口設為5010。以下命令行啟動Dapr應用程序:

      PS C:\Repos\dapr.microservice.webapi> dapr run --app-id hello-world --app-port 5000 --dapr-http-port 5010 dotnet run
      

      我們在對應的項目目錄下執行以上代碼,啟動Dapr。Dapr將為HTTP使用端口5010,而對于gRPC,它將自動選擇一個可用端口。
      啟動后會在控制臺打印日志信息,要確認應用程序在Dapr運行時上下文中正確運行:

      Updating metadata for app command: dotnet run
      You're up and running! Both Dapr and your app logs will
      appear here.
      

      在此階段,ASP.NET在端口5000上進行監聽,Dapr在端口5010上進行監聽。為了測試Dapr,我們按如下方式調用curl命令,使用瀏覽器也可以:

      PS C:\Repos\practical-dapr> curl http://localhost:5010/v1.0/invoke/hello-world/method/hello
      Hello, World
      

      Dapr返回了這個響應,同時Dapr窗口也會打印結果,如下所示

      == APP == Hello, World.
      

      (7)從另一個窗口,讓我們驗證Dapr服務的詳細信息。我們按如下方式打開dapr儀表板,而不是使用dapr list命令
      PS C:\Windows\System32> dapr dashboard Dapr Dashboard running on http://localhost:8080
      我們可以通過導航到http://localhost:8080顯示了hell-world的詳細信息:

      在本例中,Dapr儀表板僅顯示我們在開發機器上運行的示例應用程序。在Kubernetes環境中,它將顯示所有正在運行的微服務以及其他組件:

      Dapr儀表板顯示,部署了Zipkin,Redis,Redis除了做狀態存儲,還支持消息的發布訂閱。
      以上就是我們構建的第一個Dapr示例。

      5.總結

      在本章,您了解了Dapr項目及其組件、構建塊和sidecar方法。所有這些概念將在后面的章節中單獨深入探討。同時,我們還演示了在本地開發機器上設置Dapr,準備必要的工具。我們還學習了如何創建一個簡單的ASP.NET項目,以及如何配置和檢查Dapr,我們還了解了Dapr儀表板,我們可以從中獲得Dapr環境的完整和即時視圖。
      在下一章中,我們將使用環境來學習如何調試Dapr。

      6.問題

      1. Dapr提供哪些構建塊?
      2. Dapr CLI和Dapr運行時之間的關系是什么?
      3. 如何在本地開發環境中安裝Dapr?
      4. 在Kubernetes中,可以采用哪些方法安裝Dapr?

      7.擴展閱讀

      如果您想提前閱讀Dapr系列文章,請移步,這里會優先發布我的最新成果,歡迎您不吝賜教。

      posted @ 2023-01-18 10:46  張飛洪[廈門]  閱讀(3932)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 亚洲一区二区三区久久受| 无码中文字幕av免费放| 我国产码在线观看av哈哈哈网站| 永清县| 日韩淫片毛片视频免费看| 2021亚洲爆乳无码专区| 性欧美暴力猛交69hd| 久热久热免费在线观视频| 午夜性刺激在线观看| 精品粉嫩国产一区二区三区| 无套内谢少妇毛片在线| 少妇高潮灌满白浆毛片免费看| 亚洲av色综合久久综合| 亚洲AV成人片不卡无码| jlzz大jlzz大全免费| 99精品国产一区二区三区不卡| 久久国产精品乱子乱精品| 国产首页一区二区不卡| 亚洲欧美综合一区二区三区| 国内精品极品久久免费看| 免费午夜无码视频在线观看| 久久夜色精品国产亚洲a| 亚洲区中文字幕日韩精品| 国内揄拍国内精品少妇| 久操热在线视频免费观看| 九九热视频精品在线播放| 郧西县| 性猛交ⅹxxx富婆视频| 亚洲第一区二区快射影院| 国产精品乱一区二区三区| 男女男免费视频网站国产| 无码囯产精品一区二区免费| 天天躁夜夜躁狠狠喷水| 18禁国产一区二区三区| 国产中文字幕精品在线| 清纯唯美人妻少妇第一页| 无码人妻久久久一区二区三区| 青青在线视频一区二区三区| 国产一区在线播放av| 99热精国产这里只有精品| 久热这里只国产精品视频|