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
)。
数据集
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
相关联。具体来说:
- 每个
Entity Type
必须由至少一个Readable Storage
(我们可以在其上运行查询的Storage
)支持,但可以由多个Storage
(例如预聚合物化视图pre-aggregate materialized view
)支持。每个Entity Type
的多个Storage
旨在允许查询优化。 - 每个
Entity Type
必须由一个且仅一个用于摄取数据和填充数据库表的Writable Storage
支持。 - 每个
Storage
仅支持一种Entity Type
。
示例
本节提供了一些示例,说明 Snuba data model
如何表示一些现实世界模型。
这些案例研究不一定反映当前的 Sentry production model
,也不一定是同一部署的一部分。它们必须被视为孤立的例子。
单一实体数据集
这看起来像 Sentry
使用的 Outcomes
数据集。这实际上并没有反映截至 2020 年 4 月的 Outcomes
。尽管设计 Outcomes
应该朝着这个方向发展。
该 Dataset
只有一种 Entity Type
,代表数据集摄取的单个 Outcome
。查询 raw Outcome
非常缓慢,所以我们有两个 Storage
。一个是反映我们摄取的数据的 Raw storage
和一个计算每小时聚合的 materialized view
,查询效率更高。Query Planner
将根据查询是否可以在聚合数据上执行来选择 storage
。
多个实体类型数据集
此数据集的典型示例是 Discover
数据集。
这具有三种 Entity Type
。Errors
、Transactions
并且它们都继承自 Events
。 这些形成了逻辑数据模型,因此查询 Events Entity Type
给出了 Transactions
和 Errors
的联合,但它只允许查询中存在两者之间的公共字段。
出于性能原因,Errors Entity Type
由两个 Storage
支持。 一个是用于摄取数据的主要 Errors Storage
,另一个是read only view(只读视图)
,在查询时对 Clickhosue 的负载较少,但提供较低的一致性保证。 Transactions
只有一个 storage
,并且有一个 Merge Table
来为 Events
提供服务(本质上是两个表联合的视图)。
连接实体类型
这是一个简单的数据集示例,其中包含可以在查询中连接在一起的多个实体类型。
GroupedMessage
和 GroupAssingee
可以是带有 Errors
的 left join
查询的一部分。其余部分与前面示例中讨论的内容类似。
Sentry 监控 - Snuba 数据中台架构(Data Model 简介)的更多相关文章
- Sentry 监控 - Snuba 数据中台架构(Query Processing 简介)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
本文描述了 Snuba 查询语言 (SnQL). 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒 ...
- Sentry 监控 - Snuba 数据中台架构(编写和测试 Snuba 查询)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - Snuba 数据中台本地开发环境配置实战
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - 私有 Docker Compose 部署与故障排除详解
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- Sentry 监控 - Environments 区分不同部署环境的事件数据
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- 【转】阿里架构总监一次讲透中台架构,13页PPT精华详解
转:https://blog.csdn.net/u011323949/article/details/99542576 本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛, ...
随机推荐
- 从eclipse转idea不适记录【持续更新】
使用eclipse和idea时,快捷键对比 从一些最扎心的开始: 关于print一类的打印输出:System.out.println()补全 idea中可以sout.souf.serr:分别对应out ...
- Java程序设计学习笔记(五) — 多线程
时间:2016-4-15 09:56 --多线程(还有多核编程) 1.进程 进程是一个正在执行中的程序. 每一个进程执行都有一个执行顺序,该顺序是一个执行路径, ...
- OVN入门
参考链接 如何借助 OVN 来提高 OVS 在云计算环境中的性能 OVN简介 Open vSwitch Documentation OVSDB介绍及在OpenDaylight中的调用 OpenDayl ...
- springboot @value无法赋值
1解决方式在类上在加@Compent @Component@EnableBinding(Sink.class)public class ReceiveMessageListenerController ...
- 一个基于activiti审批流程示例,如何与系统整合
前言 目前市场上有很多开源平台没有整合工作流,即使有,也是价格不菲的商业版,来看这篇文章的估计也了解了行情,肯定不便宜.我这个快速开发平台在系统基础功能(用户管理,部门管理-)上整合了工作流,你可以直 ...
- sublime text build system automatic ctrl/cmd+B自动选择 python2 或 python3
背景 我同时安装了 python2 和 python3 时,python 指向 python2,python3 才是 python3 默认情况下,在 Sublime 内 Ctrl/Cmd + B 运行 ...
- Redis-技术专区-让你彻底会使用“Redis中最陌生且最强大的集合”(ZSET)【前篇】
前言介绍 很多小伙伴都跟我说,redis中,ZSet(有序集合)是他们最陌生的集合,同时也是觉得特别复杂的集合之一,在开发过程中经常会用到它,而且也是大家最不太有把握使用的集合,所以笔者就从ZSet集 ...
- Docker之Alpine制作jre镜像(瘦身)+自定义镜像上传阿里云
alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...
- Python - 面向对象编程 - 小实战(2)
需求 小明和小美都爱跑步 小明体重 75 公斤 小美体重 45 公斤 每次跑步会减肥 0.5 公斤 每次吃东西体重增加 1 公斤 需求分析 小明.小美都是一个具体的对象,他们都是人,所以应该抽象成人类 ...
- Request请求对象
一.Request对象由服务器创建,我们使用 浏览器访问服务器资源原理: 二.Request体系结构 其中,servlet 的service()方法参数列表是 servletRequest对象, Ht ...