• 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
    
  • 相关阅读:
    ListComparer
    C#.net中类与结构的区别
    对C# 中堆栈,堆,值类型,引用类型的理解
    一道面试题
    Mvc不等于三层架构
    SQL养成一个好习惯是一笔财富
    清除MSSQL事务日志文件
    面向对象设计(OOD)五大基本原则
    .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解之一
    IIS7 Login failed for user IIS APPPOOL\ASP.NET v4.0
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/spring-cloud-with-zipkin.html
Copyright © 2020-2023  润新知