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

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

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

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

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

续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪。

我是谁?我在哪儿?我咋了?

分布式系统纷繁复杂,特别以现在微服务架构的出现,使得应用系统中的应用实例变得更加多变难以捉摸。

那么如何在如此繁杂的系统中找到一条业务调用链的上下游关系、性能细节、业务数据等等成为了一项开发者必然要面对的挑战。

使用分布式链路追踪系统无非是解决该问题的一个良好方法。目前市面上也有非常多可用的开源方案,其中不乏开箱即用的优秀用例:SkyWalking、Jaeger和Zipkin等等。

本篇,我们将探索 Tye 中已经实现扩展的 Zipkin 来演示一下分布式链路追踪的简易效果。

创建测试应用

要测试分布式情况,那么至少需要两个应用实例才能够体现效果。因此,此处创建两个测试服务实例:

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 项目的 Startup.cs 增加对 HttpClientFactory 的注册。

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

进入 WeatherForecastController, 我们使用 HttpClient 来调用下游服务,并且将得到的数据返回:

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;}}
}

这样,我们就得到了一个在服务 TyeTest 中调用 TyeTest2 的一个服务间调用的示例。

这其实和 《使用 Tye 辅助开发 k8s 应用竟如此简单(二)》 中得到的测试用例是相同的。

然后使用tye run便可以启用测试应用。开发者可以在 swagger 页面中测试具体的效果。

但是!其实没完。此处我们还需要修改Program.cs变更默认的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>();});}
}

注意,两个应用都需要修改。

这将会在消息请求头中添加这是一种符合 W3C 标准追踪头信息。不过,如果开发者是 net5 应用,则不需要变更了,因为这已经是默认行为。有关此内容的详细信息,开发者可以参阅:

  • 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 以监控服务间的调用:

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

没错,其实只是加了extensions就完成了。

使用tye run,启动应用,便可以在 dashboard 中查看到自动部署起来的 zipkin:

zipkin in dashboard

打开对应链接,便可以看到对应的 zipkin 查询界面:

zipkin search ui

然后,我们打开 tyetest 服务的 swagger 界面,进行一次调用。然后在回来查询,便可以查询到服务调用的情况:

zipkin results

点击其中的 Show 按钮,便可以查看到一次服务调用的详细过程信息:

one tracing

这就是使用 zipkin 对 http 调用进行追踪的最简易示例。

自行部署 Zipkin

和 seq 一样,开发者可以使用已经部署好的 zipkin 以便重复利用,避免每次都要启动浪费时间。

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 实例。然后修改 tye.yml 使得服务得以连接。预期效果与前面一节相同。但是节约了每次启动都需要启动 zipkin 实例的时间。

Jaeger 也可以

实际上,只要是 zipkin 协议兼容的收集端,那么都可以被这种方式集成。因此,我们该用 Jaeger 作为后端进行测试。

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

tye.yml和先前对比没有变化。

启用并测试应用。便可以在 jaeger dashboard 得到类似的结果:

jaeger result

当然,使用与 Zipkin 兼容的 SkyWalking 也是可以的,开发者可以自行尝试。

更详细的追踪

如果在应用程序中需要更加细致的追踪细节,那么可以使用 OpenTelemetry 相关的类库在系统中进行集成。然后通过 Tye 获取对应服务的 connectionString 便可以实现自行导出特定的活动细节。

这里,开发者可以参照 《使用 Tye 辅助开发 k8s 应用竟如此简单(二)》 中连接 mongodb 的方式进行实验。

《OpenTelemetry .NET》https://github.com/open-telemetry/opentelemetry-dotnet《OpenTelemetry - 云原生下可观测性的新标准》https://blog.csdn.net/sd7o95o/article/details/112645413

最后,发到 K8S 里面试一下

注意,和前面的 seq 一样。tye deploy 并不会自动部署对应的 zipkin 服务。

因此,如果要部署extensions包含 zipkin 的 tye.yml。请确保 k8s 集群中存在名称为 zipkin 的服务,这样数据才会被收集。

小结

