• spring cloud 学习(8)


    业务复杂的微服务架构中,往往服务之间的调用关系比较难梳理,一次http请求中,可能涉及到多个服务的调用(eg: service A -> service B -> service C...),如果想分析各服务间的调用关系,以及各服务的响应耗时,找出有性能瓶颈的服务,这时zipkin就派上用场,它是Twitter公司开源的一个tracing系统,官网地址为: http://zipkin.io/ , spring cloud可以跟它无缝集成。

    使用步骤:

    一、微服务方

    1.1 添加依赖jar包

        compile 'org.springframework.cloud:spring-cloud-starter-bus-kafka'
        compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
        compile 'org.springframework.cloud:spring-cloud-sleuth-stream'  

    注:为了实现tracing数据埋点与采集的解耦,spring cloud引入了message bus(消息总线)的概念,微服务无需关心tracing系统在哪,长什么样,只要向bus总线上扔消息就行,所以引入了bus-kafka以及sleuth-stream。

    1.2 application.yml配置

    spring:
      ...
      cloud:
        bus:
          enabled: true
        stream:
          default-binder: kafka
          kafka:
            binder:
              brokers: 10.0.1.2,10.0.1.3,10.0.1.4 //kafaka的服务器集群列表
              zkNodes: 10.0.1.5,10.0.1.6,10.0.1.7 //zk的服务器集群列表
              defaultZkPort: 2181 //zk的端口
              defaultBrokerPort: 9092 //kafka的broker端口
      ...
      sleuth:
        sampler:
          percentage: 0.2 //采样率 0.2为20%  

    上面2项配置好就行了,代码不用任何修改,真正的代码零侵入

    二、zipkin-server

    zipkin从kafka上接收过来数据后,有4种保存方式:in-memory(保存在内存中)、mysql、cassandra、elasticsearch

    个人开发调试的话,推荐用in-memory模式,其它环境不要使用!(注:因为随着收集的数据越来越多,都放在内存中 很容易造成OOM)

    2.1 mysql 存储

    2.1.1 主要jar包依赖

    dependencies {
        ... 关键是下面几个
        compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
        compile 'org.springframework.cloud:spring-cloud-sleuth-zipkin-stream'
        compile 'org.springframework.cloud:spring-cloud-starter-bus-kafka'
        compile 'io.zipkin.java:zipkin-server'
        compile 'io.zipkin.java:zipkin-autoconfigure-ui'
        compile 'io.zipkin.java:zipkin-autoconfigure-storage-mysql' #mysql的存储
    
        ... 下面几个是spring-boot/cloud的常规项
        compile 'org.springframework.boot:spring-boot-starter-actuator'
        compile 'org.springframework.boot:spring-boot-starter-web'
        compile 'org.springframework.boot:spring-boot-starter-security'
        compile 'log4j:log4j:1.2.17' //zipkin的storage jar包,依赖低版本的log4j
        compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2'
        compile 'mysql:mysql-connector-java:6.0.5'   
    }
    

    2.1.2 application.yml配置

    spring:
      application:
        name: zipkin-server
      datasource: //指定mysql数据源
        schema: classpath:/mysql.sql
        url: jdbc:mysql://192.168.1.2:3306/zipkin?autoReconnect=true&useSSL=false
        username: root
        password: ***
        driver-class-name: com.mysql.cj.jdbc.Driver
        initialize: true
        continue-on-error: true
      sleuth:
        enabled: false
      cloud:
        bus:
          enabled: true
        ...
        stream:
          default-binder: kafka
          kafka:
            binder:
              brokers: ${kafka.brokers}
              zkNodes: ${kafka.zkNodes}
              defaultZkPort: ${kafka.zkPort}
              defaultBrokerPort: ${kafka.brokerPort}
    
    zipkin:
      storage:
        type: mysql //配置成mysql存储

    2.1.3 main入口代码

    @SpringBootApplication(exclude = { 
            MybatisAutoConfiguration.class,
            RedisAutoConfiguration.class,
            RedisRepositoriesAutoConfiguration.class})
    @EnableZipkinStreamServer
    public class ZipkinServer {
    
        public static void main(String[] args) {
            SpringApplication.run(ZipkinServer.class, args);
        }
    }
    

     注:如果你的项目中依赖了redis,mybatis等其它包,可以参考上面的写法,排除掉这些自动配置,否则的话,不用加那一堆exclude。

    2.2 cassandra

    2.2.1 依赖jar包

    注:cassandra和elasticsearch下,可能会遇到zipkin中的dependencies面板无数据,详情见github上的讨论:https://github.com/openzipkin/zipkin-dependencies/issues/22

        compile 'org.springframework.boot:spring-boot-starter-data-cassandra'
        compile('io.zipkin.java:zipkin-autoconfigure-storage-cassandra3:1.29.3') {
            exclude group: "com.datastax.cassandra", module: "cassandra-driver-core"
        }
        compile 'com.datastax.cassandra:cassandra-driver-core:3.1.1'
        compile 'com.datastax.cassandra:cassandra-driver-mapping:3.1.1'
    

    2.2.2 application.yml

    spring:
      data:
        cassandra:
          contact-points: localhost
          port: 9042
          keyspace-name: zipkin3
      ...
    
    zipkin:
      storage:
        type: cassandra3
    

    2.3 elasticsearch

    2.3.1 依赖jar包

    compile 'io.zipkin.dependencies:zipkin-dependencies-elasticsearch:1.7.2'
    compile 'io.zipkin.java:zipkin-autoconfigure-storage-elasticsearch-http:1.29.2'
    

    2.3.2 application.yml

    zipkin:
      storage:
        type: elasticsearch
        elasticsearch:
          cluster: elasticsearch
          hosts: http://localhost:9200
          index: zipkin
          index-shards: 5
          index-replicas: 1
    
  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/spring-cloud-with-zipkin.html
Copyright © 2020-2023  润新知