做者 | 悟鹏
来源 | 阿里巴巴云原生公众号git
《Kubernetes 稳定性保障手册》系列文章:github
伴随你们对稳定性重视程度的不断提高、社区可观测性项目的火热,可观测性成为了一个很热门的话题,站在不一样的角度会产生不一样的理解。架构
咱们从软件开发的生命周期出发,尝试造成对可观测性的一个宏观理解,并从 SRE 和 Serverless 两个角度具化可观测性的理解以及实践。less
从 wikipedia: Observability 可理解到 可观测性 的定义:ide
In control theory, observability is a measure of how well internal states of a system can be inferred from knowledge of its external outputs.函数
Consider a physical system modeled in state-space representation. A system is said to be observable if, for any possible evolution of state and control vectors, the current state can be estimated using only the information from outputs (physically, this generally corresponds to information obtained by sensors). In other words, one can determine the behavior of the entire system from the system's outputs. On the other hand, if the system is not observable, there are state trajectories that are not distinguishable by only measuring the outputs.性能
简单表述为,可观测性是一种方法,经过系统的外部输出推导出系统内部的状态。ui
下图简化了系统的组成和系统间的交互:this
从上述交互图可了解到,系统的交互行为有以下几种形态:google
系统内部
系统之间
这样,经过以下两种形态的信息,就能够经过系统的外部输出了解到系统的内部状态:
可观测性的核心在于 经过观测数据、知足不一样人群、对于系统状态的理解需求,这里先抽象观测数据的生命周期,有以下图示:
观测数据经过 App 生成,通过中间处理环节后进行存储,而后提供查询服务。
观测数据服务于不一样类型的人群,如产品的用户、业务、研发、SRE,不一样的人群经过不一样的形态来使用这些数据,包括 SLA / SLO / SLI / Alert 等。
根据可观测数据的生命周期,可粗略总结可观测性的问题域:
生成端
处理端
存储端
使用端
从项目总体视角来看软件开发的生命周期,有以下的流程:
细化下来:
在软件开发生命周期中,有 4 类角色。面对 4 类角色,可观测性的服务目标会有差别:
Note:
基础服务:
能够将 OpenTelemetry 做为基础落地上述事项,参见:《OpenTelemetry 简析》。
与此同时,能够探索可视化的稳定性保障服务,从全局视角加快问题发现、定位、解决,一张图把握集群中「组件自身」和「组件之间交互」的健康状态 ,形以下图:
以此为入口,从总体把握集群状态,关联异常信息,处理问题时有的放矢。
Serverless 是目前颇有前景的云上计算形态,阿里云提供了比较完整的 Serverless 计算产品,以下:
不一样 Serverless 计算环境的一个主要差别点在于运行环境的持续时间,以此为出发点,能够抽象出 Serverless 计算环境中可观测性的核心,而后分解出相应的解决方案:
根据运行环境持续时长的不一样,可粗略划分为 3 类:
这些运行环境都可以经过虚拟机、容器或 WebAssembly 等技术实现,区别点在于业务层面限定的运行环境持续时长。
根据运行环境持续时长的特征,平台和用户的关注核心会有相应的变化:
天级别的运行环境,平台方的核心在于提供可靠的运行环境,由用户自由管理应用
小时级别的运行环境,平台方的核心在于围绕应用提供管理服务,用户聚焦于业务自身
对于 FaaS 场景,THUNDRA 公司 的 demo 提供了比较好的示例以供参考 (截取 3 个示例):
经过对可观测性概念、问题域、不一样层级需求等造成深刻理解,能够造成对可观测性的理解大图,而后在此基础上与业务结合,加强业务在可观测性方面的竞争力,同时迭代理解,技术与业务相互促进。