一般网站栏目结构,wordpress 图床域名,微信开放平台登陆,南京网站建设公司 w目录
1.分布式链路追踪
1.1.链路追踪Sleuth介绍
1.2.如何完成sleuth
1.3.zipkin服务器
2.配置中心
2.1.常见配置中心组件
2.2.微服务集群共享一个配置文件
2.2.1实时刷新--配置中心数据
2.2.2.手动写一个实时刷新的配置类 ----刷新配置文件
2.3.多个微服务公用一个配…目录
1.分布式链路追踪
1.1.链路追踪Sleuth介绍
1.2.如何完成sleuth
1.3.zipkin服务器
2.配置中心
2.1.常见配置中心组件
2.2.微服务集群共享一个配置文件
2.2.1实时刷新--配置中心数据
2.2.2.手动写一个实时刷新的配置类 ----刷新配置文件
2.3.多个微服务公用一个配置 继 微服务Gateway网关 文章扩展的链路追踪 1.分布式链路追踪 在大型系统的微服务化构建中一个系统被拆分成了许多微服务。这些模块负责不同的功能组合成系统最终可以提供丰富的功能。在这种架构中一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上这些软件模块有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器横跨多个不同的数据中心【区域】也就意味着这种架构形式也会存在一些问题 如何快速发现问题如何判断故障影响范围如何梳理服务依赖如何分析链路性能问题以及实时容量规划 分布式链路追踪Distributed Tracing就是将一次分布式请求还原成调用链路进行日志记录性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上IP、每个服务节点的请求状态200 500等等。 常见的链路追踪技术有下面这些 cat 由大众点评开源基于Java开发的实时应用监控平台包括实时应用监控业务监控 。 集成方案是通过代码埋点的方式来实现监控比如 拦截器过滤器等。 对代码的侵入性很大集成成本较高。风险较大。zipkin 由Twitter公司开源开放源代码分布式的跟踪系统用于收集服务的定时数据以解决微服务架构中的延迟问题包括数据的收集、存储、查找和展现《图形化》。该产品结合spring-cloud-sleuth 使用较为简单 集成很方便 但是功能较简单。pinpoint Pinpoint是韩国人开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多种插件UI功能强大接入端无代码侵入。skywalking 【未来企业会使用的多】SkyWalking是本土开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多种插件UI功能较强接入端无代码侵入。目前已加入Apache孵化器。 Sleuth 日志记录每一条链路上的所有节点以及这些节点所在的机器和耗时。log4j SpringCloud 提供的分布式系统中链路追踪解决方案。 注意: sleuthzipkin 1.1.链路追踪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 - cs 请求的总时间 1.2.如何完成sleuth 记录微服务日志 (1) 微服务接入sleuth 父工程引入依赖 dependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-sleuth/artifactId/dependency/dependencies 运行日志 调用链路中他们具有相同的traceId,每个模块都有自己的spanId. 这样sleuth会被这些相同traceId的spanId串联起来形成一个完整的调用链路。 如何想只要每个spanId的执行时间可以通过日志的时间进行减操作。如果这样看非常麻烦。----有没有一个组件用来搜集sleuth生成的日志并以图形化展示。---zipkin 1.3.zipkin服务器 ZIPKIN官网 第一件事安装启动zipkin服务器 1.下载jar包 资源以上传 2.运行 3. 浏览器访问zipkin服务器 http://localhost:9411/zipkin 第二件事: 指定微服务所用的zipkin服务器地址 1.需要在微服务中引入zipkin依赖 父工程引入依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-zipkin/artifactId/dependency 2.在每个微服务中指定zipkin服务端的地址 在配置文件中添加 #指定zipkin服务器的地址
spring.zipkin.base-urlhttp://localhost:9411/ 缺点当zipkin重启后链路也会丢失。 默认存在在内存中 解决 存储到数据库中 保证mysql数据库允许远程连接: 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,
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 )ENGINEInnoDB ROW_FORMATCOMPRESSED CHARACTER SETutf8 COLLATE utf8_general_ci;ALTER TABLE zipkin_spans ADD UNIQUE KEY(trace_id_high, trace_id, id) COMMENT ignore insert on duplicate;
ALTER TABLE zipkin_spans ADD INDEX(trace_id_high, trace_id, id) COMMENT for joining with zipkin_annotations;
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(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;ALTER TABLE zipkin_annotations ADD INDEX(a_key) COMMENT for getTraces;
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 )
ENGINEInnoDB ROW_FORMATCOMPRESSED CHARACTER SETutf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(day, parent, child); 运行 java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPEmysql --MYSQL_HOST127.0.0.1 --MYSQL_TCP_PORT3306 --MYSQL_DBzipkin --MYSQL_USERroot --MYSQL_PASS123456789 2.配置中心 思考: 1每个微服务可能要搭建n台集群。这个集群中的微服务配置都是一样。如果需要修改服务的配置就需要每个都要修改。2各个微服务他们可能拥有相同的配置。 思路: 交给一个组件来统一管理。----配置中心 2.1.常见配置中心组件 Apollo Apollo是由携程开源的分布式配置中心。特点有很多比如配置更新之后可以实时生效支持灰度发布功能并且能对所有的配置进行版本管理、操作审计等功能提供开放平台API。并且资料 也写的很详细。----很好用。 Disconf Disconf是由百度开源的分布式配置中心。它是基于Zookeeper来实现配置变更后实时通知和生效的。 SpringCloud Config 这是Spring Cloud中带的配置中心组件。它和Spring是无缝集成使用起来非常方便并且它的配置存储支持Gitgit没学。不过它没有可视化的操作界面配置的生效也不是实时的需要重启或去刷新。 Nacos 这是SpingCloud alibaba技术栈中的一个组件前面我们已经使用它做过服务注册中心。其实它也集成了服务配置的功能我们可以直接使用它作为服务配置中心。 我们使用nacos作为配置中心。安装nacos服务端 不需要讲。 2.2.微服务集群共享一个配置文件 集群生产环境下一定是部署到不同的服务器上。 (1)需要在nacos配置中心创建一个配置文件 名称必须为: 微服务名.后缀 2微服务中使用nacos配置中的配置文件 父工程引入依赖 !--引入nacos配置中心的依赖--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency 3必须使用bootstrap.properties---用来加载外部配置文件内容 #为微服务定义名称----必须和配置中心的id相同
spring.application.nameqy165-product
#指定配置中心的地址
spring.cloud.nacos.config.server-addrlocalhost:8848
#指定配置文件所在的组 默认DEFAULT_GROUP
spring.cloud.nacos.config.groupaaa
#指定配置文件的后缀名 默认properties
#spring.cloud.nacos.config.file-extensionyml 修改ProductController 测试 2.2.1实时刷新--配置中心数据 2.2.2.手动写一个实时刷新的配置类 ----刷新配置文件 2.3.多个微服务公用一个配置 1把上面两个配置类公共内容提取到一个公共配置文件中 2让微服务引入公共文件 #引用额外公共的配置文件
spring.cloud.nacos.config.extension-configs[0].data-idgg.properties
spring.cloud.nacos.config.extension-configs[0].groupaaa
spring.cloud.nacos.config.extension-configs[0].refreshtrue