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

  

                                架构图

  对于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和收集器集群之间的处理流示例

  

  四、收集器集群发现

  当收集器以集群模式运行时,收集器必须以某种方式发现彼此。在默认情况下,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

Apache SkyWalking的架构设计【译文】的更多相关文章

  1. [Apache Atlas] Atlas 架构设计及源代码简单分析

    Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...

  2. Apache Hadoop 2.9.2 的Federation架构设计

    Apache Hadoop 2.9.2 的Federation架构设计 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文件,说明你对NameNode的工作原理想必已经了如 ...

  3. Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控

    在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的.小的模块或者重用已经有的模块来构建复杂的系统.随着模块的不断增多,一次请求可能会涉及到十几 ...

  4. 架构设计:系统间通信(20)——MQ:消息协议(下)

    (接上文<架构设计:系统间通信(19)--MQ:消息协议(上)>) 上篇文章中我们重点讨论了"协议"的重要性.并为各位读者介绍了Stomp协议和XMPP协议. 这两种协 ...

  5. Apache SkyWalking 告警配置指南

    Apache SkyWalking Apache SkyWalking是分布式系统的应用程序性能监视工具(Application Performance Management,APM),专为微服务.云 ...

  6. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  7. 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

    在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...

  8. 基于 Angularjs&Node.js 云编辑器架构设计及开发实践

    基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...

  9. 【转】Flume(NG)架构设计要点及配置实践

    Flume(NG)架构设计要点及配置实践   Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...

随机推荐

  1. noi2015品酒大会(sa)

    用常用的套路,排序之后从大到小插入height,用并查集维护即可. #include<iostream> #include<cstring> #include<cstdi ...

  2. hiho 第六周 01背包

    简单的01背包,没有报名,这周的没有权限提交 #include<iostream> #include<memory.h> using namespace std; #defin ...

  3. ASP.NET Core 统一异常处理和返回

    业务场景: 业务需求要求,需要对 ASP.NET Core 异常进行统一处理和返回,比如出现 500 错误和业务服务错误进行不同的处理和返回. 具体实现: using Microsoft.AspNet ...

  4. ArcEngine不同种类的工作空间建立查询ICursor时“超出系统资源”

    环境 这里我的工作空间有两种:mdb库和SDE库分别打开的工作空间. 查询语句:使用Field in ('1','2')查询方式来得到游标对象. 错误 当查询语句中in后面的条件值大于1500时,在I ...

  5. 选项卡--原生js

    比较基础的一个特效,毕业设计要做一些记录,就把这些都记下来吧,万一用到的时候忘了呢 function changeTab() { let navs = document.getElementsByTa ...

  6. React中的“双向绑定”

    概述 React并不是一个MVVM框架,其实它连一个框架都算不上,它只是一个库,但是react生态系统中的flux却是一个MVVM框架,所以我研究了一下flux官方实现中的"双向绑定&quo ...

  7. HoloLens开发手记 - HoloLens上的应用视图 App views on HoloLens

    运行在HoloLens上的应用可能包含2种视图,分别是全息视图和2D视图.应用可以在全息视图和2D视图之间转换,这常被用于访问系统提供的接口,例如虚拟键盘.拥有至少一个全息视图的应用被归类为全息应用. ...

  8. servlet(二)

    http协议 (1)什么是http协议? 是一种网络应用层协议,规定了浏览器如何与web服务器之间进行通信以及相应的 数据包的结构. 浏览器与web服务器之间如何通信? step1.建立连接 step ...

  9. 看看一个老程序员如何手写SpringMVC!

    人见人爱的Spring已然不仅仅只是一个框架了.如今,Spring已然成为了一个生态.但深入了解Spring的却寥寥无几.这里,我带大家一起来看看,我是如何手写Spring的.我将结合对Spring十 ...

  10. Ubuntu 16.04下如何安装VMware-Workstation

    一.下载 下载地址:https://my.vmware.com/cn/group/vmware/details?downloadGroup=WKST-1411-LX&productId=686 ...