终于!SOFATracer 完成了它的链路可视化之旅

剖析 SOFATracer:蚂蚁金服开源分布式链路追踪组件 本文围绕 SOFATracer 的设计理念与工程实现,系统解析其基于 OpenTracing 的链路模型、高性能异步日志机制、SLF4J MDC 上下文传递能力以及在分布式系统中的可观测性实践,结合源码与架构视角,剖析其在性能、稳定性与工程落地之间的关键取舍,为构建可解释的微服务系统提供参考。 阅读详情

📄

文|赵陈(SOFA 开源之夏链路项目组)

武汉理工大学计算机工程硕士在读

研究方向:唐卡线稿的自动上色

校对|宋国磊(SOFATracer commiter)

本文 6971 字 阅读 18 分钟

▼

背 景

有幸参与开源软件供应链点亮计划——暑期 2021 支持的开源项目,目前 SOFATracer 已经能够将埋点数据上报到 Zipkin 中,本项目的主要目标是将产生的埋点数据上报给 Jaeger 和 SkyWalking 中进行可视化展示。

PART. 1

SOFATracer

SOFATracer 是蚂蚁集团基于 OpenTracing 规范开发的分布式链路跟踪系统,其核心理念就是通过一个全局的 TraceId 将分布在各个服务节点上的同一次请求串联起来。通过统一的 TraceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的,这些链路数据可用于故障的快速发现,服务治理等。

SOFATracer 提供了异步落地磁盘的日志打印能力和将链路跟踪数据上报到开源产品 Zipkin 做分布式链路跟踪展示的能力。这次参加开源之夏活动的任务是要把链路跟踪数据上报到 Jaeger 和 SkyWalking 中进行展示。

 SOFATracer 数据上报 

946eacb9f4b7d6eb00a873cce1bb7c73.png

上图是 SOFATracer 中的链路上报流程,Span#finish 是 span 生命周期的最后一个执行方法,这是整个数据上报的入口,SOFATracer 的 report span 方法中含有上报链路展示端和日志落盘两个部分。SOFATracer 中没有把上报数据采集器和日志落盘分开只是在日志落盘之前调用 SOFATracer#invokeReporListeners 方法,找到系统中所有实现了 SpanReportListener 接口并加入了 SpanReportListenersHolder 的实例,调用其 onSpanReport 方法完成链路数据上报至数据采集器。下面的代码片段是 invokeReportListeners 方法的具体实现。

protected void invokeReportListeners(SofaTracerSpan sofaTracerSpan) {
    List<SpanReportListener> listeners = SpanReportListenerHolder
        .getSpanReportListenersHolder();
    if (listeners != null && listeners.size() > 0) {
        for (SpanReportListener listener : listeners) {
            listener.onSpanReport(sofaTracerSpan);
        }
    }
}

SpanReportListenerHolder 中的实例在项目启动的时候加入,且分为 Spring Boot 应用和 Spring 应用两种情况:

- 在 Spring Boot 应用中自动配置类 SOFATracerSpanRemoteReporter 会将当前所有 SpanReportListener 类型的 bean 实例保存到 SpanReportListenerHolder 的 List 对象中。SpanReportListener 的实例对象会在各自的 AutoConfiguration 自动配置类中注入到 IOC 容器中。

- 在 Spring 应用中通过实现 Spring 提供的 bean 生命周期接口 InitializingBean,在 afterPropertiesSet 方法中实例化 SpanReportListener 的实例对象并且加入到 SpanReportListenerHolder 中。

要实现把 SOFATracer 中的 trace 数据上传到 Jaeger 和 SkyWalking 需要实现 SpanReportListener 接口并在应用启动的时候把对应实例加入到 SpanReportListenersHolder 中。

PART. 2

Jaeger 数据上报 

下图是 Jaeger 中数据上报的部分图示,图中 CommandQueue 中存放的是刷新或添加指令,生产者是采样器和 flush 定时器,消费者是队列处理器。采样器判断一个 span 需要上报后向 CommandQueue 中添加一个 AppendCommand,flush 定时器根据设置的 flushInterval 不断向队列中添加 FlushCommand,队列处理器不断从 CommandQueue 中读取指令判断是 AppendCommand 还是 FlushCommand,如果刷新指令把当前 byteBuffer 中的数据发送到接受端,如果是添加指令把这个 span 添加到 byteBuffer 中暂存。

