阿里云Kubernetes SpringCloud 实践进行时(4): 分布式链路追踪

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 讲述了在阿里云Kubernetes容器服务基础之上,如何快速搭建基于Spring Cloud的微服务架构中的基础设施之分布式追踪系统Zipkin。

简介

为了更好地支撑日益增长的庞大业务量,我们常常需要把服务进行整合、拆分,使我们的服务不仅能通过集群部署抵挡流量的冲击,又能根据业务在其上进行灵活的扩展。随着分布式的普及、服务的快速增长与云计算技术的进步,微服务架构也因其特有的优势而备受关注。微服务架构的本质,是把整体的业务拆分成很多有特定明确功能的服务,通过很多分散的小服务之间的配合,去解决更大,更复杂的问题。对被拆分后的服务进行分类和管理,彼此之间使用统一的接口来进行交互。

本系列讲述了在阿里云Kubernetes容器服务基础之上,如何快速搭建基于Spring Cloud的微服务架构中的基础设施:

本文是系列中的第四篇,着重介绍分布式追踪系统Zipkin。

微服务的特点决定了一次请求可能少则经过几次服务调用完成,多则跨越几十个甚至是上百个服务节点。以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错误和异常,只要盯住一个点,就可以快速定位和处理问题。

但是在微服务的架构下,如何分析服务链路的瓶颈并对其进行调优,如何快速进行服务链路的故障发现,如何跟踪业务流的处理顺序和结果,等等。这些在单应用下看起来较容易处理的事情,在微服务架构下却成为了一个大问题。

Dapper与Zipkin

为了应对自身大规模的复杂集群环境,Google公司提出了一套分布式跟踪系统的理论机制,并发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,给行业内分布式跟踪的实现提供了非常有价值的参考。当前该论文也成为了当前分布式跟踪系统的理论基础。

Zipkin是一款开源的分布式实时数据追踪系统,基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。

各业务系统在彼此调用时,将特定的跟踪消息传递至zipkin,zipkin在收集到跟踪信息后将其聚合处理、存储、展示等,用户可通过web UI方便获得网络延迟、调用链路、系统依赖等等。

Zipkin主要包括四个模块:

  • Collector 接收或收集各应用传输的数据
  • Storage 存储接受或收集过来的数据,当前支持Memory,MySQL,Cassandra,ElasticSearch等,默认存储在内存中。
  • API(Query) 负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给web UI使用
  • Web 提供简单的web界面

Spring Cloud与Zipkin

为了更好地支持集成分布式追踪系统,Spring Cloud实现了一个名为Sleuth的项目,使得开发人员只需要少量代码即可实现与Zipkin等系统的集成。

下面讲述一下在阿里云Kubernetes容器服务基础之上,如何快速搭建一套分布式追踪系统。

准备Kubernetes环境

阿里云容器服务Kubernetes 1.9.3目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。

体验通过应用目录简便部署

Zipkin的存储和收集可以根据实际情况进行配置,默认情况下,存储使用了内存方式,收集则是使用了http post (/api/v1/spans)方式。监听端口默认为9411。这种方式仅限于开发测试环境,因为一旦重启之后,内存中的数据将会消失,不能得到有效保存。

点击左侧的应用目录,在右侧选中ack-springcloud-zipkin,如下:

图片.png

点击参数, 可以通过修改参数配置进行定制化,例如指定数据库MySQL的root用户访问密码、创建数据库新用户、指定数据库名称等等。修改之后,在右侧选择对应的集群、命名空间,指定发布名称,然后点击部署。

replicaCount: 2
image:
  repository: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/zipkin
  tag: 1.5.13.RELEASE
  pullPolicy: Always

service:
  enabled: true
  type: LoadBalancer
  externalPort: 9411
  internalPort: 9411

mysql:
  image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/mysql"
  imageTag: "5.7.20"
  ## Specify password for root user
  ##
  ## Default: random 10 character string
  # mysqlRootPassword: testing

  ## Create a database user
  ##
  mysqlUser: mysqluser
  mysqlPassword:

  ## Allow unauthenticated access, uncomment to enable
  ##
  # mysqlAllowEmptyPassword: true

  ## Create a database
  ##
  mysqlDatabase: mydb

其中,

  • 指定mysql.mysqlRootPassword为mysql服务创建时指定的root用户密码,不填写时会自动分配一个随机密码;
  • 指定mysql.mysqlUser为mysql服务创建时指定的用户名称
  • 指定mysql.mysqlPassword为mysql服务创建时指定的用户密码,不填写时会自动分配一个随机密码;
  • 指定mysql.db为mysql服务创建时指定的数据库名称

修改之后,在右侧选择对应的集群、命名空间,指定发布名称,然后点击部署。

几分钟之后,一个挂载了mysql数据库的Zipkin实例就可以创建出来。

体验Zipkin Server

点击左侧的服务,在右侧点击刚创建的Zipkin服务提供的访问地址,

图片.png

在打开的Zipkin界面中,点击上部的菜单 - Dependencies,再点击Find a trace,就可以快速验证Zipkin是否启动成功。
如果点击查询,可以看到如下类似的trace内容,则证明Zipkin Server已正常启动。

图片.png

开发微服务并集成Zipkin

如下图所示,提供了4个基于Spring Boot开发的微服务示例,具体代码请参阅: https://github.com/AliyunContainerService/spring-cloud-k8s-sample

图片.png

切换到每个Spring Boot项目的根目录,执行mvn spring-boot:run启动服务。确保4个服务项目都正常启动之后,在浏览器或者postman中访问: http://localhost:8031/service1/test1

打开Zipkin控制台界面,选择service1搜索就可以看到如下所示的调用链路:

图片.png

点击每一项可以查看具体的调用详情,如服务间的调用关系、消耗时间等,如下图所示:

图片.png

总结

我们可以利用阿里云Kubernetes容器服务,快速搭建一套分布式追踪系统,为应用引入和配置Zipkin服务。欢迎大家使用阿里云上的容器服务,快速搭建一套分布式追踪系统Zipkin,比较简单地集成到自己项目的微服务开发中。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
638 3
|
4月前
|
存储 关系型数据库 分布式数据库
喜报|阿里云PolarDB数据库(分布式版)荣获国内首台(套)产品奖项
阿里云PolarDB数据库管理软件(分布式版)荣获「2024年度国内首版次软件」称号,并跻身《2024年度浙江省首台(套)推广应用典型案例》。
|
1月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
9月前
|
监控 Java Go
阿里云可观测全面拥抱 OpenTelemetry 社区
阿里云作为全球领先的云服务商,始终站在开源观测技术最前沿。深度参与 OTel 社区,坚定支持技术开放生态与全球兼容性技术标准的构建。
331 102
|
8月前
|
监控 Java Go
阿里云可观测全面拥抱 OpenTelemetry 社区
阿里云可观测全面拥抱 OpenTelemetry 社区
154 1
阿里云可观测全面拥抱 OpenTelemetry 社区
|
11月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
8月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
392 0
|
9月前
|
人工智能 监控 开发者
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!
209 0
|
11月前
|
机器学习/深度学习 分布式计算 数据挖掘
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
230 6

热门文章

最新文章

相关产品

  • 容器服务Kubernetes版