Apache SkyWalking的架构设计【译文】

Apache SkyWalking提供了一个功能强大并且很轻量级的后端。在此,将介绍为什么采用以下方式来设计它,以及它又是如何工作的。

  640?wx_fmt=png

架构图

  对于APM而言,agent或SDKs仅是如何使用libs的技术细节。手动或自动的形式与架构无关,因此在本文中,我们不讲这些内容,可将这些看成为Client lib。

  基本原理

  关于SkyWalking架构设计的基本原则就是:

  1)易于维护;

  2)可控;

  3)基于流;

  为了达到此目的,SkyWalking后端提供了如下设计:

  1)模块化设计;

  2)为客户端提供多种连接方式;

  3)集群发现机制;

  4)流模式;

  5)可切换的存储实现;

  一、模块化

  SkyWalking收集器(collector)是基于模块化设计,用户可以根据自己的需要,更改或集成收集器的功能。

  二、模块

  模块定义了一组特性,其中可包括一些技术上的实现(如:grpc/jetty服务器管理)、跟踪分析(如:trace segment或者zipkin span解析器)或聚合特征。总而言之,这些都是由模块来定义和实现的。

  每个模块都可以通过Java接口定义自身的服务,而实现类均要实现这些服务。并且这些实现类要根据实现的功能定义所依赖的类有哪些。这意味着,即使是模块的两个不同的实现,也可以依赖于不同的模块。

  另外,收集器中的模块化核心会检查启动序列,如果没有发现循环依赖或者依赖项,该核心功能会终止收集器。

  收集器会启动所有模块,这些模块在application.yml文件中定义。此文件结构如下:

  1)根节点是模块名称,如:cluster,naming;

  2)次级节点是此模块的功能实现名称,如:zookeeper是cluster模块;

  3)第三级节点是功能实现的属性,如:hostPort和sessionTimeout是zookeeper需要的属性;

  三、多连接方式

  首先,收集器提供两种类型的连接,也就是两种协议的支持:HTTP和gRPC。

  1)在HTTP中命名服务,在后端集群中,返回所有可用的收集器;

  2)Uplink服务支持gRPC(主要用于SkyWalking的本地代理)和HTTP,它跟踪和度量收集器。每个客户端只向单个收集器发送监测数据(跟踪和度量)。若连接的收集器断线,,则尝试连接其他的收集器。

  客户端lib和收集器集群之间的处理流示例

  640?wx_fmt=jpeg

  四、收集器集群发现

  当收集器以集群模式运行时,收集器必须以某种方式发现彼此。在默认情况下,SkyWalking使用zookeeper进行协调,并以此作为发现的注册中心。

  如此说来,客户端的lib将不会使用zookeeper来查找集群。建议用户不要这样做。因为集群发现机制是可切换的,由模块化核心提供。基于这一点,就打破了可切换的能力。

  我们希望社区能够提供更多的关于集群发现的功能实现。如现在有的Eureka,Consul,Kubernate。

  五、流模式

  流模式倾向于轻量级的storm/spark实现,并允许使用api来构建流过程图(DAG),以及每个节点的输入/输出的数据约定。

  新模块可以找到并扩展已有的过程图。

  在处理过程中有三种情况:

  1)同步过程。传统的方法调用。

  2)异步过程,基于队列缓冲区的a.k.a批处理过程。

  3)远程过程,聚合矩阵收集器,通过这种方式,选择器在节点中定义,以决定如何在集群中找到收集器。(HashCode,Rolling,ForeverFirst是三种支持的方式)

  通过这些特性,收集器就像一个流动的网一样运行。通过聚合指标和不依赖于存储实现功能来支持同时编写同样的id。

  六、可切换的存储实现

  因为流模式负责并发,所以存储实现的职责是提供高速写和组查询。

  现在,支持ElasticSearch,也支持H2预览版,同时支持ShardingSphere项目用于MySql关系数据库集群的管理。

  七、Web UI

  除了收集器设计的原则之外,UI也是SkyWalking中的另一个核心部分。它基于React、Antd和Zuul代理来提供收集器集群发现、查询分派和可视化。

  Web UI使用localhost:10800来为收集器集群做命名查询。 

参考链接:https://zhuanlan.zhihu.com/p/38442093?utm_source=wechat_session&utm_medium=social&utm_oi=54098577588224&from=timeline&isappinstalled=0

原文地址:https://www.cnblogs.com/supersnowyao/p/9246742.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

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

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

相关文章

通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包括:CLS、CTS(CLI)、FCL…

.Net Core小技巧 - Hosted Services + Quartz实现定时任务调度

背景之前一直有朋友问,.Net Core Linux环境有没有类似Windows服务的东西。其实是有的,我了解的方法有两种:#1 创建一个ASP.Net Core的Web项目(如Web API),然后通过添加中间件(Middleware&#…

在.NET Core微服务中使用HostBuilder和Generic Host

基于控制台的服务中探索一个简单模式,以解决跨领域问题。“通用” Host和HostBuilder是随.NET Core 2.1发布而发布的新功能组件的组件。它们的一个用例是通过提供用于添加横切关注点(例如依赖注入,配置和日志记录)的模式来简化基于…

EntityFramework Core进行读写分离最佳实践方式,了解一下?

本来打算写ASP.NET Core MVC基础系列内容,博客评论有园友提出讲讲读写分离,这个问题提的好。大多数情况下,对于园友在评论中提出的问题,如果是值得深究或者大多数同行比较关注的问题我都会私下去看看,然后进行对应解答…