e5c7b8d91201546208a1907f699f0246.png

在实现上报到 Jaeger 过程中主要工作是 Jaeger Span 和 SOFATracer Span 模型的转换,转换过后利用上面的逻辑发送 span 到后端。

520fa6cab2423011fa7cff292a44e343.png

上图是 Jaeger 中 Sender 的 UML 图,从图中可以看到有两种类型的 Sender 分别是 HTTPSender 和 UDPSender 。分别对应用 HTTP 发送数据和 UDP 发送数据,在实现 SOFATracer 上报 Jaeger 中使用 UDPSender 发送 span 数据到 Jaeger Agent 中,使用 HTTPSender 直接发送数据到 Jaeger-Collector 中。

 Jaeger Span 与 SOFATracer Span 

 模型的转换 

模型转换对照

4c47f36a61f075d27eb78f7783512775.png

TraceId 和 SpanId 的处理

TraceId 的转换:

- 问题在 SOFATracer 中的 TracerId 的产生规则是:服务器 IP + ID 产生的时间 + 自增序列 + 当前进程号

例如 :0ad1348f1403169275002100356696 前 8 位 0ad1348f 即产生 TraceId 的机器的 IP,这是一个十六进制的数字,每两位代表 IP 中的一段,我们把这个数字,按每两位转成 10 进制即可得到常见的 IP 地址表示方式 10.209.52.143,您也可以根据这个规律来查找到请求经过的第一个服务器。后面的 13 位 1403169275002 是产生 TraceId 的时间。之后的 4 位 1003 是一个自增的序列,从 1000 涨到 9000,到达 9000 后回到 1000 再开始往上涨。最后的 5 位 56696 是当前的进程 ID,为了防止单机多进程出现 TraceId 冲突的情况,所以在 TraceId 末尾添加了当前的进程 ID。

——TraceId 和 SpanId 生成规则

在 SOFATracer 中 TraceId 是 String 类型,但是在 Jaeger 中 TraceId 是使用的两个 Long 型的整数来构成最终的 TraceId。

解决方案

在 Jaeger 中表示 TraceId 的是 TraceIdHigh 与 TraceIdLow 在内部再使用函数将两者转换成 String 类型的 TraceIdAsString 在拼接的过程中分别将两个 ID 转换为对应的 HexString,当  HexString 不够 16 位时头部加 0。

private String padLeft(String id, int desiredLength) {
    StringBuilder builder = new StringBuilder(desiredLength);
    int offset = desiredLength - id.length();


    for (int i = 0; i < offset; i++)
        builder.append('0');
    builder.append(id);
    return builder.toString();
}

SpanId 的转化

- 问题在 Jaeger 中 SpanId 是 Long 型整数,在 SOFATracer 中是 String 类型。

- 解决办法这个问题的解决办法同之前已有的转化为 Zipkin 中的 SpanId 的解决办法一样,也是使用 FNV Hash 将 String 映射成冲突较小的 Long 型。

 两种上传方式 

配合 Jaeger Agent

The Jaeger agent is a network daemon that listens for spans sent over UDP, which it batches and sends to the Collector. It is designed to be deployed to all hosts as an infrastructure component. The agent abstracts the routing and discovery of the Collectors away from the client.

Jaeger Agent 被设计成一种基本组件部署到主机上,能够将路由和发现 Collector 的任务从 client 中抽离出来。Agent 只能接受通过 UDP 发送的 Thrift 格式的数据,所以要使用 Jaeger Agent 需要使用 UDPSender。

使用 HTTP 协议上报 Collector

当使用 UDP 上报到 Jaeger Agent 的时候为了保证数据不在传输过程中丢失应该把 Jaeger Agent 部署在服务所在的机器,但是有的情况不能满足前述要求,这时可以使用 HTTP 协议直接发送数据到 Collector,这时使用 HTTPSender。

PART. 3

SkyWalking 数据上报

