摘要
阿里云目前推出了面向 Kubernetes 的一站式可观测性系统,旨在解决 Kubernetes 环境下架构复杂度高、多语言&多协议并存带来的运维难度高的问题,数据采集器采用当下火出天际的 eBPF 技术,产品上支持无侵入地采集应用黄金指标,构建成全局拓扑,极大地降低了公有云用户运维 Kubernetes 的难度。
前言
背景与问题
当前,云原生技术主要是以容器技术为基础围绕着 Kubernetes 的标准化技术生态,通过标准可扩展的调度、网络、存储、容器运行时接口来提供基础设施,同时通过标准可扩展的声明式资源和控制器来提供运维能力,两层标准化推进了细化的社会分工,各领域进一步提升规模化和专业化,全面达到成本、效率、稳定性的优化,在这样的背景下,大量公司都使用云原生技术来开发运维应用。正因为云原生技术带来了更多可能性,当前业务应用出现了微服务众多、多语言开发、多通信协议的特征,同时云原生技术本身将复杂度下移,给可观测性带来了更多挑战:
1、混沌的微服务架构
业务架构因为分工问题,容易出现服务数量多,服务关系复杂的现象(如图 1)。
图 1 混沌的微服务架构(图片来源见文末)
这样会引发一系列问题:
- 无法回答当前的运行架构;
- 无法确定特定服务的下游依赖服务是否正常;
- 无法确定特定服务的上游依赖服务流量是否正常;
- 无法回答应用的 DNS 请求解析是否正常;
- 无法回答应用之间的连通性是否正确;
- ...
2、多语言应用
业务架构里面,不同的应用使用不同的语言编写(如图 2),传统可观测方法需要对不同语言使用不同的方法进行可观测。
图 2 多语言(图片来源见文末)
这样也会引发一系列问题:
- 不同语言需要不同埋点方法,甚至有的语言没有现成的埋点方法;
- 埋点对应用性能影响无法简单评估;
3、多通信协议
业务架构里面,不同的服务之间的通信协议也不同(如图 3),传统可观测方法通常是在应用层特定通信接口进行埋点。
图 3 多通信协议
这样也会引发一系列问题:
- 不同通信协议因为不同的客户端需要不同埋点方法,甚至有的通信协议没有现成的埋点方法;
- 埋点对应用性能影响无法简单评估;
4、Kubernetes 引入的端到端复杂度
复杂度是永恒的,我们只能找到方法来管理它,无法消除它,云原生技术的引入虽然减少了业务应用的复杂度,但是在整个软件栈中,他只是将复杂度下移到容器虚拟化层,并没有消除(如图 4)。
图 4 端到端软件栈
这样也会引发一系列问题:
- Deployment 的期望