这么多Apache顶级项目,SkyWalking为何一枝独秀?

吴晟

读完需要

5

分钟

速读仅需 2 分钟

吴晟

Apache基金会会员,Apache SkyWalking创始人、项目VP和PMC成员,Apache孵化器PMC成员,Apache ShardingSphere PMC成员,Apache APISIX (incubating) PPMC成员,Apache ECharts (incubating)和Apache DolphinScheduler (incubating)孵化器导师,Zipkin成员和贡献者,CNCF OpenTracing核心维护者。

导读:本文摘自于SkyWalking创始人吴晟撰写的《Apache SkyWalking实战》一书,详细讲述了SkyWalking的架构设计与优势。

徐郡明老师整理国内比较常见的 APM 如下:

APM 系统(Application Performance Management,即应用性能管理)

1.CAT: 由国内美团点评开源的,基于 Java 语言开发,目前提供 Java、C/C++、Node.js、Python、Go 等语言的客户端,监控数据会全量统计。

2.Zipkin: 由 Twitter 公司开发并开源,Java 语言实现。可以轻松与 Spring Cloud 进行集成,也是 Spring Cloud 推荐的 APM 系统。

3.Pinpoint: 韩国团队开源的 APM 产品,运用了字节码增强技术,只需要在启动时添加启动参数即可实现 APM 功能,对代码无侵入。目前支持 Java 和 PHP 语言,底层采用 HBase 来存储数据,探针收集的数据粒度非常细,但性能损耗较大,因其出现的时间较长,完成度也很高,文档也较为丰富,应用的公司较多。

4.SkyWalking: 国人开源的产品,2019 年 4 月 17 日 SkyWalking 从 Apache 基金会的孵化器毕业成为顶级项目。目前 SkyWalking 支持 Java、.Net、Node.js 等探针,数据存储支持MySQL、ElasticSearch等。SkyWalking 与 Pinpoint 相同,Java 探针采用字节码增强技术实现,对业务代码无侵入。探针采集数据粒度相较于 Pinpoint 来说略粗,但性能表现优秀。目前,SkyWalking 增长势头强劲,社区活跃,中文文档齐全,没有语言障碍,支持多语言探针,这些都是 SkyWalking 的优势所在,还有就是 SkyWalking 支持很多框架,包括很多国产框架,例如,Dubbo、gRPC、SOFARPC 等等,也有很多开发者正在不断向社区提供更多插件以支持更多组件无缝接入 SkyWalking。

还有很多不开源的 APM 系统,例如,淘宝鹰眼、Google Dapper 等等,不再展开介绍了。

1

   

SkyWalking 的架构设计

如图所示,SkyWalking 官方架构图对 SkyWalking 的整体架构进行了非常直观的描述。SkyWalking 由以下 4 个核心部分构成。

SkyWalking官方架构图

  • 探针。探针(对应图中Tracing和Mestrics部分)可以是语言探针,也可以是其他项目的协议。

  • OAP平台(Observability Analysis Platform),或称OAP Server。它是一个高度组件化的轻量级分析程序,由兼容各种探针的Receiver、流式分析内核和查询内核三部分构成。

  • 存储实现(Storage Implementors)。SkyWalking的OAP Server支持多种存储实现,并且提供了标准接口,可以实现其他存储。

  • UI模块(SkyWalking)。通过标准的GraphQL协议进行统计数据查询和展现。

从设计角度而言,SkyWalking总体遵循以下三大设计原则:

  • 面向协议设计

  • 模块化设计

  • 轻量化设计

1.1

   

面向协议设计

面向协议设计是 SkyWalking 从 5.x 开始严格遵守的首要设计原则。SkyWalking 包含下列对外协议。

1) 探针协议

