构建适合组织的云原生可观测性能力

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
简介: 当你到达第3级时,可观测性已经成为了云基础设施上内生的能力,像原力一样,它蕴含在已运行的每个应用系统、以及未来会新增的每个应用系统中,是一项与生俱来的基本能力,这项能力无需依赖于在业务代码中的“调用”来触发,它就在那里。DeepFlow在可观测性3.0等你。May the force be with you!

CNCF在云原生的定义[1]中,将可观测性(Observability)明确为一项必备要素。因此,使用云原生应用架构,享受其带来的效率提升时,不得不面对的是如何构建匹配的可观测性能力。发展到今日,可观测性在开源和商业上已经有了大量的解决方案拼图,CNCF Cloud Native Landscape[2]中相关内容更是多达上百个。本文总结了可观测性能力的成熟度模型,希望能为组织选择适合自身的可观测性方案提供指导。

1.0 | 支柱:基础的可观测性

image.png

时间回到2017年,Peter Bourgon一篇博文总结了可观测性的三大支柱:指标(Metrics)、追踪(Tracing)、日志(Logging)[3]。此后几年间这个观点受到了业内的广泛认可,发展为对可观测性能力的基本要求,并且每一个方面都有了众多成熟的解决方案。例如,开源组件中就有聚焦于Metrics的Prometheus、Telegraf、InfluxDB、Grafana等,聚焦于Tracing的Skywalking、Jaeger、OpenTracing等,聚焦于Logging的Logstash、Elasticsearch、Loki等。

构建三大支柱是可观测性能力建设的初级阶段,基于开源组件很容易为每个业务系统搭建一套开箱即用的可观测性设施。这个阶段面临的主要问题有两个:

image.png

1)数据孤岛:当团队面临一个业务故障时,可能需要频繁跳转于Metrics、Tracing、Logging系统之间,由于这些系统上的数据并没有很好的关联打通,整个问题排查流程高度依赖人工的信息衔接,有些时候可能还需要协调负责不同系统的不同人员参与问题排查。

2)建设冗余:由于观测数据的采集依赖StatsD插桩、Tracing SDK插桩、Logging SDK插桩,处于这个阶段的可观测性能力一般以业务开发团队为核心驱动构建,业务部门只会构建服务于自身的观测设施,导致在不同业务部门之间重复构建。另一方面,开箱即用的方案往往存在扩展性问题,难以成长为面向所有业务提供的基础服务。

2.0 | 服务:统一的可观测性

当观测数据的打通和观测系统的优化在日常运维工作中越来越频繁时,意味着我们需要准备提升可观测性能力到下一个等级了。这个等级的可观测性以服务为核心,由基础设施团队和业务开发团队协作。基础设施团队需要打造一个面向所有业务的统一可观测性平台,提供Metrics、Tracing、Logging数据的采集、存储、检索基础设施,并支持将不同类型的数据进行关联以消除孤岛。业务开发团队作为消费方,利用统一SDK在此平台上注入观测数据。

image.png

首先我们面临的问题是采集时如何关联不同类型的数据,OpenTelemetry[4]通过标准化数据的采集和传输期望解决此问题。遵循OpenTelemetry规范,我们可以看到Metrics可通过Exemplars关联至Trace,Trace通过TraceID、SpanID关联至Log,Log通过Instance Name、Service Name关联至Metrics。OpenTelemetry社区已经完成了Tracing规范的1.0版本,并计划在2021年完成Metrics规范、2022年完成Logging规范。这是一个高速发展中的项目,但得到了业界大量的关注和认可,也能看出可观测苦数据孤岛久矣!

其次,我们还面临着不同类型数据的存储问题,遗憾的是这方面OpenTelemetry并未涉及。Metrics和Trace/Log数据有着较大的区别,通常采用TSDB(如InfluxDB)存储Metrics数据,Search Engine(如Elasticsearch)存储Trace/Log数据。为了提供一项统一的可观测平台服务,系统需要具备水平扩展能力,但TSDB由于高基问题通常难以用于存储精细至每个微服务、API的指标数据,而Search Engine由于全文索引问题通常会带来高昂的资源开销。解决这两个问题一般考虑选择基于稀疏索引的实时数仓,例如ClickHouse等,并通过对象存储机制实现冷热数据分离。