SkyWalking 是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器架构而设计,提供分布式追踪、服务网格遥测分析、度量聚合和可视化的一体化解决方案。SkyWalking 采用字节码注入的方式实现代码的无侵入,且性能表现优秀。SkyWalking 的 receiver-trace 模块可以通过 gRPC 和 HTTPRestful 服务接受 SkyWalking 格式的 trace 数据,在实现上报 SkyWalking 中选择的上报方式是通过 HTTPRestful 服务上报。

 模型转换对照 

4e78eab3b8a6c7d195278395caf8410b.png

 SegmentId、SpanId、PatentSpanID 的转换 

SOFATracer 中的 SpanId 是一个字符串,但是在 SkyWalking 中 SpanId 和 ParentSpanId 是一个 int 整数并且每一个 segment 中的 SpanId 都是从 0 开始编号,SpanId 最大值由配置的一个 segment 中最多有多少 span 指定。在转换过程中需要指定 SpanId,因为现在每一个 segment 中只有一个 span,所以转换生成的 segment 中的 span 的 ID 可以固定成 0。

SegmentId 是用来唯一标识一个 segment 的,如果 segmentId 相同前一个 segment 会被后面的 segment 覆盖导致 span 丢失。最后使用的 segmentId 的构造方式是 segmentId = traceId + SpanId 哈希值 + 0/1,其中 0 和 1 分别代表 server 和 client。最后需要加上 client 和 server 的原因是在 Dubbo 和 SOFARPC 中存在 server -> server 的情况,其中 RPC 调用的 client、server span 的 SpanId 和 parentId 都一样,需要以此来区分它们,否则 client 端的 span 会被覆盖。

 Dubbo 与 SOFARPC 的处理 

基本的模型是 client-server-client-server-. 这种模式,但是在 Dubbo 和 SOFARPC 中存在 server -> server 的情况,其中 client span、server span 两个 span 除了 kind 类型不同之外,其他的信息是一样。

- parentSegmentId 

要找出 parentSegmentId,在非 SOFARPC 和 Dubbo 情况下,遵循 server -> client, client -> server 也就是 client 的父 spa 只能是 server 类型的,server 类型的父 span 只能为空或 client 类型。转换方式是在 SOFARPC 和 Dubbo 中,根据使用 SkyWalking Java Agent 上报时两者的链路展示情况,转化按照:

  1. server span:parentSegmentId = traceId + parentId 哈希值 + client(1)

  2. client span:parentSegmentId = traceId + parentId 哈希值 + server(0)

  3. server span:parentSegmentId = traceId + spanId 哈希值 + client(1)

  4. client span :parentSegmentId = traceId + parentId 哈希值 + server(0)

- 字段和 networkAddressUsedAtPeer 字段:

  • Peer 字段

    在 Dubbo 中 Peer 字段可以通过 remote.host、remote.port 两个 tag 组成 SOFARPC 中在 remote.ip 中包含了 IP 和 port,只使用 IP,因为在 server 端上报的 span 中无法获得 client 使用的是自己的哪个端。

  • networkAddressUsedAtPeerDubbo

    可以通过 local.host、local.port 组成 SOFARPC 中不能直接从 span 中获取到本机的 IP,使用的是获取本机的第一个有效 IPv4 地址,但是没有端口号,所以在上面的 peer 字段中也只用了 IP。

 展示拓扑图 

在构建链路的过程中几个比较关键的字段是 peer、networkAddressUsedAtPeer 、parentService、parentServiceInstance、parentEndpoint。其中 Peer 和 networkAddressUsedAtPeer 分别表示对端地址以及 client 端调用当前实例使用的地址,这两个字段的作用是将链路中的实例连接起来,如果这两个字段缺失会导致链路断开,在转换过程中这两个字段通过在 span 的 tag 中寻找或获取本机第一个合法的 IPv4 地址获得。后三个字段的作用是指出对应的父实例节点,如果不设置这三个字段会产生一个空的实例信息,如下图所示。目前 SOFATracer 中在能在上下文中传播的只有 TraceIdSpanId、parentId、sysBaggage、bizBaggage 从其中无法得到以上的三个字段,为了能展示拓扑图在 SOFATracer 的上下文中增加了七个字段 service、serviceInstance、endpoint、parentService、parentServiceInstance、parentEndpoint、peer 这样就能够在转换的过程中获得父服务的相关信息。