本篇,我们已经顺利完成了使用 Tye 中的 zipkin 扩展来实现分布式链路追踪。

下一篇,我们将进一步研究 Tye 如何与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花。

本文作者:newbe36524

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

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解冒泡排序

转自&#xff1a;静默虚空http://www.cnblogs.com/jingmoxukong/p/4302718.html要点冒泡排序是一种交换排序。什么是交换排序呢&#xff1f;交换排序&#xff1a;两两比较待排序的关键字&#xff0c;并交换不满足次序要求的那对数&#xff0c;直到整个表都满足次序要求为止。算…

雪花算法Snowflake

雪花Id生成算法&#xff0c;是鼎鼎有名的分布式Id生成算法。它的优点在于&#xff0c;在分布式系统中快速生成有时间顺序的唯一编号&#xff01;Snowflake实测每秒可生成900万个唯一Id。Nuget包&#xff1a;NewLife.Core源码地址&#xff1a;https://github.com/NewLifeX/X/blo…

像小猪佩奇那样生活,需要多少钱?

每个有娃的家庭&#xff0c;几乎都有一个小猪佩奇的超级粉丝《小猪佩奇》&#xff08;又名《粉红猪小妹》&#xff09;史上最赚钱的英国学前电视动画片动画之一有网友从经济的角度算了笔账像佩奇一家那样生活需要多少钱呢&#xff1f;▼这是佩奇的家&#xff0c;视野相当不错的…

几何画板自定义工具_几何画板最强版 v5.06 中文版(含教程/实例/控件/打包机/工具集)...

相信还有很多地方的网课没有结束&#xff0c;前两天有小伙伴在后台留言求几何画板&#xff0c;这款软件大都收费&#xff0c;所以小软公然发到这里怕是不太稳妥&#xff0c;如果被删除就是被举报啦&#xff0c;需要的小伙伴速度下载保存~几何画板英文名&#xff1a;Sketchpad&a…

解惑3G业务

内容简介&#xff1a; 本书系统地介绍了第三代移动通信系统的业务&#xff0c;主要从业务概念、业务实现流程、关键技术、关键问题以及解决问题的思路几个角度进行介绍。本书内容包括&#xff1a;通信业务发展整体分析、3G的移动视频业务、基于SIP的移动“邀请”业务、移动位置…

Delphi 26 岁

喜欢就关注我们吧&#xff01;诞生于1995年的 Delphi 现在已经 26 岁了。1995年2月14日&#xff0c;Borland 公司推出了面向开发者的新工具——Delphi&#xff0c;旨在接替 DOS 时代盛行一时的 Turbo Pascal。说到这两款产品必然离不开它们的灵魂人物——Anders Hejlsberg&…

row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别

需求描述&#xff1a;分析最近三个月每天排名前30的邮箱收件数量。涉及到的表字段&#xff1a;发件时间&#xff0c;收件人。一、ROW_NUMBER表t查询出了3月每天不同类型邮箱收件量的降序排名&#xff0c;表t1通过ROW_NUMBER函数给每行数据添加序列号&#xff0c;select ROW_NUM…

边缘计算k8s集群之SuperEdge

什么是边缘计算边缘计算&#xff0c;是指在靠近物或数据源头的一侧&#xff0c;采用网络、计算、存储、应用核心能力为一体的开放平台&#xff0c;就近提供最近端服务。其应用程序在边缘侧发起&#xff0c;产生更快的网络服务响应&#xff0c;满足行业在实时业务、应用智能、安…

让你的系统移动起来

最近一直在捣鼓linux系统&#xff0c;听一大哥说想搞好它&#xff0c;最简单的方法就是经常用&#xff0c;用的久了也就自然简单了。。就跟我们用windows一样。。在linux系统里&#xff0c;我最喜欢的是Ubuntu。。个人感觉它做的还不错&#xff0c;有丰富的三方软件支持&#x…

简约而不简单的 Django 新手图文教程

来源&#xff1a;cizixssegmentfault.com/a/1190000008387882本文面向&#xff1a;有python基础&#xff0c;刚接触web框架的初学者。环境&#xff1a;windows7&#xff0c;python3.5.1&#xff0c;pycharm专业版&#xff0c;Django 1.10版&#xff0c;pip3一、Django简介百度百…

