SkyWalking 分布式链路追踪:最新 Kafka 通信模型设计

Stella981
• 阅读 592

**SkyWalking** 是一个开源 **APM** 系统,包括针对 **Cloud Native** 体系结构中的分布式系统的监视、跟踪、诊断功能。核心功能如下:

- 服务、服务实例、端点指标分析

- 根本原因分析,在运行时分析代码

- 服务拓扑图分析

- 服务、服务实例和端点依赖性分析

- 检测到慢速服务和端点

- 性能优化

- 分布式跟踪和上下文传播

- 数据库访问指标。检测慢速数据库访问语句(包括 **SQL** 语句)

- 报警

**SkyWalking** 目前是 **Apache** 顶级项目,作为这么优秀的开源项目,它的架构设计理念肯定会有很多值得我们借鉴。

消息中间件选型生态方法论

中间件是为应用提供通用服务和功能的软件。数据管理、应用服务、消息传递、身份验证和 **API** 管理通常都要通过中间件。中间件可以帮助开发人员更有效地构建应用。它就如同是应用、数据与用户之间的纽带。

对于具有多云和容器化环境的企业而言,中间件可以助您大规模、经济高效地开发和运行应用。

中间件是介于操作系统和在其上运行的应用程序之间的软件。中间件实质上充当隐藏转换层,实现了分布式应用程序的通信和数据管理。它有时被称为管道,因为它将两个应用程序连接在一起,使数据和数据库可在“管道”间轻松传递。通过中间件,用户可执行很多请求,例如在 **Web** 浏览器上提交表单,或者允许 **Web** 服务器基于用户的配置文件返回动态网页。

常见的中间件示例包括数据库中间件、应用程序服务器中间件、面向消息的中间件、**Web** 中间件和事务处理监视器。每个程序通常都会提供消息传递服务,让不同的应用程序可使用简单对象访问协议(**SOAP**)、**Web** 服务、表述性状态转移(**REST**)和 **JavaScript** 对象表示法(**JSON**)等消息传递框架进行通信。虽然所有中间件都执行通信功能,但公司选用的类型将取决于要使用的服务以及需要传达的信息类型。这可包括安全身份认证、事务管理、消息队列、应用程序服务器、**Web** 服务器和目录。中间件还可用于实时发生的操作的分布式处理,而不是来回发送数据。

这里我要重点分析的是消息中间件,基于消息的中间件可以说是我们日常开发中经常接触和使用的,这个属于常规技术栈。

消息中间件,那么我在这里也不会一一对比,因为网上对比的文章太多了,现阶段主流的使用频率非常高的就两款,**Kafka**和**RocketMQ**。

简单说明下场景,比较精辟。**Kafka**适用于高吞吐量,然后能够容忍一部分消息丢失,比如日志收集场景,**RocketMQ**使用于高可靠性和一定的吞吐量的业务场景,比如金融支付场景。

中间件选型的方法论其实很简单,就是要从业务场景和中间件功能的匹配度程度以及维护这么一套系统的成本来考虑。从长远的角度就是扩展和成本,从短期角度也是收益和成本。

我们通常从技术的角度,比如高可用、高性能、高并发以及高吞吐量连判断一个消息中间件,但是其实任何一个能够开源出来的中间件,其实都不差,重点是在我们怎么使用,并能够吃透原理,这样才能真正发挥它的价值,我见过好多团队在使用开源的消息中间件的时候经常吐槽,说很烂,很不好用,但是你要想想,如果是你自己写,花半年的时间写出来的消息中间件可能还不如人家的,也有可能到处都是 **bug**,因为你的没有更多的业务场景来验证,开源的消息中间件至少已经被社区的人植入了更多更广泛的业务场景。

选型消息中间件的独门秘籍我这边推荐是:借力打力,解决当下,着眼未来,考虑生态。

SkyWalking 分布式链路追踪:最新 Kafka 通信模型设计

如果想了解更多文章详情,请关注作者的原创文章:

SkyWalking 分布式链路追踪:最新 Kafka 通信模型设计

https://gitbook.cn/new/gitchat/activity/5f2d5e65ba074467ee7ac393

往期文章精选:

分布式链路追踪:Skywalking 的链路模型设计

分布式链路追踪:Skywalking 探针模型设计

分布式链路追踪 Skywalking:告警和度量架构设计

分布式链路追踪 Skywalking:插件化和模块化架构设计

分布式链路追踪Skywalking  Skywalking 存储客户端设计

源码分析-分布式链路追踪:Skywalking存储插件能力-elasticsearch

游侠--架构师玄学之路的独立运营者,也许文章更新频率没有那些团队运营者高,但每篇文章都是作者的心血,欢迎支持原创。

本文分享自微信公众号 - 架构师玄学之路(andy_aty)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Skywalking、SpringCloudGateway以及SpringWebFlux如何融合
SkyWalking 是一个开源APM系统,包括针对CloudNative体系结构中的分布式系统的监视、跟踪、诊断功能。核心功能如下:\服务、服务实例、端点指标分析\根本原因分析,在运行时分析代码。\服务拓扑图分析\服务,服务实例和端点依赖性分析\检测到慢速服务和端点\
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这