Table of Contents

The Role of Cardinality

基数的作用

在数据库上下文中,基数(cardinality)是指集合中包含的数据值的唯一性。低基数意味着列的集合中有很多重复的值。高基数意味着列包含很大比例的完全唯一值。包含单个值的列将始终是可能的最低基数。包含惟一id的列将始终是可能的最高基数。

例如,如果你有一个一亿条用户记录的集合,你可以假设用户ID号将具有可能的最高基数维度。名和姓将是高基数,虽然比userID低,因为有些名字是重复的。像性别这样的字段将是相当低的基数,因为它可能有非二进制但有限的选择。像物种这样的字段,假设你所有的用户都是人类,那么它的基数将是最低的。

基数对于可观察性来说很重要,因为高基数的信息对于调试或理解一个系统来说是最有用的数据。考虑到按用户ID、购物车ID、请求ID或无数其他ID(如实例、容器、构建号、跨度等)等字段进行排序的有用性。能够针对唯一的ID进行查询,是在任何给定的干草堆中确定个别针头的最佳方式。

不幸的是,基于度量的工具系统只能处理任何合理规模的低基数维度。即使只有数百台主机可供比较,对于基于度量的系统,您也不能在不触及基数键空间限制的情况下使用主机名作为标识标记。这些固有的限制对查询数据的方式产生了意想不到的限制。当用度量进行调试时,对于你可能想对数据提出的每一个问题,你都必须提前决定–在bug发生之前–你需要查询什么,以便在写入该度量时记录其值。

这种固有的限制有两个大的影响。首先,如果在调查过程中,你决定必须询问一个额外的问题来发现潜在问题的来源,那就不能在事后进行。你必须先设置可能回答这个问题的指标,然后等待问题再次发生。其次,因为需要另一套指标来回答那个额外的问题,大多数基于指标的工具供应商会向你收取记录这些数据的费用。你的成本会随着你决定以每一种新的方式来审视你的数据以发现你不可能事先预测到的隐藏问题而线性增加。

相反,可观察性工具鼓励开发人员为每一个可能发生的事件收集丰富的遥测数据,传递任何给定请求的完整上下文,并将其存储起来,以便在以后的某个时刻可能使用。可观察性工具是专门设计用来查询高基数维度数据的。这对调试的意义在于,你可以用任意数量的方式来询问你的事件数据。你可以提出新的问题,你不需要事先预测,并找到这些问题的答案,或者线索,引导你提出下一个问题。你一次又一次地重复这种模式,直到你在众所周知的大海里捞到你要的针。

改编自O’Reilly即将出版的《可观察性工程》一书,预计2021年出版。

我们如何构建本书的结构

SRE虽然涉及复杂的技术系统,但归根结底是一种文化实践。文化是人的产物,这启发我们根据你在组织中的SRE数量来组织本书的各个部分–你具体处理什么,你的一天是怎样的,取决于有多少个SRE工程师。我们将本书的文章分为 “SRE新手” 、0-1个SRE、1-10个SRE、10-100个SRE和 “SRE的未来 ”。

读者如果想找寻先从哪里开始的指导,可以直接跳到最适用于自己的部分;但是,你仍然会发现阅读那些目前并不适用于你日常的部分的文章的价值。

在0到1个SRE时,还没有人被指定为SRE,或者你已经找到了你的第一个SRE,这个角色看起来几乎是孤独的。

在1到10名SRE时,你正在组建一个团队,有知识共享和分工的能力。

在10到100个SRE时,你已经成为一个组织,你需要思考的不仅仅是你所从事的系统,还需要思考如何组织这么多SRE。

“SRE新手” 涵盖了基础性的话题(尽管并不详尽!),对于那些刚刚开始SRE之旅的人来说是很有帮助的,即使是最有经验的SRE,也是一种复习。 “SRE的未来” 包含了一些文章,这些文章探讨了SRE潜在的发展方向,或者是(目前)坐拥时代潮流。

没有必要按照任何特定的顺序阅读本书。你可以从头到尾读一遍。或者,如果你对某个特定的主题感到好奇,可以翻到索引,在那里你可以找到关于该主题的所有文章。把它作为参考指南,或者是灵感的来源–可以在需要的时候提供一个震撼。或者,也许可以建立一个阅读俱乐部,每周一次挑选一篇文章与同事讨论。这就是散文集的魅力所在。我们希望你和我们一样喜欢阅读它们。

结语

SRE系列的文章,有时间我就会翻译一些,希望大家能学到对自己有用的东西。谢谢

延伸阅读

1.Observability Engineering