除此之外,观测系统成为统一服务的更大挑战还在于,它需要比业务系统有更强的水平扩展能力。例如,在混合云、边缘云等复杂环境中,观测系统应该能扩展至多个Region/AZ以及边缘机房,使得可全链路监控复杂业务。

解决了数据的采集和存储问题后,基础设施团队可将观测系统作为一项统一服务向业务开发团队开放,但这个阶段的可观测性依然有两个问题未能解决:

image.png

1)团队耦合:观测能力作为一项服务(Service),必须由业务开发团队主动调用(Call),但业务保障的KPI由运维团队承担,并不直接落在开发团队上。在云原生架构应用的高速迭代背景下,是否每一次业务上线都能做到对观测服务的100%调用?即使开发团队能严守规则,整个事情的主动权也并没有落在运维团队手上。另外站在开发团队的视角,业务代码中不得不插入各式各样的由运维团队强制要求的SDK调用。

2)观测盲点:应用架构中涉及到的所有软件服务并不是每一行代码都由开发团队编写,因此侵入式的代码打桩手段势必会遇到观测盲点。例如两个微服务通信路径上的API网关、iptables/ipvs、宿主机vSwitch、SLB、Redis缓存服务、MQ消息队列服务等,都无法通过插码的方式植入式获取观测收据。

3.0 | 原力:内生的可观测性

image.png

当开发与运维的团队的耦合问题开始制约组织发展,当基础服务的观测盲点问题开始制约业务SLO进一步提升时,意味着我们需要再一次提升可观测性能力等级了。

既然每一个云原生应用都需要可观测性能力,那么我们能否让基础设施内生地提供这样的能力,它就像原力(The Force)一样,无处不在。因此,方向明朗了:如果业务代码中不插入任何一行观测代码,我们能获得多少可观测能力?这个阶段的主要挑战来自于数据的采集和存储。

如何实现基础设施内生的应用观测数据采集能力?一种Green Field的思路是通过服务网格实现。我们可以看到,无论是纯正的服务网格如Istio,还是更激进的应用运行时如Dapr,都从设计之初就考虑了可观测性能力。假如微服务之间的访问路径都经过服务网格,那么可以从基础设施层面解决观测数据的采集问题。这里的主要挑战来自于对应用架构的改变——应用需全部迁移到服务网格架构。但即使依靠服务网格,也依然会存在中间件、数据库、缓存、消息队列等系统上的观测盲点。或许等到服务网格像TCP一样——变成网络协议栈的一层时[5],我们能通过这种方法实现内生的可观测性。

另一种Brown Field的解决思路是借助BPF零侵入、无处不在的观测能力。BPF是一项内生于Linux Kernel中的观测技术,经典BPF(cBPF)主要聚焦于网络流量的过滤获取,但在Kernel 4.X版本中已经得到了巨大的增强(eBPF)。利用eBPF,无需修改业务代码、无需重启业务进程,可端到端地观测每一个TCP/UDP(kprobe)、HTTP2/HTTPS(uprobe)函数调用;利用cBPF,从网络流量中提取每一次服务访问的Metrics、Tracing、Logging观测数据,可全链路地观测服务间通信在流经虚拟机网卡、宿主机网卡、SLB等中间设备时的性能数据。随着Linux Kernel 4.X越来越广泛的应用,我们看到云监控泰斗Datadog最近刚刚发布了基于eBPF的Universal Service Monitoring(USM)零侵入监控能力[6],国内阿里云ARMS团队也在最近发布了基于eBPF的零侵入监控产品Kubernetes监控[7],开源社区方面Skywalking v9也开始关注eBPF[8]。但请注意仅仅依靠eBPF会存在依赖4.X Linux内核的问题,导致有可能退化为一种Green Field方案。原力需要无处不在,网络流量早已无处不在!

image.png

数据存储的挑战实际上和全链路监控相关。从应用代码出发的可观测性往往仅考虑业务和应用层面的问题,网络、基础设施成为盲点。在中间路径上(API网关、iptables/ipvs、宿主机vSwitch、SLB、Redis缓存服务、MQ消息队列服务)采集到的观测数据如何能与应用和业务层面的观测数据打通,需要我们构建一个面向微服务的知识图谱。通过与云平台API、K8s apiserver以及服务注册中心同步资源和服务信息,为每个微服务构建区域/可用区、VPC/子网、云服务器/宿主机、容器集群/节点/工作负载、服务名/方法名等多维度知识图谱信息,作为数据标签附加于观测数据之上,从而打通全链路上各个层面的Metrics、Tracing、Logging数据。

