Apache SkyWalking的架构设计【译文】
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来为收集器集群做命名查询。
Apache SkyWalking的架构设计【译文】的更多相关文章
- [Apache Atlas] Atlas 架构设计及源代码简单分析
Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...
- Apache Hadoop 2.9.2 的Federation架构设计
Apache Hadoop 2.9.2 的Federation架构设计 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文件,说明你对NameNode的工作原理想必已经了如 ...
- Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控
在大型网站系统设计中,随着分布式架构,特别是微服务架构的流行,我们将系统解耦成更小的单元,通过不断的添加新的.小的模块或者重用已经有的模块来构建复杂的系统.随着模块的不断增多,一次请求可能会涉及到十几 ...
- 架构设计:系统间通信(20)——MQ:消息协议(下)
(接上文<架构设计:系统间通信(19)--MQ:消息协议(上)>) 上篇文章中我们重点讨论了"协议"的重要性.并为各位读者介绍了Stomp协议和XMPP协议. 这两种协 ...
- Apache SkyWalking 告警配置指南
Apache SkyWalking Apache SkyWalking是分布式系统的应用程序性能监视工具(Application Performance Management,APM),专为微服务.云 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- 架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)
在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调 ...
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
- 【转】Flume(NG)架构设计要点及配置实践
Flume(NG)架构设计要点及配置实践 Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...
随机推荐
- 通过selenium登录网页获取特定信息
前言 最近有需求要登录网站查询一些信息,然后再修改一些信息,而且这种工作重复性很强,想着通过自动化的方式来做这个东西. 技术选择 自动化的方式开始考虑的是用python的爬虫来做,但是登录的网站有好多 ...
- 在ng-repeat内Checkbox默认选中
Angularjs的ng-repeat是用来循环产生呈现数据. 当我们需要在ng-repeat循环中呈现一系列Checkbox时,某些checkbox选项是默认选中的. 在ASP.NET MVC程序中 ...
- “全栈2019”Java多线程第三十七章:如何让等待的线程无法被中断
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- ACM知识点分类
(知识点分类.看完想(╯‵□′)╯︵┻━┻) orz...一点点来吧.简单标记一下. 蓝色,比较熟悉,能够做. 蓝绿色,一般熟悉,需要加强 红色,(比个辣鸡.jpg) (标记完突然想打人...) 第一 ...
- Windows10开发手记-Windows App Certification Kit使用教程
最近有同学通过MVP的渠道询问我Windows 10应用提交审核前是否有工具能够像win7一样做App兼容性测试,其实Windows SDK已经继承了一套优秀的App测试认证工具,这可以帮助我们快速通 ...
- iOS-实现后台长时间运行
前言 一般APP在按下Home键被挂起后,这时APP的 backgroundTimeRemaining 也就是后台运行时间大约只有3分钟,如果在退出APP后,过十几二十二分钟或者更长时间再回到APP, ...
- 可能比文档还详细--VueRouter完全指北
可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...
- web自动化测试---自动化脚本设置百度搜索每页显示条数
前面学的都是基础知识,本篇将进入实战练习 以百度“搜索设置”为对象进行测试用例的写作: 百度的搜索设置在首页的“设置”里面,鼠标悬停之后即可显示,如下图红框位置: 测试目标是,修改每页的显示条数为50 ...
- Nginx+Keepalived 实现高可用
Keepalived 是一个高性能的 服务器高可用 或 热备解决方案,Keepalived主要来防止服务器单点故障的问题,可以通过其与Nginx的配合来实现web服务端的高可用. Keepalived ...
- Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务
在使用 Spring Cloud 体系来构建微服务的过程中,用户请求是通过网关(ZUUL 或 Spring APIGateway)以 HTTP 协议来传输信息,API 网关将自己注册为 Eureka ...