b80ab1247b938c98e6c11cb17ba4cf53.png

 异步上传 

使用 HTTP 上报 Json 格式的 segment 数据到后端,上报时以 message 为单位,多个 segment 组合成一个 message。

流程如下图,span 结束后将转换好的 segment 加入到 segment 缓冲数组中,另一个线程不断到数组中刷新数据到 message,当 message 的大小达到最大值或等待发送的时间达到设定值就发送一次数据,设置的 message 最大默认为 2MB。

37e6ad50ce1aad607cda7e53699070d4.png

PART. 4

压 测

 测试配置 

- Windows 10

- Memory 16G

- Disk 500GB SSD

- Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz  2.80GHz 

 测试方式 

部署一个包含六个服务的调用链路。设置三组对照:

- 不采集 span

- 50% 采集

- 全量采集 

 Jaeger 测试结果 

测试中相关的几个参数设置如下:

039767e7c0e85175e8daf6f75898ca5a.png

Jaeger Agent 方式

全量采集

9cdfaef6fcb9c943c35ab457d9e20835.png

50% 采集

6b14d9558bbc03a393d24dce5fa68277.png

不采集

fa83399f7900bafd933e6272725817af.png

上报 Jaeger Collector

全量采集

ee47fcd41194b59daca2edafbd58f68f.png

50%采集

43ee42044dbbe957e606279ca259a3da.png

不采集

e537867724144d374372f9079edd74b1.png

 SkyWalking 测试结果 

全集采集

c62c0855b8c8d35e95d6f301f6c0e286.png

50% 采集

9fe0c9d66edaceed8ba33782c300e4db.png

不采集

31bb4b655645952f2cdefdfd59fb2afb.png

测试小结

5504884e23e2aff752be19223c82cbd4.png

在全采样时三种上报方式中上报 SkyWalking 的本机吞吐率是最低的只有 512.75/sec,相比于上报 Jaeger Agent 吞吐率下降了约 14%,相比于上传 Jaeger Agent 吞吐率减少了 11.89%。就每种方式对比全采样与不采样时吞吐率的变化:上报 Jaeger Agent 时因为全采样吞吐率下降了 14.6%,上报 Jaeger Collector 时因为全采样吞吐率下降了 17%,上报 SkyWalking 时因为全采样吞吐率下降了约 23%。

本次介绍的 SOFATracer 的链路可视化,将会在下个版本 release。

-

「收获」

很幸运能够参加这次的开源之夏活动,在阅读 SOFATracer 源码的过程中学习了很多优秀的设计思想与实现方式,实现的过程中会去模仿一些源码的实现方式在这个过程中自己学习到了很多。在项目实施过程中也发现了自己的一些问题,比如在解决问题时有一点思路就开始做,没有深挖这个思路是否可行,这个坏习惯浪费了许多时间。这是我第一次参与到开源社区的相关活动中,在这个过程中了解了开源社区的运作方式,在以后的学习过程中会更加努力提高自己的代码能力,争取能为开源社区做出一点贡献。

特别感谢感谢宋国磊老师对我的耐心指导,在项目过程中宋老师帮助我解开了很多疑惑,学到很多东西,感谢 SOFAStack 社区在整个过程中对我的诸多帮助,感谢活动主办方提供的平台。

-

「参考资料」

1. 蚂蚁集团分布式链路跟踪组件 SOFATracer 数据上报机制和源码分析 | 剖析

2. 使用 SkyWalking 实现全链路监控

3. Zipkin-SkyWalking Exporter

4. STAM:针对大型分布式应用系统的拓扑自动检测方法

   本周推荐阅读  

7cfc50565b1f4e7093be732a040d154c.png

蚂蚁集团技术风险代码化平台实践(MaaS)


5f7f23f1e622b1737808ab59f450e1c0.png

下一个 Kubernetes 前沿:多集群管理


9b3cfae026fad50acc6cde3eeb1556bb.png

攀登规模化的高峰 - 蚂蚁集团大规模 Sigma 集群 ApiServer 优化实践


276c3a67ad13a66879e4b4e9a7773fee.png

SOFAJRaft 在同程旅游中的实践


107031327fb4705efba499ddb3e40458.png

