日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用 Tye 辅助开发 k8s 应用竟如此简单(五)

發(fā)布時(shí)間:2023/12/4 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Tye 辅助开发 k8s 应用竟如此简单(五) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用 Tye 輔助開發(fā) k8s 應(yīng)用竟如此簡(jiǎn)單(一)

使用 Tye 輔助開發(fā) k8s 應(yīng)用竟如此簡(jiǎn)單(二)

使用 Tye 輔助開發(fā) k8s 應(yīng)用竟如此簡(jiǎn)單(三)

使用 Tye 輔助開發(fā) k8s 應(yīng)用竟如此簡(jiǎn)單(四)

續(xù)上篇,這篇我們來進(jìn)一步探索 Tye 更多的使用方法。本篇我們來了解一下如何在 Tye 中實(shí)現(xiàn)對(duì)分布式鏈路追蹤。

我是誰?我在哪兒?我咋了?

分布式系統(tǒng)紛繁復(fù)雜,特別以現(xiàn)在微服務(wù)架構(gòu)的出現(xiàn),使得應(yīng)用系統(tǒng)中的應(yīng)用實(shí)例變得更加多變難以捉摸。

那么如何在如此繁雜的系統(tǒng)中找到一條業(yè)務(wù)調(diào)用鏈的上下游關(guān)系、性能細(xì)節(jié)、業(yè)務(wù)數(shù)據(jù)等等成為了一項(xiàng)開發(fā)者必然要面對(duì)的挑戰(zhàn)。

使用分布式鏈路追蹤系統(tǒng)無非是解決該問題的一個(gè)良好方法。目前市面上也有非常多可用的開源方案,其中不乏開箱即用的優(yōu)秀用例:SkyWalking、Jaeger和Zipkin等等。

本篇,我們將探索 Tye 中已經(jīng)實(shí)現(xiàn)擴(kuò)展的 Zipkin 來演示一下分布式鏈路追蹤的簡(jiǎn)易效果。

創(chuàng)建測(cè)試應(yīng)用

要測(cè)試分布式情況,那么至少需要兩個(gè)應(yīng)用實(shí)例才能夠體現(xiàn)效果。因此,此處創(chuàng)建兩個(gè)測(cè)試服務(wù)實(shí)例:

dotnet?new?sln?-n?TyeTestdotnet?new?webapi?-n?TyeTest dotnet?add?./TyeTest/TyeTest.csproj?package?Microsoft.Tye.Extensions.Configuration?--version?0.6.0-alpha.21070.5 dotnet?sln?./TyeTest.sln?add?./TyeTest/TyeTest.csprojdotnet?new?webapi?-n?TyeTest2 dotnet?sln?./TyeTest.sln?add?./TyeTest2/TyeTest2.csproj tye?init

在 TyeTest 項(xiàng)目的 Startup.cs 增加對(duì) HttpClientFactory 的注冊(cè)。

??public?void?ConfigureServices(IServiceCollection?services){ +?????services.AddHttpClient();services.AddControllers();services.AddSwaggerGen(c?=>{c.SwaggerDoc("v1",?new?OpenApiInfo?{?Title?=?"TyeTest",?Version?=?"v1"?});});}

進(jìn)入 WeatherForecastController, 我們使用 HttpClient 來調(diào)用下游服務(wù),并且將得到的數(shù)據(jù)返回:

using?System; using?System.Collections.Generic; using?System.Linq; using?System.Net.Http; using?System.Text.Json; using?System.Threading.Tasks; using?Microsoft.AspNetCore.Mvc; using?Microsoft.Extensions.Configuration; using?Microsoft.Extensions.Logging;namespace?TyeTest.Controllers {[ApiController][Route("[controller]")]public?class?WeatherForecastController?:?ControllerBase{private?readonly?ILogger<WeatherForecastController>?_logger;private?readonly?IConfiguration?_configuration;private?readonly?HttpClient?_httpClient;public?WeatherForecastController(ILogger<WeatherForecastController>?logger,IConfiguration?configuration,HttpClient?httpClient){_logger?=?logger;_configuration?=?configuration;_httpClient?=?httpClient;}[HttpGet]public?async?Task<string>?Get(){var?serviceUri?=?_configuration.GetServiceUri("tyetest2");Console.WriteLine(serviceUri);var?httpResponseMessage?=?await?_httpClient.GetAsync($"{serviceUri}WeatherForecast");var?json?=?await?httpResponseMessage.Content.ReadAsStringAsync();return?json;}} }

這樣,我們就得到了一個(gè)在服務(wù) TyeTest 中調(diào)用 TyeTest2 的一個(gè)服務(wù)間調(diào)用的示例。

這其實(shí)和 《使用 Tye 輔助開發(fā) k8s 應(yīng)用竟如此簡(jiǎn)單(二)》 中得到的測(cè)試用例是相同的。

然后使用tye run便可以啟用測(cè)試應(yīng)用。開發(fā)者可以在 swagger 頁面中測(cè)試具體的效果。

但是!其實(shí)沒完。此處我們還需要修改Program.cs變更默認(rèn)的Activity.DefaultIdFormat:

using?System; using?System.Collections.Generic; using?System.Diagnostics; using?System.Linq; using?System.Threading.Tasks; using?Microsoft.AspNetCore.Hosting; using?Microsoft.Extensions.Configuration; using?Microsoft.Extensions.Hosting; using?Microsoft.Extensions.Logging;namespace?TyeTest {public?class?Program{public?static?void?Main(string[]?args){Activity.DefaultIdFormat?=?ActivityIdFormat.W3C;CreateHostBuilder(args).Build().Run();}public?static?IHostBuilder?CreateHostBuilder(string[]?args)?=>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder?=>{webBuilder.UseStartup<Startup>();});} }

