阿里云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,比较简单地集成到自己项目的微服务开发中。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
93 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
30天前
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
|
1月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
94 16
|
1月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
346 7
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
2月前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
118 4
|
3月前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
101 8
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
207 5
|
4月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
274 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
5月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践

相关产品

  • 容器服务Kubernetes版