小X的加法难题

小X的加法难题 题目大意&#xff1a; 一个AB的式子&#xff0c;但之间有一些没用的空格&#xff0c;要你求出结果 原题&#xff1a; 解题思路&#xff1a; 字符输入&#xff0c;有数字就存起来&#xff0c;用加号和换行符来分开 代码&#xff1a; #include<cstdio>…

【桶排】小 X 的密码破译

小 X 的密码破译 题目大意&#xff1a; 有一堆式子&#xff0c;去重再排序后&#xff0c;按规则求出结果 原题&#xff1a; 解题思路&#xff1a; 把每一个求出来的数丢到桶里&#xff0c;然后跑一遍就可以了 代码&#xff1a; #include<cstdio> using namespace s…

Uva12325 Zombie's Treasure Chest [二分区间+模拟退火]

Zombie’s Treasure Chest 题目链接 https://cn.vjudge.net/problem/UVA-12325 题意 两种物品无穷多个,第一种物品重量s1s_1s1​,价值v1v_1v1​,第二种物品重量s2s_2s2​,价值v2v_2v2​,背包重nnn,求能装的最大价值之和. 数据全都是2e92e92e9.也就是两种物品的完全背包. 题…

Identity Server 4 预备知识 -- OpenID Connect 简介

我之前的文章简单的介绍了OAuth 2.0 (在这里: 要用Identity Server 4 -- OAuth 2.0 超级简介, 还不是很全.这篇文章我要介绍一下 OpenID Connect.OAuth 2.0 不是身份认证协议OAuth 2.0 不是身份认证(Authentication)协议. 为什么有人会认为OAuth 2.0具有身份认证的功能? 这是因…

Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

Ocelot作为基于.net core的API网关&#xff0c;有一个功能是统一验证&#xff0c;它的作用是把没有访问权限的请求挡在API网关外面&#xff0c;而不是到达API网关事端的API时才去验证&#xff1b;之前我有一篇博文Ocelot统一权限验证&#xff0c;作过说明&#xff0c;这篇博文说…

【并查集】小 X 的液体混合

小 X 的液体混合 题目大意&#xff1a; 在一个玻璃瓶里&#xff0c;放入一些液体&#xff0c;某一对液体放在一起会有反应&#xff0c;当某个液体有反应时危险度就会乘2&#xff08;初值为1&#xff09;&#xff0c;问危险度最大是多少 原题&#xff1a; 解题思路&#xff1…

Swagger如何访问Ocelot中带权限验证的API

先亮源代码&#xff1a;https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo这篇博文不是对asp.net core中使用Swagger作介绍&#xff0c;因为社区博客作了详细说明。今天主要说一下Swagger在Ocelot网关权限验证模式下的访问&a…

etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能

介绍 今天推荐一款完全免费的ETCD客户端&#xff0c;可以私有化部署: etcd-workbench 开源地址&#xff1a;https://github.com/tzfun/etcd-workbench Gitee地址&#xff1a;https://gitee.com/tzfun/etcd-workbench 下载 本地运行 从 官方Release 下载最新版的 jar 包&am…

深度学习中反向传播算法简单推导笔记

反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)W(1)xb(1)z^{(1)} W^{(1)}xb^{(1)}z(1)W(1)xb(1) a(1)σ(z(1))a^{(1)} \sigma(z^{(1)})a(1)σ(z(1)) z(2)W(2)a(1)b(2)z^{(2)}W^{(2)}a^{(1)}b^{(2)}z(2)W(2)a(1)b(2) a(2)σ(z(2))a^{(2)} \sigm…

EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?

写过上一篇关于EF Core中读写分离最佳实践方式后&#xff0c;虽然在一定程度上改善了问题&#xff0c;但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库&#xff0c;同时有的指出是否可以进行底层无感知操作&#xff0c;这确实是个问题&#x…

一文搞清到底什么是 .NET?

现在各种 .NET 满天飞&#xff0c;别说新手了&#xff0c;连我这样的老手都差点被绕进去。到底什么是 .NET 呢&#xff1f;通俗易懂&#xff0c;什么是.NET?什么是.NET Framework&#xff1f;什么是.NET Core? 这篇文章好长呀&#xff0c;不知道你看完了没有&#xff0c;其实…

Service Mesh新成员:Consul 1.2

本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。原文链接&#xff1a;https://www.hashicorp.com/blog/consul-1-2-service-mesh作者&#xff1a;Mitchell Hashimoto 翻译&#xff1a;董干 转载自&#xff1a;https://blog.idevfun.io/consul-1-2-…

VAE(变分自编码器)学习笔记

VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高…

小 X 的 AK 计划

小 X 的 AK 计划 题目大意&#xff1a; 有n个点&#xff0c;到一个点&#xff08;时间为距离&#xff09;并花一些时间可以A掉此点&#xff0c;问最多可以A多少个点 原题&#xff1a; 解题思路&#xff1a; 先按位置从小到大排序&#xff0c;然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布&#xff0c;.NET Core 2.0 即将 "寿终正寝"&#xff0c;对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持&#xff08;LTS&#xff09;的版本&#xff0c;因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…

.Net Core开发日志——Global Tools

.Net Core 2.1引入了一个新的功能&#xff0c;Global Tools&#xff0c;其本质是包含控制台应用程序的nuget包&#xff0c;目前而言&#xff0c;还没有特别有用的工具&#xff0c;不过相信随着时间的推移&#xff0c;各种有创意或者实用性强的Global Tools会出现在大家的视野里…