探针协议分为四大类。

  • 语言探针上报协议。此协议包括语言探针的注册、Metrics数据上报、Tracing数据上报、命令下行,以及Service Mesh中使用的Telemetry协议。所有基于语言(Java、.NET、Node.js、PHP、Go等)的探针都需要严格遵守此协议定义。此协议从v6版本开始全部以gRPC服务方式对外提供。

  • 语言探针交互协议。因为分布式追踪,探针间需要借助HTTP Header、MQ Header等应用间通信管道进行交互。此协议定义交互格式。所有基于语言(Java、.NET、Node.js、PHP、Go等)的探针都需要严格遵守此协议定义。此协议从v2开始执行与v1不同的编码方法,加入了强制Base64的要求。将从SkyWalking 8开始执行的全新v3协议,简化了编码,提供了更多特性,比如透传业务信息、探针交互能力等。

  • Service Mesh协议。此协议是SkyWalking针对Service Mesh抽象的专有协议,任何Mesh类的服务都可以通过此协议直接上行Telemetry数据,用于计算服务Metrics和拓扑图。

  • 第三方协议。针对大型的第三方开源项目,尤其是Service Mesh核心平台Istio和Envoy,提供核心协议适配,支持针对Istio+Envoy的Service Mesh进行无缝监控。

2) 查询协议

查询协议使用GraphQL格式定义的查询协议。多数读者可能更熟悉RESTful格式的查询,但SkyWalking考虑到更好的扩展性、更加灵活的组合查询模式,选择了由Facebook在2012年开源的GraphQL。GraphQL在开源和商业项目中已经得到了广泛运用。协议格式的预定义和多种查询组合使用提供了UI和第三方系统良好的集成能力。熟悉SkyWalking历史的读者会知道,SkyWalking在6.0.0-GA之后的版本,更换了全新的RocketBot UI作为默认UI,这个过程得益于GraphQL的灵活性,后端协议和实现可以完全不变。社区中已有大量公司基于此协议包装了云平台产品的UI。

查询协议分为以下6类。

  • 元数据查询:查询在SkyWalking注册的服务、服务实例、Endpoint等元数据信息。

  • 拓扑关系查询:查询全局或者单个服务或Endpoint的拓扑图及依赖关系。

  • Metrics指标查询:线性指标查询。

  • 聚合指标查询:区间范围均值查询及TopN查询等。

  • Trace查询:追踪明细查询。

  • 告警查询。

除了上述两大类协议外,部分模块也存在一些模块内协议,如导出的数据格式协议、告警协议、动态配置服务协议等。这些协议与执行模块的默认实现有关,属于SkyWalking默认对外集成协议的范围,考虑到模块化设计,这些协议本身也是可以替换的,这里就不一一描述了。

1.2

   

模块化设计

模块化设计,旨在以开源项目为内核,为更多的企业内部定制服务、商业产品的二次包装及插拔机制提供插拨机制与扩展点。开源项目的一致性升级至关重要,模块化设计,明确接口边界,使得扩展很容易跟上开源版本升级的节奏。对于商业包装和开源产品的迭代发展,这是必不可少的一环。

大型的开源项目,无一不是由大量的商业公司/商业目的推进,不可能由个人凭兴趣在业余时间完成。虽然SkyWalking在早期的一到两年是个人基于兴趣在推进,但随着社区的壮大和商业价值的体现,开放、包容、具有扩展性的架构是必不可少的特性。Apache SkyWalking作为Apache顶级项目,基于商业友好的Apache 2.0开源协议,在设计上也充分考虑了定制化及二次开发的可能性。

SkyWalking根据探针和服务端的不同特性,使用了两种不同的模块化机制。

Java探针端,Java使用了较为紧凑的实现,主要使用SPI将核心服务隔离成替换状态,用户可以像开发plugin一样,只需将新的服务实现放在plugin目录中,即可实现自动替换。

后端(OAP Server)使用YML定义的模块化。SkyWalking将模块化定义为模块(Module)和实现(Provider)两部分。模块为抽象概念,提供对外服务方法的定义和声明;Provider需要实现这些服务方法,同时声明此实现依赖的其他模块。值得注意的是,模块本身不声明依赖,依赖由实现(Provider)声明。这种模式允许用户替换和新增所需的模块,并进行组织。

1.3

   

轻量化设计

SkyWalking在设计之初就提出了轻量化的设计理念。APM虽然是运维端的核心系统,但放在整套业务架构下,属于二线支撑系统,不承担系统主要业务功能。而绝大多数的分析系统要求大数据作为其核心技术,但是技术团队应该都了解,大数据天然具有维护难度大和门槛高的问题。基于此背景,SkyWalking核心要求能够在非大数据架构下,使用最轻量级的jar包模式,形成强大的分析能力、扩展能力和模块化能力。

2

   

SkyWalking 的优势