【直观详解】支持向量机SVM

【阅读时间】13min - 19min【内容简介】详解解读什么是支持向量机&#xff0c;如何解支持向量以及涉及的拉普拉斯乘子法&#xff0c;还有核方法的解读。1什么是支持向量机-SVM支持向量机-SVM(Support Vector Machine)从本质来说是一种&#xff1a;用一条线&#xff08;方程&…

C# 打印PDF文档的10种方法

操作PDF文档时&#xff0c;打印是常见的需求之一。针对不同的打印需求&#xff0c;可分多种情况来进行&#xff0c;如设置静默打印、指定打印页码范围和打印纸张大小、双面打印、黑白打印等等。经过测试&#xff0c;下面将对常见的几种PDF打印需求做一些归纳总结&#xff0c;这…

遗传算法经典实例代码_经典算法研究系列 之 深入浅出遗传算法

关注数学&#xff0c;关注AI&#xff0c;关注我们公众号ID&#xff1a;Math-AI经典算法研究系列遗传算法1初探遗传算法Ok&#xff0c;先看维基百科对遗传算法所给的解释&#xff1a;遗传算法是计算数学中用于解决最优化的搜索算法&#xff0c;是进化算法的一种。进化算法最初是…

java buffalo_随你怎么玩!Buffalo 网络硬盘新潮流

现代时尚的办公环境是怎样的&#xff1f;ADSL、无线网络、笔记本、还有咖啡&#xff0c;惬意地被沙发包裹起来&#xff0c;自由自在地网上冲浪……&#xff1b;当然仅仅有这些还是不够&#xff0c;我们需要视频会议、需要网络下载、甚至打印、扫描&#xff0c;还有需要随时随地…

.NET gRPC核心功能初体验

gRPC是高性能的RPC框架&#xff0c; 有效地用于服务通信(不管是数据中心内部还是跨数据中心)。由Google开源&#xff0c;目前是一个Cloud Native Computing Foundation&#xff08;CNCF&#xff09;孵化项目。其功能包括&#xff1a;•双向流•强大的二进制序列化•可插拔的身份…

为什么我怎么也理解不了波粒二象性,是因为智商不够吗?

大家好&#xff0c;各位观众。如果你们之前不能完全理解波粒二象性&#xff08;现象本身&#xff0c;或者这个概念的内涵和外延&#xff09;。不用担心&#xff0c;我认为十有八九不是智商问题&#xff1a;量子物理的内容有太多“反常识”了。很多时候&#xff0c;是我们的脑袋…

设备间的连线图例

转载于:https://blog.51cto.com/51fashion/243017

化学版2048,你玩过吗?内含游戏链接

今天来给大家推荐一款游戏——Na&#xff08;钠&#xff09;&#xff0c;也可以叫它化学版2048。首先2048大家都不陌生&#xff0c;曾经火爆一时的小游戏&#xff0c;于14年由年仅19岁的意大利程序员加布里勒希鲁尼&#xff08;Gabriele Cirulli&#xff09;开发出来。2048游戏…

sqlsession.selectlist 会返回null么_StackOverflow经典问题:代码中如何去掉烦人的“!=nullquot;判空语句...

推荐阅读&#xff1a;程序员引路人&#xff1a;腾讯T4曰“面试不仅仅是技术过硬就可以了&#xff0c;你还需要懂得这些”​zhuanlan.zhihu.com问题为了避免空指针调用&#xff0c;我们经常会看到这样的语句if (someobject ! null) { someobject.doCalc();}最终&#xff0c;项…

如何在 ASP.Net Core 中使用 Configuration Provider

ASP.NET Core 是一个开源的&#xff0c;跨平台的&#xff0c;精简的模块化框架&#xff0c;可用于构建高性能&#xff0c;可扩展的web应用程序&#xff0c; ASP.NET Core 中的数据配置常用 k-v 的形式存储&#xff0c;值得注意的是&#xff0c;新的数据配置还支持 层级方式&…