NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享

对于普通系统或者服务来讲,通常经过打日志来进行埋点,而后再经过elk或splunk进行定位及分析问题,更有甚者直接远程服务器,直接操做查看日志,那么,随着业务愈来愈复杂,企业应用也进入了分布式服务化的阶段,传统的日志监控等方式没法很好达到跟踪调用、排查问题等需求,能够想象,若是你的服务节点达到有不少不少(两位数以上吧),而没有一个自动跟踪系统,那查找一个问题将成为噩梦。
 
那么,服务之间调用的问题是:
 
  • 如何快速发现问题?
  • 如何判断故障影响范围?
  • 如何梳理服务依赖以及依赖的合理性?
  • 如何分析链路性能问题以及实时容量规划?
  • 如何在分布式服务进行日志监控呢?
 
首先你们会想到分布式链路追踪系统,说到这,就得讲 OpenTracing 规范,OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。详细介绍见 《 opentracing文档中文版》。在谷歌论文《 Dapper, 大规模分布式系统的跟踪系统》的指导下,许多优秀的APM应运而生,分布式追踪系统发展很快,种类繁多,给咱们带来很大的方便。虽然目前市面许多优秀的APM系统,可是做为咱们.NET程序员的选择却就少之又少了(甚至没得选),几乎各大分布式追踪系统均提供java版的支持,而.NET上却只有SkyWalking的 SkyAPM-dotnet一直在默默的支持着,辛苦了,大佬们。
 
好吧,既然不能作到技术选型,那么咱们就开始工做吧。SkyWalking和Elasticsearch的安装,网上一抓一大把,这里不在重复的介绍“如何安装”和“如何使用”。
 
从SkyAPM-dotnet中,咱们能够拿到团队的官方示例, https://github.com/SkyAPM/SkyAPM-dotnet/tree/master/sample,她分为请求端,前置端和后端(固然,你喜欢怎么叫都行),我稍微修改一下,作了一些数据和请求数上的调整, 本篇代码不是重点(SkyAPM-dotne已经达到开箱即用的强大优点),但愿获得的数据像下面这样:
 
 
解释一下这个数据是怎么来的(或者这个实验的服务架设):
  1. 后端:提供数据库的查询,队列的接口等一系列数据操做的地方;
  2. 前置:提供接口的过滤和处理,能够把他理解为一个逻辑后端,或者一个API网关;
  3. 请求:提供请求,或者模拟串行或并行请求;
 
这样从逻辑上理解就是1->2->3->2->1,其实一个请求从头至尾而后在返回到前端也都是这样的,你能够把他想象成咱们常见的三层模型、等等。
启动三个节点后,经过SkyWalking能够看到,Service数量是3,正是咱们建立的三个服务节点,Endpoint表示全部链接的数量,DB和Cache做为数据库(或缓存)的数量,MQ的数量、平均吞吐量、网络拓扑图等等。
整个界面一目了然,更多详细介绍可查看官网解释。
 
 
 
 
 
 
在.NET的生态圈中,曾经有ButterFly这样的原生.NET框架来实现咱们整个系统的链路追踪,只是做者表示已不在维护,ButterFly放弃的缘由之一也是由于.NET开源项目的参与者太少了,光靠一人之力是无法作出一个稳定高效可用于生产的APM。做者转而投入到了Skyapm-dotnet,因此,在.NET上,咱们优先选择有良好支持的skyapm-dotnet!
相关文章
相关标签/搜索