SkyWalking 的优势在于它紧跟当前的技术发展趋势,保证同一套 APM 系统适用于传统架构和云原生架构。另外,在技术设计理念上,SkyWalking 提供了较大的包容性和扩展性,适用于不同的用户场景和定制需求。

2.1

   

传统分布式架构与云原生的一致性支持

随着近十年服务化和微服务化的进程,以RPC和HTTP服务为通信技术核心,以注册中心作为服务注册与服务发现的架构,已经成为国内成熟的微服务“传统”架构。主流技术有Spring Cloud、Apache Dubbo等。SkyWalking从2015年项目诞生之初,就把这种传统的分布式架构及自动探针作为最为核心的功能。SkyWalking可以无缝支持已经稳定的分布式服务架构,方便替换传统的监控手段,而无须增加运维团队和开发团队的工作量。

同时,从2018年起,由Google、Lyft和CNCF的Istio与Envoy组成的Service Mesh方案开始流行,提供了在Kubernetes上创新的分布式服务管理、监控和安全管理能力。SkyWalking项目团队也一直关注这一动向,在Istio 1.0.4发布的同时发布了SkyWalking 6的测试版本,并在3个月后开始发布SkyWalking 6稳定版本。在6.x版本中,SkyWalking针对Istio和Envoy组成的Service Mesh方案提供了核心适配能力。用户可以认为Service Mesh构成了SkyWalking的一种新的语言无关的探针形式。利用SkyWalking的后端OAP平台以及UI,可以对Service Mesh管理中的服务提供同样的依赖拓扑、服务性能指标、告警等能力。90%以上的配置与使用其他语言探针(如Java探针)时完全一致。

这也是首个在开源软件中实现语言探针和Service Mesh一致性解决方案的项目。为不同公司的技术栈提供统一的监控能力,更有利于公司在未来系统架构升级中保持监控系统的一致性。这个一致性不单单指SkyWalking的使用,更是对于用户在SkyWalking构建的生态系统,如告警平台、AIOps、指标基线计算系统、弹性计算等,保持一致性。

2.2

   

易于维护

SkyWalking一直坚持以易于维护为核心需求,不引入过多的技术栈,以免成为一个过于复杂的监控系统。这其中的深层逻辑在于,监控系统作为二线甚至三线系统,应该利用有限的环境资源,提供尽可能大的监控价值,同时尽可能降低对于运维的要求。在SkyWalking集群模式下,大量公司每日需要采集超过百亿级别的监控数据及明细,SkyWalking不要求使用复杂的大数据平台,以减少系统的入门难度和维护负担。同时SkyWalking的构建集群架构比较简单,用户只要针对自己的数据量,对于不同的存储平台(如MySQL、TiDB或Elasticsearch等)具备基本的集群运维能力,就可以轻松监控百亿级的流量系统。

2.3

   

高性能

SkyWalking并不会因为追求简单、易于维护而降低对性能的要求。SkyWalking内置一套针对分布式监控专门设计的可扩展流计算框架(参见第7章),该计算框架针对监控数据特别设计了特定的流程,并利用字节码技术来兼顾扩展性和系统性能。

SkyWalking在永辉超市的典型公开案例中,使用15台OAP节点和20台Elasticsearch节点,就支撑了250多个服务每天高达3TB的监控数据,数据流量超过百亿。在6.x中,SkyWalking性能从6.0-GA到6.4,每个版本都得到了明显提升。

2.4

   

利于二次开发和集成

SkyWalking的二次开发和集成的便利性主要分为两方面。

面向协议和模块化的设计。面向协议保证其他的探针接入,只需要学习协议就可以轻松完成对接。而模块化给予用户深度定制的能力,模块实现的可切换使用户可以对分布式计算过程、集群管理与协调模式、存储、告警引擎、可视化页面等进行个性化定制。

大量的SkyWalking内置实现提供了第三方网络接口,HTTP或gRPC接口。用户可以使用第三方程序进行对接,而非进行程序改造。这样能保证SkyWalking版本升级时周边生态的稳定。而且在容器化大行其道的今天,网络接口集成的方式也更为友好。

SkyWalking的几百家公开用户大量使用了这些扩展方式,定制了丰富的内部系统,也保证了SkyWalking内核的稳定和高通用性。

关于SkyWalking的实战内容推荐阅读《Apache SkyWalking实战》一书,本文经出版社授权发布。

3

   

福利时间

