学习主题:ELK&Zipjin
学习目标:
对应视频:
/course/id/85.html
对应文档:
无
对应作业
1.安装Logstash
(1) Logstash的作用是什么?
主要是用来日志的搜集,分析.过滤日志的工具.支持大量的数据获取方式(支持以TCP/UDP/HTTP多种方式收集数据) . 一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的个节点日志进行过滤,修改等操作,再一并发往elasticsearch上去
2.安装Kibana
(1) Kibana的作用是什么
Kibana 可以为Logstash 和ElasticSearch 提供的日志分析友好的web界面,可以帮助汇总,分析和搜索重要数据日志
3.Spring_Cloud与ELK的集成-创建项目
(1) 创建Provider接口。
(2) 创建Provider服务。
(3) 修改POM文件,添加服务相关坐标。
<!-- 添加 product-service 坐标 -->
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>sleuth-product-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
(4) 修改POM文件,添加sleuth启动器坐标、添加logstash坐标。
<dependency>
<groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.0</version>
</dependency>
(5) 修改配置文件,添加服务相关配置。
spring.application.name=sleuth-elk-product-provider
server.port=9001
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
#--------------db----------------
mybatis.type-aliases-package=com.book.product.pojo
mybatis.mapper-locations=classpath:com/book/product/mapper/
*.xml
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/book-prod
uct?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavi
or=convertToNull
spring.datasource.username=root
spring.datasource.password=root
(6) 创建Consumer服务。
(7) 修改POM文件,添加服务相关坐标。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 添加 Feign 坐标 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!-- 添加 e-book-product-service 坐标 -->
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>e-book-product-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
(8) 修改POM文件,添加sleuth启动器坐标、添加logstash坐标。
<dependency>
<groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.0</vers
(9) 修改配置文件,添加服务相关配置。
spring.application.name=sleuth-elk-consumer
server.port=9010
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
4.Spring_Cloud与ELK的集成-操作ELK
(1) Kibana操作界面中的Discover的作用是什么?
Discover主要是做索引查询 ,
(2) Kibana操作界面中的Visualize的作用是什么?
视图展示,
(3) Kibana操作界面中的Timelion的作用是什么?
是一个时间序列数据的可视化功能,可以结合在一个单一的可视化完全独立的数据源
它是由一个简单的表达式语言驱动的,你用来检索时间序列数据,,进行计算,找出复杂问题的答案,并可视化的结果
(4) Kibana操作界面中的DevTools的作用是什么?
可以直接操作es中的数据,使用户方便的通过浏览器直接与ElasticSearch进行交互
(5) Kibana操作界面中的Management的作用是什么?
管理中的应用是在你执行你的运行时配置kibana,包括初始设置和指标进行配置模式,高级设置,调整自己的行为和Kibana,各种”对象”,你可以查看保存在整个Kibana的内容,如 发现页 ,可视化和仪表板
5.什么是Zipkin
(1) 什么是Zipkin?
(2) Zipkin和ELK有什么区别?
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。
第254次(Zipkin&分布式事务)
学习主题:Zipkin&分布式事务
学习目标:
对应视频:
/course/id/85.html
对应文档:
无
对应作业
6.创建Zipkin服务端
(1) @EnableZipkinServer注解的作用是什么?
开启Zipkin服务
7.Spring Cloud与Zipkin的集成
(1) 创建Provider服务接口项目。
(2) 创建Provider服务。
(3) 修改POM文件,添加相关坐标。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 添加 product-service 坐标 -->
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>sleuth-zipkin-product-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
(4) 修改POM文件,添加Zipkin坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
(5) 修改配置文件,添加服务相关配置。
spring.application.name=sleuth-zipkin-product-provider
server.port=9001
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
spring.zipkin.base-url=http://127.0.0.1:9411
#--------------db----------------
mybatis.type-aliases-package=com.book.product.pojo
mybatis.mapper-locations=classpath:com/book/product/mapper/
*.xml
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/book-prod
uct?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
(6) 修改配置文件,添加Zipkin URL配置。
spring.zipkin.base-url=http://127.0.0.1:9411
(7) 创建Consumer服务。
(8) 修改POM文件,添加相关坐标。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 添加 Feign 坐标 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!-- 添加 e-book-product-service 坐标 -->
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>sleuth-zipkin-product-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency><dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
(9) 修改POM文件,添加Zipkin坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
(10) 修改配置文件,添加服务相关配置。
ring.application.name=sleuth-zipkin-consumer
server.port=9010
spring.zipkin.base-url=http://127.0.0.1:9411
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
(11) 修改配置文件,添加Zipkin URL配置。
spring.zipkin.base-url=http://127.0.0.1:9411
8.Zipkin的原理剖析
(1) Zipkin有哪些时间类型?每种事件类型表示什么含义?
(2) Zipkin的执行原理是什么?
9.采用RabbitMQ收集Zipkin的跟踪数据-创建服务端
(1) @EnableZipkinStreamServer注解的作用是什么?
开启消息代理收集
10.采用RabbitMQ收集Zipkin的跟踪数据-创建客户端
(1) 创建Provider服务。
(2) 需改POM文件,添加服务相关坐标。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 添加 product-service 坐标 -->
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>sleuth-zipkin-mq-product-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
(3) 修改POM文件,添加Zipkin Stream、Binder Rabbit坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
(4) 修改配置文件,添加服务相关配置。
spring.application.name=sleuth-zipkin-mq-product-provider
server.port=9001
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
(5) 修改配置文件,添加RabbitMQ连接配置。
spring.rabbitmq.port=5672
spring.rabbitmq.username=oldlu
spring.rabbitmq.password=123456
#--------------db----------------
mybatis.type-aliases-package=com.book.product.pojo
mybatis.mapper-locations=classpath:com/book/product/mapper/*.xml
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/book-prod
uct?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavi
or=convertToNull
spring.datasource.username=root
spring.datasource.password=root
(6) 创建Consumer服务。
(7) 需改POM文件,添加服务相关坐标。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 添加 Feign 坐标 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<!-- 添加 e-book-product-service 坐标 -->
<dependency>
<groupId>com.bjsxt</groupId>
<artifactId>sleuth-zipkin-mq-product-service</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
(8) 修改POM文件,添加Zipkin Stream、Binder Rabbit坐标。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
(9) 修改配置文件,添加服务相关配置。
spring.application.name=sleuth-zipkin-consumer
server.port=9010
(10) 修改配置文件,添加RabbitMQ连接配置。
spring.rabbitmq.host=192.168.70.139
spring.rabbitmq.port=5672
spring.rabbitmq.username=oldlu
spring.rabbitmq.password=123456
eureka.client.serviceUrl.defaultZone=http://user:123456@eur
eka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
(11) 访问Zipkin服务端查看结果。
11.跟踪数据持久化到MySQL
(1) 创建Zipkin服务端。
(2) 修改POM文件,添加服务相关坐标。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
(3) 修改POM文件,添加MySQL数据库驱动坐标,添加jdbc启动器。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
(4) 修改配置文件,添加服务相关配置
spring.application.name=sleuth-zipkin-server
server.port=9411
spring.rabbitmq.host=192.168.70.139
spring.rabbitmq.port=5672
spring.rabbitmq.username=oldlu
spring.rabbitmq.password=123456
(5) 修改配置文件,添加Zipkin储存类型。
#zipkin 数据保存到数据库中需要进行如下配置
#表示当前程序不使用 sleuth
spring.sleuth.enabled=false
#表示 zipkin 数据存储方式是 mysqlzipkin.storage.type=mysql
#数据库脚本创建地址
spring.datasource.schema=classpath:/mysql.sql
#spring boot 数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zipkin?au
toReconnect=true&useUnicode=true&characterEncoding=UTF-
8&zeroDateTimeBehavior=convertToNull&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.initialize=true
spring.datasrouce.continueOnError=true
(6) 执行MySQL脚本。
(7) 访问Zipkin服务端,查看MySQL数据库中数据。
12.什么是分布式事务
(1) 什么是分布式事务?
分布式事务是指事务的参与者,支持事务的服务器,资源管理器以及事务管理器分别位于不同的分布式系统的不同节点之上
13.XA的两阶段提交方案
(1) 什么是XA协议?
XA 协议由 Oracle Tuxedo 首先提出的,并交给 X/Open 组织,作为资源管理器(数据库)
与事务管理器的接口标准。目前,Oracle、Informix、DB2 和 Sybase 等各大数据库厂家都提
供对 XA 的支持。XA 协议采用两阶段提交方式来管理分布式事务。XA 接口提供资源管理
器与事务管理器之间进行通信的标准接口。
XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交
易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。XA 接口函数由数据库厂
商提供。
(2) 什么是XA一阶段提交?
如果在程序中开启了事务,那么在应用程序发出提交/回滚请求后,数据库执行操作,
而后将成功/失败返回给应用程序,程序继续执行。
(3) 什么是XA二阶段提交?
事务管理器在接受各个消息后,开始分析,如果有任意其一失败,则发送回滚命令,否
则发送提交命令。
各个资源管理器接收到命令后,执行(耗时很少),并将提交消息返回给事务管理器。
事务管理器接受消息后,事务结束,应用程序继续执行。
14.TCC分布式事务解决方案
(1) 什么是TCC解决方案?
(2) TCC原理是什么?
事务开始时,业务应用会向事务协调器注册启动事务。之后业务应用会调用所有服务
的try 接口,完成一阶段准备。之后事务协调器会根据try 接口返回情况,决定调用confirm
接口或者cancel 接口。如果接口调用失败,会进行重试。
(3) TC优点是什么?
让应用自己定义数据库操作的粒度,使得降低锁冲突,提高吞吐量成为可能
(4) TCC的缺点是什么?
对应用的侵入性强,业务逻辑的每个分支都需要实现try,confirm , cancel三个操作,应用侵入性较强,改造成本高
实现难度较大,需要按照网络状态,系统故障等不同的失败原因实现不同的回滚策略,为了满足一致性的要求 , confirm 和cancel接口必须实现幂等
15.分布式事务中间件解决方案
(1) 什么是分布式事务中间件解决方案?
分布式事务中间件其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性
的效果。典型代表有:阿里的GTS(/aliware/txc)、开源应用LCN。
16.什么是LCN框架
(1) 什么事LCN分布式事务处理框架?
LCN 并不生产事务,LCN 只是本地事务的协调工
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。