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

简介: 讲述了在阿里云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
相关文章
|
监控 微服务
微服务技术系列教程(28) - SpringCloud- 分布式服务跟踪Sleuth
微服务技术系列教程(28) - SpringCloud- 分布式服务跟踪Sleuth
104 0
|
Java 开发工具 Maven
微服务技术系列教程(24) - SpringCloud- 分布式配置中心
微服务技术系列教程(24) - SpringCloud- 分布式配置中心
185 0
|
10月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
12月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
694 5
|
12月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
695 5
|
Kubernetes 持续交付 Docker
SpringCloud + K8S:容器化持续交付的强大组合
【8月更文挑战第22天】在当今快速迭代的软件开发环境中,如何高效、可靠地部署和管理微服务架构应用成为了技术团队面临的重大挑战。SpringCloud与Kubernetes(K8S)的结合,为微服务架构的容器化持续交付提供了强大的解决方案,极大地提升了应用的可扩展性、灵活性和可维护性。本文将从技术角度深入探讨这一组合的优势及其在工作学习中的实践应用。
1021 3
|
资源调度 Kubernetes 异构计算
Serverless Kubernetes 复杂性问题之Kubernetes中的多形态异构资源的问题如何解决
Serverless Kubernetes 复杂性问题之Kubernetes中的多形态异构资源的问题如何解决
237 9

热门文章

最新文章

相关产品

  • 容器服务Kubernetes版