使用 Tye 辅助开发 k8s 应用竟如此简单(五)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪。
Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架。如果您是首次阅读本系列文章。建议可以先从本文末尾的入门文章开始了解。
我是谁?我在哪儿?我咋了?
分布式系统纷繁复杂,特别以现在微服务架构的出现,使得应用系统中的应用实例变得更加多变难以捉摸。
那么如何在如此繁杂的系统中找到一条业务调用链的上下游关系、性能细节、业务数据等等成为了一项开发者必然要面对的挑战。
使用分布式链路追踪系统无非是解决该问题的一个良好方法。目前市面上也有非常多可用的开源方案,其中不乏开箱即用的优秀用例:SkyWalking、Jaeger 和 Zipkin 等等。
本篇,我们将探索 Tye 中已经实现扩展的 Zipkin 来演示一下分布式链路追踪的简易效果。
创建测试应用
要测试分布式情况,那么至少需要两个应用实例才能够体现效果。因此,此处创建两个测试服务实例:
create-tye-zipkin-test.sh
dotnet new sln -n TyeTest |
在 TyeTest 项目的 Startup.cs 增加对 HttpClientFactory 的注册。
public void ConfigureServices(IServiceCollection services) |
进入 WeatherForecastController, 我们使用 HttpClient 来调用下游服务,并且将得到的数据返回:
using System; |
这样,我们就得到了一个在服务 TyeTest 中调用 TyeTest2 的一个服务间调用的示例。
这其实和 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 中得到的测试用例是相同的。
然后使用 tye run
便可以启用测试应用。开发者可以在 swagger 页面中测试具体的效果。
但是!其实没完。此处我们还需要修改 Program.cs
变更默认的 Activity.DefaultIdFormat
:
Program.cs
using System; |
注意,两个应用都需要修改。
这将会在消息请求头中添加这是一种符合 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 以监控服务间的调用:
tye.yml
name: tyetest |
没错,其实只是加了 extensions
就完成了。
使用 tye run
,启动应用,便可以在 dashboard 中查看到自动部署起来的 zipkin:
打开对应链接,便可以看到对应的 zipkin 查询界面:
然后,我们打开 tyetest 服务的 swagger 界面,进行一次调用。然后在回来查询,便可以查询到服务调用的情况:
点击其中的 Show 按钮,便可以查看到一次服务调用的详细过程信息:
这就是使用 zipkin 对 http 调用进行追踪的最简易示例。
自行部署 Zipkin
和 seq 一样,开发者可以使用已经部署好的 zipkin 以便重复利用,避免每次都要启动浪费时间。
docker-compose.yml
version: '3.3' |
tye.yml
name: tyetest |
和 seq 一样,通过自行部署 zipkin 实例。然后修改 tye.yml 使得服务得以连接。预期效果与前面一节相同。但是节约了每次启动都需要启动 zipkin 实例的时间。
Jaeger 也可以
实际上,只要是 zipkin 协议兼容的收集端,那么都可以被这种方式集成。因此,我们该用 Jaeger 作为后端进行测试。
docker-compose.yml
version: '3.3' |
tye.yml
和先前对比没有变化。
启用并测试应用。便可以在 jaeger dashboard 得到类似的结果:
当然,使用与 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 如何碰撞出更精彩的火花。
最后但是最重要!
如果读者对该内容感兴趣,欢迎转发、评论、收藏文章以及项目。
最近作者正在构建以 Actor 模式 和 事件溯源 为理论基础的一套服务端开发框架。希望为开发者提供能够便于开发出 “分布式”、“可水平扩展”、“可测试性高” 的应用系统 ——Newbe.Claptrap
本篇文章是该框架的一篇技术选文,属于技术构成的一部分。
项目文档库:claptrap.newbe.pro
联系方式: QQ 群 610394020
您还可以查阅本系列的其他选文:
理论入门篇
术语介绍篇
- Actor 模式
- 事件溯源(Event Sourcing)
- Claptrap
- Minion
- 事件 (Event)
- 状态 (State)
- 状态快照 (State Snapshot)
- Claptrap 设计图 (Claptrap Design)
- Claptrap 工厂 (Claptrap Factory)
- Claptrap Identity
- Claptrap Box
- Claptrap 生命周期(Claptrap Lifetime Scope)
- 序列化(Serialization)
- 最小竞争资源 (Minimal Competing Resources)
样例实践篇
开发工具篇
- 使用 Tye 辅助开发 k8s 应用竟如此简单(一)
- 使用 Tye 辅助开发 k8s 应用竟如此简单(二)
- 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
- 使用 Tye 辅助开发 k8s 应用竟如此简单(四)
- 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
- 使用 Tye 辅助开发 k8s 应用竟如此简单(六)
其他番外篇
- 谈反应式编程在服务端中的应用,数据库操作优化,从 20 秒到 0.5 秒
- 谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert
- 十万同时在线用户,需要多少内存?——Newbe.Claptrap 框架水平扩展实验
- docker-mcr 助您全速下载 dotnet 镜像
- 十多位全球技术专家,为你献上近十个小时的.Net 微服务介绍
- 年轻的樵夫哟,你掉的是这个免费 8 核 4G 公网服务器,还是这个随时可用的 Docker 实验平台?
- 如何使用 dotTrace 来诊断 netcore 应用的性能问题
- 只要十步,你就可以应用表达式树来优化动态调用
GitHub 项目地址:https://github.com/newbe36524/Newbe.Claptrap
Gitee 项目地址:https://gitee.com/yks/Newbe.Claptrap
您当前查看的是先行发布于 www.newbe.pro 上的博客文章,实际开发文档随版本而迭代。若要查看最新的开发文档,需要移步 claptrap.newbe.pro。
- 本文作者: newbe36524
- 本文链接: https://www.newbe.pro/Newbe.Claptrap/Try-Tye-5/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
使用 Tye 辅助开发 k8s 应用竟如此简单(五)的更多相关文章
- 使用 Tye 辅助开发 k8s 应用竟如此简单(一)
最近正巧在进行 Newbe.Claptrap 新版本的开发,其中使用到了 Tye 来辅助 k8s 应用的开发.该系列我们就来简单了解一下其用法. Newbe.Claptrap 是一个用于轻松应对并发问 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(二)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中使用服务发现. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次阅读本系 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何对数据库进行链接. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(四)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(六)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...
- 使用 Tye 辅助开发 dotnet 应用程序
newbe.pro 已经给我们写了系列文章介绍Tye 辅助开发k8s 应用: 使用 Tye 辅助开发 k8s 应用竟如此简单(一) 使用 Tye 辅助开发 k8s 应用竟如此简单(二) 使用 Tye ...
- WPF 辅助开发工具
原文:WPF 辅助开发工具 以下介绍的工具均为免费版,有些是源代码开放,希望对大家有用. Kaxaml 轻量级XAML 编辑器,可以同时进行图像和XAML 代码的编辑.最终生成开发人员想要的XAML ...
- python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd
官方文档 只是支持win32, 不支持win64 所以很麻烦 民间高人,集中做了一堆辅助库,下载后,用python安装目录下的scripts中,pip和easy_install就可以安装了 pytho ...
- Android辅助开发工具合集
https://github.com/389273716/android-skill-summary/blob/master/开发工具使用指南/辅助开发工具.md
随机推荐
- Java工作中的并发问题处理方法总结
Java工作中常见的并发问题处理方法总结 好像挺久没有写博客了,趁着这段时间比较闲,特来总结一下在业务系统开发过程中遇到的并发问题及解决办法,希望能帮到大家 问题复现 1. "设备Aの奇怪分 ...
- HDFS查看文件的前几行-后几行-行数
随机返回指定行数的样本数据hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | shuf -n 5返回前几行的样本数据hadoop f ...
- 使用TCP发送文件
客户端 package com.zy.demo3; import java.io.File; import java.io.FileInputStream; import java.io.IOExce ...
- POJ1113:Wall (凸包算法学习)
题意: 给你一个由n个点构成的多边形城堡(看成二维),按顺序给你n个点,相邻两个点相连. 让你围着这个多边形城堡建一个围墙,城堡任意一点到围墙的距离要求大于等于L,让你求这个围墙的最小周长(看成二维平 ...
- 2019牛客多校 Round3
Solved:3 Rank:105 治哥出题了 我感动哭了 A Graph Game (分块) 题意:1e5个点 2e5条边 s(x)表示与x点直接相邻的点集合 有两种操作 1种将按输入顺序的边第l条 ...
- 牛客编程巅峰赛S2第3场 Tree VI (树,dfs)
题意:给你一个\(n\)个点的完全\(k\)叉树的先序遍历序列\(a\),还原这颗树并且求所有两个端点的异或和. 题解:用dfs在还原树的时候,把子节点和父亲节点的异或贡献给答案,对于每个节点,我们找 ...
- Splits CodeForces - 964A
题意: 我们定义一个不上升的且和为 n 的正整数序列,叫做 n 的分解. 比如, 下面是8的分解: [4, 4], [3, 3, 2], [2, 2, 1, 1, 1, 1], [5, 2, 1]. ...
- WSL ubuntu重置密码
1. 在powershell中切换到root: 2. 进入ubuntu: 3. 修改制定用户的密码: 4. 切换回默认的用户:
- 【非原创】ZOJ - 4062 Plants vs. Zombies【二分】
题目:戳这里 题意:机器人走过一个花,可以给那个花浇水,给定步数下,问花的最小的最大能量值. 学习博客:戳这里 本人代码: 1 #include <bits/stdc++.h> 2 typ ...
- Ubuntu16.04+wineQQ+解决版本过低
[参考1:] http://blog.csdn.net/sinat_32079337/article/details/72771078? [参考2:] http://blog.csdn.net/qq_ ...