dotnet跨平台 联合机械工业华章图书给大家带来福利时间。

送书规则:截止2020年7月31日13:30前在留言区,分享你在SkyWalking方面的心得与踩坑经验、或者对新技术的更新、迭代有何独特的个人见解,精选留言点赞前8名各送出此书一本。

注:获得赠书资格的读者须于8小时内联系小编发送详细收货信息,逾期则视为主动放弃。

推荐语:《Apache SkyWalking实战》从功能使用、项目设计、核心模块、工作原理、扩展实践5个维度全面讲解SkyWalking,由SkyWalking的创始人吴晟与核心开发团队撰写,得到了来自华为、百度、蚂蚁金服、京东数科、Tetrate.io的5位资深技术专家的联袂推荐。

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

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

相关文章

[RabbitMQ]工作原理_原理名词解释

RabbitMQ 核心部分 各个名词介绍 RabbitMQ工作原理 Broker: 接收和分发消息的应用,RabbitMQ Server 就是 Message Broker Virtual host: 出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类…

Istio 中的授权策略详解

本文节选自 ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实践》,阅读地址:https://www.servicemesher.com/istio-handbook/授权功能是 Istio 中安全体系的一个重要组成部分,它用来实现访问控制的功能&#xff…

[RabbitMQ]创建Java开发环境_消费者_生产者

我们将用 Java 编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。我们将介绍 Java API 中的一些细节。 在下图中&#xff0c;“ P”是我们的生产者&#xff0c;“ C”是我们的消费者。中间的框是一个队列-RabbitMQ 代表使用者保留的消息缓冲区 引入依赖 <…

如何利用Gitlab-CI持续部署到远程机器?

长话短说&#xff0c;今天聊一聊使用Gitlab-CI 自动部署到远程服务器。如果看过《基于docker-compose的Gitlab CI/CD实践&排坑指南》这篇文章的朋友&#xff0c;会注意到我是在 Gitlab-Runner服务器上自动部署的站点&#xff0c;本次我们结合ssh部署到远程机器(将CI服务器和…

[RabbitMQ]工作队列原理_代码实现

Work Queues 工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务&#xff0c;而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时&#xff0c;这些工作…

使用ImpromptuInterface反射方便的创建自定义DfaGraphWriter

在本文中&#xff0c;我为创建的自定义的DfaGraphWriter实现奠定了基础。DfaGraphWriter是公开的&#xff0c;因此您可以如上一篇文章《将终结点图添加到你的ASP.NET Core应用程序中》中所示在应用程序中使用它&#xff0c;但它使用的所有类均已标记为internal。这使得创建自己…

[RabbitMQ]消息应答概念_消息手动应答代码

消息应答 概念 消费者完成一个任务可能需要一段时间&#xff0c;如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了&#xff0c;会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息&#xff0c;便立即将该消 息标记为删除。在这种情况下&#xff0c;突然有…

rust火箭基地主楼开启方法_Rust 为什么能成为 Stack Overflow 最受欢迎的语言?

每年&#xff0c;开发者问答网站 Stack Overflow 都会对程序员社区展开年度调查&#xff0c;包括他们最喜爱的技术到工作偏好的所有内容。 在2017 年和2018 年Stack Overflow 年度开发者调查中&#xff0c;Rust语言已经连续两年成为最受欢迎语言Top 1。2018 年 Stack Overflow …

[RabbitMQ]队列持久化

RabbitMQ持久化 概念 如何保障当 RabbitMQ 服务停掉以后消息生产者发送过来的消息不丢失。默认情况下 RabbitMQ 退出或由于某种原因崩溃时&#xff0c;它忽视队列和消息&#xff0c;除非告知它不要这样做。确保消息不会丢失需要做两件事&#xff1a;我们需要将队列和消息都标…

微服务认证架构如何演进来的?

【答疑解惑】| 作者 / Edison Zhou这是恰童鞋骚年的第267篇原创内容之前有同事问为何要用基于JWT令牌的认证架构&#xff0c;然后近期又有童鞋在后台留言问微服务安全认证架构的实践&#xff0c;因此我决定花两篇推文来解答一下。为了答好这个话题&#xff0c;我们先来看看微服…

maskrcnn还可以加网络吗_绿茶加蜂蜜的功效,绿茶可以加蜂蜜吗?

