数字化转型对企业的影响,佛山seo整站优化,网站怎么做sem优化,seo专员是什么意思一、链路追踪#x1f349;
1.什么是链路追踪#xff1f;#x1f95d;
在大型系统的微服务化构建中#xff0c;一个系统被拆分成了许多模块。这些模块负责不同的功能#xff0c;组合成系统#xff0c;最终可以提供丰富的功能。在这种架构中#xff0c;一次请求往往需要…一、链路追踪
1.什么是链路追踪
在大型系统的微服务化构建中一个系统被拆分成了许多模块。这些模块负责不同的功能组合成系统最终可以提供丰富的功能。在这种架构中一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上这些软件模块有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器横跨多个不同的数据中心。
2.为什么需要链路追踪?
在大型系统的微服务化构建中一个系统被拆分成了许多微服务。这些模块负责不同的功能组合成系统最终可以提供丰富的功能。在这种架构中一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上这些软件模块有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器横跨多个不同的数据中心【区域】也就意味着这种架构形式也会存在一些问题 如何快速发现问题 如何判断故障影响范围 如何梳理服务依赖 如何分析链路性能问题以及实时容量规划
3.那该如何解决呢 sleuth 链路追踪器 zipkin链路分析器可视化 分布式链路追踪Distributed Tracing就是将一次分布式请求还原成调用链路进行日志记录性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
常见的链路追踪技术
cat 由大众点评开源基于Java开发的实时应用监控平台包括实时应用监控业务监控 。 集成
方案是通过代码埋点的方式来实现监控比如 拦截器过滤器等。 对代码的侵入性很大集成成本较高。风险较大。
zipkin 由Twitter公司开源开放源代码分布式的跟踪系统用于收集服务的定时数据以解决微
服务架构中的延迟问题包括数据的收集、存储、查找和展现《图形化》。该产品结合spring-cloud-sleuth 使用较为简单 集成很方便 但是功能较简单。
pinpoint Pinpoint是韩国人开源的基于字节码注入的调用链分析以及应用监控分析工具。特点
是支持多种插件UI功能强大接入端无代码侵入。
skywalking 【未来企业会使用的多】
SkyWalking是本土开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多
种插件UI功能较强接入端无代码侵入。目前已加入Apache孵化器。 —火。
Sleuth 日志记录每一条链路上的所有节点以及这些节点所在的机器和耗时。log4j
SpringCloud 提供的分布式系统中链路追踪解决方案。
注意SpringCloud alibaba技术栈中并没有提供自己的链路追踪技术的我们可以采用Sleuth Zipkin来做链路追踪解决方案
二、Sleuth介绍
SpringCloud Sleuth主要功能就是在分布式系统中提供追踪解决方案。它大量借用了Google Dapper的设计 先来了解一下Sleuth中的术语和相关概念。
相关术语
Trace (一条完整链路–包含很多span(微服务接口)) 由一组Trace Id贯穿整个链路相同的Span串联形成一个树状结构。为了实现请求跟踪当请求到达分布式系统的入口端点时只需要服务跟踪框架为该请求创建一个唯一的标识即TraceId同时在分布式系统内部流转的时候框架始终保持传递该唯一值直到整个请求的返回。那么我们就可以使用该唯一标识将所有的请求串联起来形成一条完整的请求链路。Span 代表了一组基本的工作单元。为了统计各处理单元的延迟当请求到达各个服务组件的时候也通过一个唯一标识SpanId来标记它的开始、具体过程和结束。通过SpanId的开始和结束时间戳就能统计该span的调用时间除此之外我们还可以获取如事件的名称。请求信息等元数据。Annotation 用它记录一段时间内的事件内部使用的重要注释 csClient Send客户端发出请求开始一个请求的生命 srServer Received服务端接受到请求开始进行处理 srcs 网络延迟服务调用的时间 ssServer Send服务端处理完毕准备发送到客户端ss - sr 服务器上的请求处理时间 crClient Reveived客户端接受到服务端的响应请求结束。 cr - sr 请求的总时间 使用sleuth
记录微服务日志。
1引入依赖
在父工程中引入 !--sleuth 路径追踪依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-sleuth/artifactId/dependency2测试
启动效果 调用链路中他们具有相同的traceId,每个模块都有自己的spanId. 这样sleuth会被这些相同traceId的spanId串联起来形成一个完整的调用链路。 如何想只要每个spanId的执行时间可以通过日志的时间进行减操作。如果这样看非常麻烦。----有没有一个组件用来搜集sleuth生成的日志并以图形化展示。—zipkin
三、Zipkin介绍
ZipKin介绍
Zipkin 是 Twitter 的一个开源项目它基于Google Dapper实现它致力于收集服务的定时数据以解决微服务架构中的延迟问题包括数据的收集、存储展现、查找和我们可以使用它来收集各个服务器上请求链路的跟踪数据并通过它提供的REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源,除了面向开发的 API 接口之外它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细比如可以查询某段时间内各用户请求的处理时间等。 Zipkin 提供了可插拔数据存储方式In-Memory、MySql、Cassandra 以及 Elasticsearch。 使用Zipkin
第一件事: 搭建zipkin服务器
下载地址https://repo1.maven.org/maven2/io/zipkin/zipkin-server/ 在cmd命令窗口中输入命令
//启动zipkin服务器
java -jar zipkin***.jar第二件事: 指定微服务所用的zipkin服务器地址。
1需要在微服务中引入zipkin依赖 !--zipkin 图形化界面依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-zipkin/artifactId/dependency2在每个微服务中指定zipkin服务端的地址 #指定zipkin服务器的地址
spring.zipkin.base-urlhttp://localhost:9411/缺点当zipkin重启后链路也会丢失。 默认存在在内存中。
保证mysql数据库允许远程连接
将zipkin持久化到数据库
1.需要在数据库中创建zipkin库以及相关表结构 CREATE DATABASE zipkin /*!40100 DEFAULT CHARACTER SET utf8 */;
use zipkin;CREATE TABLE IF NOT EXISTS zipkin_spans (trace_id_high BIGINT NOT NULL DEFAULT 0 COMMENT If non zero, this means the trace uses 128 bit traceIds instead of 64 bit,trace_id BIGINT NOT NULL,id BIGINT NOT NULL,name VARCHAR(255) NOT NULL,remote_service_name VARCHAR(255),parent_id BIGINT,debug BIT(1),start_ts BIGINT COMMENT Span.timestamp(): epoch micros used for endTs query and to implement TTL,duration BIGINT COMMENT Span.duration(): micros used for minDuration and maxDuration query,PRIMARY KEY (trace_id_high, trace_id, id)
) ENGINEInnoDB ROW_FORMATCOMPRESSED CHARACTER SETutf8 COLLATE utf8_general_ci;ALTER TABLE zipkin_spans ADD INDEX(trace_id_high, trace_id) COMMENT for getTracesByIds;
ALTER TABLE zipkin_spans ADD INDEX(name) COMMENT for getTraces and getSpanNames;
ALTER TABLE zipkin_spans ADD INDEX(remote_service_name) COMMENT for getTraces and getRemoteServiceNames;
ALTER TABLE zipkin_spans ADD INDEX(start_ts) COMMENT for getTraces ordering and range;CREATE TABLE IF NOT EXISTS zipkin_annotations (trace_id_high BIGINT NOT NULL DEFAULT 0 COMMENT If non zero, this means the trace uses 128 bit traceIds instead of 64 bit,trace_id BIGINT NOT NULL COMMENT coincides with zipkin_spans.trace_id,span_id BIGINT NOT NULL COMMENT coincides with zipkin_spans.id,a_key VARCHAR(255) NOT NULL COMMENT BinaryAnnotation.key or Annotation.value if type -1,a_value BLOB COMMENT BinaryAnnotation.value(), which must be smaller than 64KB,a_type INT NOT NULL COMMENT BinaryAnnotation.type() or -1 if Annotation,a_timestamp BIGINT COMMENT Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp,endpoint_ipv4 INT COMMENT Null when Binary/Annotation.endpoint is null,endpoint_ipv6 BINARY(16) COMMENT Null when Binary/Annotation.endpoint is null, or no IPv6 address,endpoint_port SMALLINT COMMENT Null when Binary/Annotation.endpoint is null,endpoint_service_name VARCHAR(255) COMMENT Null when Binary/Annotation.endpoint is null
) ENGINEInnoDB ROW_FORMATCOMPRESSED CHARACTER SETutf8 COLLATE utf8_general_ci;ALTER TABLE zipkin_annotations ADD UNIQUE KEY(trace_id_high, trace_id, span_id, a_key, a_timestamp) COMMENT Ignore insert on duplicate;
ALTER TABLE zipkin_annotations ADD INDEX(trace_id_high, trace_id, span_id) COMMENT for joining with zipkin_spans;
ALTER TABLE zipkin_annotations ADD INDEX(trace_id_high, trace_id) COMMENT for getTraces/ByIds;
ALTER TABLE zipkin_annotations ADD INDEX(endpoint_service_name) COMMENT for getTraces and getServiceNames;
ALTER TABLE zipkin_annotations ADD INDEX(a_type) COMMENT for getTraces and autocomplete values;
ALTER TABLE zipkin_annotations ADD INDEX(a_key) COMMENT for getTraces and autocomplete values;
ALTER TABLE zipkin_annotations ADD INDEX(trace_id, span_id, a_key) COMMENT for dependencies job;CREATE TABLE IF NOT EXISTS zipkin_dependencies (day DATE NOT NULL,parent VARCHAR(255) NOT NULL,child VARCHAR(255) NOT NULL,call_count BIGINT,error_count BIGINT,PRIMARY KEY (day, parent, child)
) ENGINEInnoDB ROW_FORMATCOMPRESSED CHARACTER SETutf8 COLLATE utf8_general_ci;
2.重新启动zipkin服务器
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPEmysql --MYSQL_HOST172.16.7.83 --MYSQL_TCP_PORT3306 --MYSQL_DBzipkin --MYSQL_USERroot --MYSQL_PASS123456如果数据库版本是8.0以上需要更改数据库环境否则运行会报错 需要登录mysql数据库更改校验标准 USE mysql;
//里的password换成自己需要更改的密码
ALTER USER root% IDENTIFIED WITH mysql_native_password BY password;FLUSH PRIVILEGES;select user,host,plugin from user;测试结果