当你到达第3级时,可观测性已经成为了云基础设施上内生的能力,像原力一样,它蕴含在已运行的每个应用系统、以及未来会新增的每个应用系统中,是一项与生俱来的基本能力,这项能力无需依赖于在业务代码中的“调用”来触发,它就在那里。

DeepFlow在可观测性3.0等你。May the force be with you!

相关文章
|
3月前
|
边缘计算 Cloud Native 安全
构建灵活高效的下一代应用架构 随着企业数字化转型的加速,云原生技术正逐渐成为构建现代化应用程序的关键支柱。
随着企业数字化转型加速,云原生技术逐渐成为构建现代化应用的关键。本文探讨了云原生的核心概念(如容器化、微服务、DevOps)、主要应用场景(如金融、电商、IoT)及未来发展趋势(如无服务器计算、边缘计算、多云架构),并分析了面临的挑战,如架构复杂性和安全问题。云原生技术为企业提供了更灵活、高效的应用架构,助力数字化转型。
85 4
|
20天前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
14天前
|
Cloud Native
邀您参加云原生高可用技术沙龙丨云上高可用体系构建:从理论到实践
云原生高可用技术专场,邀您从理论到实践一起交流,探索云上高可用体系构建!
|
20天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
25天前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
2月前
|
运维 Cloud Native Docker
云端漫步:构建你的第一个云原生应用
在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何从零开始构建一个云原生应用。我们将深入理解云原生的核心概念,并通过实际代码示例,学习如何利用云平台的强大功能来部署和管理应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和启发。让我们一起开启这场云端之旅,发现云原生应用的魅力吧!
38 3
|
2月前
|
Kubernetes Cloud Native Ubuntu
庆祝 .NET 9 正式版发布与 Dapr 从 CNCF 毕业:构建高效云原生应用的最佳实践
2024年11月13日,.NET 9 正式版发布,Dapr 从 CNCF 毕业,标志着云原生技术的成熟。本文介绍如何使用 .NET 9 Aspire、Dapr 1.14.4、Kubernetes 1.31.0/Containerd 1.7.14、Ubuntu Server 24.04 LTS 和 Podman 5.3.0-rc3 构建高效、可靠的云原生应用。涵盖环境准备、应用开发、Dapr 集成、容器化和 Kubernetes 部署等内容。
71 5
|
2月前
|
Cloud Native 持续交付 云计算
云原生技术深度探索:构建现代化应用的基石####
【10月更文挑战第21天】 本文将深入探讨云原生技术的核心概念、关键技术及其在现代软件开发中的应用。我们将从容器化、微服务架构、持续集成/持续部署(CI/CD)、无服务器架构等关键方面展开,揭示这些技术如何共同作用,帮助企业实现高效、弹性且易于维护的应用部署与管理。通过实例分析,展现云原生技术在实际项目中的显著优势,为读者提供一套全面理解并应用云原生技术的指南。 ####
41 2
|
2月前
|
运维 Kubernetes Cloud Native
云原生架构:构建现代应用程序的基石####
本文将深入探讨云原生架构的核心概念、关键特征及其对现代软件开发的重要性。不同于传统的摘要概述,我们将通过一个生动的案例引入——想象一下,一家初创企业如何在短短几个月内,从零开始构建起一个能够支撑数百万用户访问量、具备高可用性与弹性伸缩能力的在线服务平台。这个过程中,云原生技术扮演了怎样的角色?它是如何帮助这家企业快速响应市场变化,同时保持系统稳定性和成本效益的?带着这些问题,让我们一起揭开云原生架构背后的神秘面纱。 ####
|
2月前
|
监控 Cloud Native 微服务
云端漫步:探索云原生应用的构建与部署
【10月更文挑战第32天】在数字时代的浪潮中,云原生技术如同一艘航船,承载着企业的梦想驶向未知的海洋。本文将带你领略云原生应用的魅力,从基础概念到实战操作,我们将一步步揭开云原生的神秘面纱,体验它如何简化开发、加速部署,并提升系统的可扩展性与可靠性。让我们一起启航,探索云原生的世界!