绿茶是我国的主要茶类之一&#xff0c;是一种天然健康的饮料&#xff0c;蜂蜜也是一种营养丰富的滋补食品&#xff0c;有些人不喜欢绿茶的苦味&#xff0c;想放点蜂蜜中和一下&#xff0c;但是不知道能不能这样做。那么绿茶能不能加蜂蜜呢?蜂蜜的主要成分是葡萄糖、果糖&#…

三分钟Docker-镜像、容器实战篇

本文主要内容&#xff1a;Docker 镜像、容器 常用命令整理使用Docker常见命令&#xff0c;搭建Consul集群通过创建自定义镜像&#xff0c;把.NetCore Api运行在Docker中1.镜像、容器命令镜像序号命令描述1docker image build基于Dockerfile创建镜像2docker image history显示镜…

手机键鼠映射软件_吃鸡,我最专业!---盖世小鸡键鼠吃鸡套装评测

Hello大家好&#xff0c;欢迎浏览这篇评测贴。首先很荣幸能够参与本期的评测&#xff0c;毕竟如此炫酷富有科技感的装备是可遇而不可求的&#xff0c;所以不论是得知入选还是收到快递开箱的时候&#xff0c;心情都是无比激动。话不多说&#xff0c;接下来就让我带你走进这个不一…

[Redis6]Redis启动_前台启动和后台启动

前台启动(不推荐) 前台启动&#xff0c;命令行窗口不能关闭&#xff0c;否则服务器停止 redis-server 关闭redis ctrlC : 关闭 后台启动&#xff08;推荐&#xff09; 备份redis.conf cd redis-6.2.6/cp redis.conf /etc/redis.confcd /etc后台启动设置daemonize no改成y…

深入剖析.NETCORE中CORS(跨站资源共享)

前言由于现代互联网的飞速发展&#xff0c;我们在开发现代 Web 应用程序中&#xff0c;经常需要考虑多种类型的客户端访问服务的情况&#xff1b;而这种情况放在15年前几乎是不可想象的&#xff0c;在那个时代&#xff0c;我们更多的是考虑怎么把网页快速友好的嵌套到服务代码中…

ai进入轮廓模式怎么退出_详解AI中扩展、扩展外观、轮廓化描边、创建轮廓

详解AI中扩展、扩展外观、轮廓化描边、创建轮廓在学习AI软件中&#xff0c;有不少同学分不清扩展、扩展外观、轮廓化描边、创建轮廓这四个概念具体的功能区别&#xff0c;今天我们具体聊一下。先说“扩展”&#xff0c;扩展是把复杂物体拆分成最基本的路径。矢量物体在组合&…

[Redis6]Redis相关知识介绍

Redis介绍相关知识 端口6379 6379 是 "MERZ " 九宫格输入法对应的数字。Alessia Merz 是一位意大利舞女、女演员。 Redis 作者 Antirez 早年看电视节目&#xff0c;觉得 Merz 在节目中的一些话愚蠢可笑&#xff0c;Antirez 喜欢造“梗”用于平时和朋友们交流&#x…

【Power Automate】如何自动生成Word与PDF文件[上]

上半年已经悄悄溜走&#xff0c;因为疫情&#xff0c;大家似乎也很习惯于在家办公。作为业务人员&#xff0c;如何汇报自己的工作&#xff0c;让自己更多地学习和掌握数字化办公技巧至关重要。那么今天我们就来看一下在不使用代码的情况下&#xff0c;如何通过Power Automate自…

easyui datagrid 中怎么选中所有页面的数据_学会这5个Excel中常用技巧,可以准时下班去摆摊了...

Excel是大家常用的办公工具之一&#xff0c;虽说上手简单&#xff0c;但是想要精通还是要下一些功夫的。最近有些小伙伴在留言吐槽说Excel数据处理时很方便&#xff0c;但是操作起来还是挺费时间的&#xff0c;其实工作是离不开技巧的&#xff0c;今天要跟大家分享的5个Excel技…

五年了,别再把务虚会开 “虚” 了

这是头哥侃码的第210篇原创上个月&#xff0c;为了配合公司的半年度战略讨论会&#xff0c;我特意留出一个周六的时间&#xff0c;与几位Leader在公司的会议室里开了一次部门半年度务虚会。让我没想到的是&#xff0c;几位小伙伴在这次讨论过程中都表现得非常亢奋&#xff0c;所…