sofa-tracer:SOFATracer是分布式系统调用跟踪的组件。 并通过统一的traceId在调用链接中记录各种网络调用的日志。 这些日志可用于快速发现故障,服务管理等 SOFATracer SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 traceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的。这些日志可用于故障的快速发现,服务治理等。 一、背景 在当下的技术架构实施中,统一采用面向服务的分布式架构,通过服务来支撑起一个个应用,而部署在应用中的各种服务通常都是用复杂大规模分布式集群来实现的,同时,这些应用又构建在不同的软件模块上,这些软件模块,有可能是由不同的团队开发,可能使用不同的编程语言来实现、有可能部署了几千台服务器。因此,就需要一些可以帮助理解各个应用的线上调用行为,并可以分析远程调用性能的组件。 为了能够分析应用的线上调用行为以及调用性能,蚂蚁金服基于 提供了分布式链路跟踪 SOFATracer 的解决方案。 二、功能简介 为了解决在实施大规模微服务架构时的链路跟踪问题,SOFATr 立即下载

相关推荐

openEuler服务器离线安装实战:从Docker到Samba的完整避坑指南

本文提供了一份详尽的openEuler服务器离线部署实战指南,重点解决了在无网络环境下安装Docker、Samba等软件的依赖难题。文章深入对比了`dnf install`、`rpm`直接安装及禁用仓库安装三种核心方法,并分享了构建本地DNF仓库的进阶策略,旨在帮助运维人员构建高效可靠的离线部署工作流。

weixin_29210759的博客 72

蚂蚁集团 SOFATracer 原理与实践

背景微服务架构带来很多好处的同时也让系统的复杂度提升了,传统的单体应用按照不同的维度拆分成一个一个分布式微服务,不同的微服务甚至可能采用不同的语言编写;此外,服务的部署往往都是分布式的,可...

金融级分布式架构 1061

LTSPICE仿真电路:(二十八)三极管厄利电压与输出特性曲线深度解析

本文深入解析了LTSPICE仿真电路中三极管的厄利电压与输出特性曲线,详细介绍了厄利电压的物理意义、仿真设置及实际应用。通过伏安特性曲线和厄利电压的分析,帮助读者理解三极管放大性能的关键参数,并提供了电路设计中的优化方案和故障排查技巧。

weixin_26899659的博客 149

探索SOFATracer:阿里巴巴开源的分布式追踪系统

在现代微服务架构中,理解复杂的服务调用链路变得越来越重要。为此,阿里巴巴开源了SOFATracer,一个轻量级、高性能的分布式追踪系统,旨在帮助开发者轻松实现监控和诊断。本文将深入探讨SOFATracer的核心特性,技术实现以及其广泛应用场景。 ## 项目简介 SOFATracer是一个基于OpenTracing规范的分布式追踪解决方案,它提供了统一的API接口,支持多种语言如Java、Go、

gitblog_00015的博客 629

永不消逝的电波 -GSM空口信号的接收与解码

一开始接触软件无线电应该是从很早之前对RFID洗衣卡的解密开始的,后来接触人员定位,慢慢的打开了这样一扇大门。。。。 翻到之前做的GSM信号的接收解码,今天就对其过程做一个记录,也不是什么新颖的内容,权当是记录和回忆了。 对于GSM网络的相关内容,不是非常的熟悉,如有不正确的,欢迎批评指正。

Jack.Xu 专栏 1万+

Cadence IC 618实战:从与非门到环形振荡器的完整版图设计流程(含DRC/LVS避坑点)

本文详细介绍了使用Cadence IC 618进行从与非门到环形振荡器的完整版图设计流程,包括环境准备、基础设计规范、层次化设计、DRC/LVS验证及后仿真优化。特别提供了实战中的避坑技巧和优化建议,帮助工程师高效完成集成电路设计任务。

weixin_26886855的博客 405

SOFATracer 在亿通国际可观察性下的落地与实践

陈晨:Github ID:chenmudu,SOFATracer Committer , 专注于基础服务和可观察性方向。SOFATracer 是蚂蚁集团开源的基于 OpenTracing...

金融级分布式架构 833

YOLOv11涨点改进 | NeurIPS2025最佳论文!注意力改进篇| 引入Gated Attention门控注意力模块、太牛了!直接拯救了大模型的发展,助力目标检测、图像分割、图像分类有效涨点