注意,兩個(gè)應(yīng)用都需要修改。

這將會(huì)在消息請(qǐng)求頭中添加這是一種符合 W3C 標(biāo)準(zhǔn)追蹤頭信息。不過,如果開發(fā)者是 net5 應(yīng)用,則不需要變更了,因?yàn)檫@已經(jīng)是默認(rèn)行為。有關(guān)此內(nèi)容的詳細(xì)信息,開發(fā)者可以參閱:

  • https://devblogs.microsoft.com/aspnet/improvements-in-net-core-3-0-for-troubleshooting-and-monitoring-distributed-apps/

  • https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/default-activityidformat-changed

啟用 Zipkin

接下來,我們修改 tye.yml 來啟用 zipkin 以監(jiān)控服務(wù)間的調(diào)用:

name:?tyetest extensions:-?name:?zipkin services:-?name:?tyetestproject:?TyeTest/TyeTest.csproj-?name:?tyetest2project:?TyeTest2/TyeTest2.csproj

沒錯(cuò),其實(shí)只是加了extensions就完成了。

使用tye run,啟動(dòng)應(yīng)用,便可以在 dashboard 中查看到自動(dòng)部署起來的 zipkin:

zipkin in dashboard

打開對(duì)應(yīng)鏈接,便可以看到對(duì)應(yīng)的 zipkin 查詢界面:

zipkin search ui

然后,我們打開 tyetest 服務(wù)的 swagger 界面,進(jìn)行一次調(diào)用。然后在回來查詢,便可以查詢到服務(wù)調(diào)用的情況:

zipkin results

點(diǎn)擊其中的 Show 按鈕,便可以查看到一次服務(wù)調(diào)用的詳細(xì)過程信息:

one tracing

這就是使用 zipkin 對(duì) http 調(diào)用進(jìn)行追蹤的最簡(jiǎn)易示例。

自行部署 Zipkin

和 seq 一樣,開發(fā)者可以使用已經(jīng)部署好的 zipkin 以便重復(fù)利用,避免每次都要啟動(dòng)浪費(fèi)時(shí)間。

version:?'3.3'services:zipkin:image:?openzipkin/zipkinrestart:?alwayscontainer_name:?zipkinports:-?9411:9411 name:?tyetest extensions:-?name:?zipkin services:-?name:?tyetestproject:?TyeTest/TyeTest.csproj-?name:?tyetest2project:?TyeTest2/TyeTest2.csproj-?name:?zipkinexternal:?truebindings:-?name:?httpcontainerPort:?9411

和 seq 一樣,通過自行部署 zipkin 實(shí)例。然后修改 tye.yml 使得服務(wù)得以連接。預(yù)期效果與前面一節(jié)相同。但是節(jié)約了每次啟動(dòng)都需要啟動(dòng) zipkin 實(shí)例的時(shí)間。

Jaeger 也可以

實(shí)際上,只要是 zipkin 協(xié)議兼容的收集端,那么都可以被這種方式集成。因此,我們?cè)撚?Jaeger 作為后端進(jìn)行測(cè)試。

version:?'3.3' services:jaeger:image:?jaegertracing/all-in-one:1.21restart:?alwaysports:-?9411:9411-?16686:16686environment:COLLECTOR_ZIPKIN_HTTP_PORT:?9411

tye.yml和先前對(duì)比沒有變化。

啟用并測(cè)試應(yīng)用。便可以在 jaeger dashboard 得到類似的結(jié)果:

jaeger result

當(dāng)然,使用與 Zipkin 兼容的 SkyWalking 也是可以的,開發(fā)者可以自行嘗試。

更詳細(xì)的追蹤

如果在應(yīng)用程序中需要更加細(xì)致的追蹤細(xì)節(jié),那么可以使用 OpenTelemetry 相關(guān)的類庫在系統(tǒng)中進(jìn)行集成。然后通過 Tye 獲取對(duì)應(yīng)服務(wù)的 connectionString 便可以實(shí)現(xiàn)自行導(dǎo)出特定的活動(dòng)細(xì)節(jié)。

這里,開發(fā)者可以參照 《使用 Tye 輔助開發(fā) k8s 應(yīng)用竟如此簡(jiǎn)單(二)》 中連接 mongodb 的方式進(jìn)行實(shí)驗(yàn)。

《OpenTelemetry .NET》https://github.com/open-telemetry/opentelemetry-dotnet《OpenTelemetry - 云原生下可觀測(cè)性的新標(biāo)準(zhǔn)》https://blog.csdn.net/sd7o95o/article/details/112645413

最后,發(fā)到 K8S 里面試一下

注意,和前面的 seq 一樣。tye deploy 并不會(huì)自動(dòng)部署對(duì)應(yīng)的 zipkin 服務(wù)。

因此,如果要部署extensions包含 zipkin 的 tye.yml。請(qǐng)確保 k8s 集群中存在名稱為 zipkin 的服務(wù),這樣數(shù)據(jù)才會(huì)被收集。

小結(jié)

本篇,我們已經(jīng)順利完成了使用 Tye 中的 zipkin 擴(kuò)展來實(shí)現(xiàn)分布式鏈路追蹤。

下一篇,我們將進(jìn)一步研究 Tye 如何與分布式應(yīng)用程序運(yùn)行時(shí) Dapr 如何碰撞出更精彩的火花。

本文作者:newbe36524

本文鏈接:https://www.newbe.pro/Newbe.Claptrap/Try-Tye-5/

版權(quán)聲明:本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明出處!

總結(jié)

以上是生活随笔為你收集整理的使用 Tye 辅助开发 k8s 应用竟如此简单(五)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。