Sentry 监控 - Snuba 数据中台架构(Data Model 简介)

Sentry 监控 - Snuba 数据中台架构(Data Model 简介)

系列

1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本

快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps

Sentry For React 完整接入详解

Sentry For Vue 完整接入详解

Sentry-CLI 使用详解

Sentry Web 性能监控 - Web Vitals

Sentry Web 性能监控 - Metrics

Sentry Web 性能监控 - Trends

Sentry Web 前端监控 - 最佳实践(官方教程)

Sentry 后端监控 - 最佳实践(官方教程)

Sentry 监控 - Discover 大数据查询分析引擎

Sentry 监控 - Dashboards 数据可视化大屏

Sentry 监控 - Environments 区分不同部署环境的事件数据

Sentry 监控 - Security Policy 安全策略报告

Sentry 监控 - Search 搜索查询实战

Sentry 监控 - Alerts 告警

Sentry 监控 - Distributed Tracing 分布式跟踪

Sentry 监控 - 面向全栈开发人员的分布式跟踪 101 系列教程(一)

Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)

本节介绍数据在 Snuba 中的组织方式以及面向用户的数据如何映射到底层数据库(如: Clickhouse)。

Snuba 数据模型横向分为逻辑模型(logical model)和物理模型(physical model)。逻辑数据模型是 Snuba 客户端通过 Snuba 查询语言可见的。此模型中的元素可能会也可能不会 1:1 映射到数据库中的表。相反,物理模型将 1:1 映射到数据库概念(如表和视图)。

这种划分背后的原因是,它允许 Snuba 通过逻辑数据模型公开一个稳定的接口,并在内部执行复杂的映射,对不同的表(物理模型的一部分)执行查询,以一种对 client 透明的方式提高性能。

本节的其余部分概述了组成两个模型的概念以及它们如何相互连接。

下面描述的主要概念是数据集(dataset)、实体(entity)和存储(storage)。

Sentry 监控 - Snuba 数据中台架构(Data Model 简介)

数据集

Dataset 是 Snuba 数据的命名空间。它提供了自己的 schema,并且在逻辑模型和物理模型方面都独立于其他数据集。

数据集的示例是 discover(发现)、outcomes(结果)、sessions(会话)。他们之间没有任何关系。

数据集可以看作是定义其抽象数据模型及其具体数据模型的组件的容器,如下所述。

实体和实体类型

Snuba 向客户端公开的逻辑数据模型的基本块(fundamental block)是实体。在逻辑模型中,实体表示抽象概念(如 transaction 或 error)的实例。在实践中,Entity 对应于数据库表中的一行。Entity Type 是实体的类(如 Errors 或 Transactions)。

逻辑数据模型由一组 Entity Types 及其 relationships 组成。

每个 Entity Type 都有一个 schema,该模式由具有相关抽象数据类型的字段列表定义。 Dataset 的所有 Entity Types(可以有多个)的 schema 组成了对 Snuba client 可见的逻辑数据模型,Snuba 查询根据该模型进行验证。 不应该暴露较低级别的概念。

Entity Types 明确包含在 Dataset 中。一个 Entity Type 不能出现在多个数据集中。

实体类型之间的关系

数据集中的实体类型在逻辑上是相关的。支持两种类型的关系:

实体集关系(Entity Set Relationship)。这模仿了外键。这种关系旨在允许实体类型之间的连接。 目前它只支持一对一和一对多的关系。

继承关系(Inheritance Relationship)。这模仿了名义上的子类型(subtyping)。 一组实体类型可以共享一个父实体类型。子类型从父类型继承 schema。 从语义上讲,父实体类型必须表示其类型从其继承的所有实体的联合。还必须能够查询父实体类型。这不能仅仅是一种逻辑关系。

实体类型和一致性

Entity Type 是 Snuba 可以提供一些强大的数据一致性保证的最大单元。具体来说,可以查询期望 Serializable Consistency(可序列化的一致性) 的实体类型。这不会扩展到跨越多个实体类型的任何查询,在这种情况下,我们最多将具有最终的一致性。

这也会对订阅查询(Subscription queries)产生影响。 这些一次只能对一种实体类型起作用,否则,它们将需要实体类型之间的一致性,而我们不支持这种一致性。

请注意!

准确地说,一致性单位(取决于 Entity Type)甚至可以更小,并且取决于数据摄取主题(data ingestion topics)的分区方式(例如 project_id),实体类型是 Snuba 允许的最大值。

存储

Storage 表示并定义 Dataset 的物理数据模型。每个 Storage 表示在物理数据库概念中具体化,如表或具体化视图。因此,每个存储都有一个由字段及其类型定义的 schema,该字段反映了 storage 映射到的 DB table/view 的物理模式,并且能够提供生成 DDL 语句的所有详细信息,以在数据库上构建表。

Storage 能够将上面讨论的逻辑模型中的逻辑概念映射到数据库的物理概念,因此每个 Storage 都需要与一个 Entity Type 相关联。具体来说:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxsjf.html