本文提出了一种基于门控注意力机制(GatedAttention)的YOLOv11改进方法。该模块通过在标准注意力机制中引入头部特定的sigmoid门控,有效提升了模型性能和训练稳定性。实验表明,GatedAttention能够增强模型对关键信息的聚焦能力,减少无关区域关注,提高检测精度。同时,门控机制带来的非线性和稀疏性优化了计算效率,并缓解了训练不稳定性问题。文章详细介绍了模块原理、实现代码及三种改进方案配置方法,为YOLOv11在复杂场景下的目标检测提供了有效解决方案。

Ai缝合怪、助力小伙伴高效发论文 495

链路追踪sofatracer

1.官网地址 https://www.sofastack.tech/projects/sofa-tracer/traceid-generated-rule/ 2.traceId SOFATracer 通过 TraceId 来将一个请求在各个服务器上的调用日志串联起来,TraceId 一般由接收请求经过的第一个服务器产生 3.spanId SOFATracer 中的 SpanId 代表本次调用在整个调用链路树中的位置,假设一个 Web 系统 A 接收了一次用户请求,那么在这个系统的 SOFATrac

qq_35653822的博客 2879

【思考模型框架】前景理论(Prospect Theory),认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值

前景理论,是一种行为经济学理论。前景理论,描述了人们在不确定条件下如何作出决策。前景理论,认为人们并不是完全理性的决策者,而是根据一些心理上的偏差来评估选项的价值。

奶爸的编程之路,也就一周冷个三天 1642

【XCharts插件】3-1、制作图表及代码生成图表(v1.0)

XCharts插件是一款基于UGUI的功能强大、易用、参数可配置的数据可视化图表插件。【Unity3D插件】XCharts插件完全教程《全网最全》-专栏文章目录OK,这是v1.0版本的XCharts插件的创建图表,代码生成图表的教程。可能有人要问了,既然都更新到v3.0了,还写啥v1.0教程呢。因为有些项目就是用v1.0去制作图表了,也没有太多的精力去更新插件,所以就一直用的v1.0,而且v1.0已经能实现大部分的图标样式了,所以,博主还是单独写了一篇文章来介绍v1.0的功能。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1293

原理 | 分布式链路跟踪组件 SOFATracer 和 Zipkin 模型转换

SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,是在金融场景里锤炼出来的最佳实践。SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的...

weixin_33691817的博客 567

YOLOv11改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 1497

SOFATracer 使用指南

SOFATracer 是由阿里巴巴开源的一款强大的分布式系统调用跟踪组件,它遵循 OpenTracing 规范,旨在透明化分布式系统的调用链路。通过引入统一的 `traceId`,SOFATracer 记录下整个服务调用链路上的各个网络调用细节,便于开发者快速定位问题、优化服务治理。该组件设计灵活,支持异步日志写入、日志自动清理与滚动,且无缝集成 SLF4J,提供了界面展示能力,可与 Zipkin

gitblog_00032的博客 721

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蚂蚁金服分布式链路跟踪组件 SOFATracer 总览

文章概要 SOFA Scalable Open Financial Architecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 TraceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的,这些链路数据可用于故障的...

gt9000的博客 557

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

蚂蚁金服分布式链路跟踪组件 SOFATracer 数据上报机制和源码分析 | 剖析

SOFAScalable Open Financial Architecture是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。SOFATracer 是一个用于分布式系统调用跟踪的组件,通过统一的 TraceId 将调用链路中的各种网络调用情况以日志的方式记录下来,以达到透视化网络调用的目的,这些链路数据可用于故障的快速发现,服...

weixin_33801856的博客 424

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【剖析 | SOFARPC 框架】系列之链路追踪剖析

SOFAScalable Open Financial Architecture是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFARPC 框架》第二篇,本篇由畅为/碧远/卓与共同出品。《剖析 | SOFARPC 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号:SOFARPCLab,文章尾部有参与方...

weixin_34408624的博客 457

【剖析 | SOFARPC 框架】之SOFARPC 链路追踪剖析

一. 前言 微服务已经被广泛应用在工业界,微服务带来易于团队并行开发、独立部署、模块化管理等诸多优点。然而微服务将原单体拆分多个模块独立部署,各模块之间链接变得错综复杂,在大规模分布式系统中这种复杂链路给维护带来了诸多困难。 如果对整个微服务架构不能了然于胸,便很难理清各模块之间的调用关系。 例如修改一个服务接口,对哪些服务造成影响不能快速定位。 SOF...

weixin_34024034的博客 688

【精华干货 | SOFARPC 框架】系列之链路追踪剖析

rom 金融级分布式架构 SOFA Scalable Open Financial Architecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 本文为《剖析 | SOFARPC 框架》第二篇,本篇由畅为/碧远/卓与共同出品。 《剖析 | SOFARPC 框架》系列由 SOFA 团队和源码爱好者们出品, 项目代号:...

gt9000的博客 943

SOFARPC 框架

微服务已经被广泛应用在工业界,微服务带来易于团队并行开发、独立部署、模块化管理等诸多优点。然而微服务将原单体拆分多个模块独立部署,各模块之间链接变得错综复杂,在大规模分布式系统中这种复杂链路给维护带来了诸多困难。如果对整个微服务架构不能了然于胸,便很难理清各模块之间的调用关系。例如修改一个服务接口,对哪些服务造成影响不能快速定位。SOFARPC 在 5.4.0 以后提供了链路追踪技术,可以有效协助开发运营人员进行故障诊断、容量预估、性能瓶颈定位以及调用链路梳理。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 826

SOFARPC监控体系搭建:从基础指标到链路追踪的全方位监控方案

SOFARPC作为一款高性能、高扩展性的生产级Java RPC框架,其监控体系是保障服务稳定运行的关键环节。本文将带您从零开始构建完整的SOFARPC监控方案,涵盖基础指标收集、高级链路追踪以及可视化配置,帮助开发和运维人员全面掌握服务运行状态。 ## 一、SOFARPC监控体系架构解析 SOFARPC的监控体系建立在其灵活的扩展机制之上,主要包含指标收集和分布式追踪两大核心模块。通过分析框架

gitblog_02193的博客 447

分布式链路追踪落地实践:Spring Cloud Sleuth + Zipkin性能监控全解析

掌握Java微服务Spring Cloud链路追踪难题,本文详解基于Sleuth+Zipkin的分布式性能监控落地方案。涵盖调用链采集、可视化分析与常见问题定位,提升系统可观测性,值得收藏。

InstrFun的博客 1071

【活动回顾】SOFAMeetup#7 合肥站-SOFA 微服务架构技术生态与实践活动圆满结束

2021 年 7 月 24 日,由 SOFA 社区主办,清博智能,合肥高创,嗨码社区承办的 SOFAMeetup#7- SOFA 微服务架构技术生态与实践活动在合肥成功举办。在本次活动中来...

金融级分布式架构 290

蚂蚁SOFA:金融级分布式架构解密,市面上常见显示屏接口与对应的引脚。

SOFA(Service Oriented Framework Architecture)是蚂蚁集团自主研发的一套分布式中间件体系,旨在为金融级业务场景提供高可用、高性能、高扩展的技术解决方案。其核心设计理念围绕微服务、云原生和分布式事务展开,目前已广泛应用于支付宝等核心业务系统。

jq00gazx的博客 96

java项目_阿里巴巴 29 个屌炸天的开源Java项目

前言众所周知,阿里巴巴是 apache基金会成员、Linux基金会成员,同时是Xen顾问委员会成员。上述身份可见阿里在开源方面的重视程度,阿里通过开源贡献更多技术、分享更多理念。其开源的很多项目大受欢迎,今日就来盘点阿里 29 个开源项目,你用过几个,哪个最好用,欢迎在留言区告诉我。如果你一直以来都对java抱有强烈的学习兴趣。却不知道如何系统的进行学习。学习有困难或者想领取java小白学习路线资...

weixin_39949297的博客 251

SOFAStack-00-sofa 技术栈概览

大家好,我是老马。sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。最近想学习一下 SOFA 对于生态的设计和思考。

1867
上一篇: 今年的 COSCon 中国开源年会,让我们聊点不一样的
下一篇: SOFA Weekly | QA 整理、Layotto 本周 Contributor、MOSN 本周发布
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值