赣州新闻网

首页 / 科技

如何快速定位 Redis 热 key?

2020-03-31 · 赣州新闻网 · 科技

张锐| 存储和缓存工程师

由徐静涵,王健和工程师张天颖合着

在Pinterest,开发人员依靠Statsboard来监视其系统并发现问题。 可靠高效的监控系统对于开发速度非常重要( 3 = S ! 8 L。 过去,我们曾使用OpenTSDB来摄取和提供指标数据。 但是,随着Pinterest的增长,服务的数量也从数百种增加到数千种,每秒生成数百万个数据点,并且还在增长。

尽管Oc 8 - w WpenTSDB在功能[ K [ 8上运行良好,但随着Pinterest的增长,其性能下降,从而导致运营开销(例如,严重* + 3 } w . Q _的GC问题以及HBase经常崩溃)。 作为解决方案,开发了Goku-我们的内部时间序列数据库,其中包含用C ++编写的OpenTSDB兼容API,以支持有效的数据提取和昂贵的时间序列查询。

Goku:构建可扩展的高性能时间序列数据库系统

Two-level sharding with Goku


时间序列数据模型

时间序列数据

Goku遵循OpenTSDB的时间序列数据模型。 时间序列由键和随时间变& @ 化的一系列数字数据点组成。 键=指标名称+一组标签键值对。 例^ X B e j如,\" tc.pk O ` } 2roc.stat.cpu.total.infra-goku-a-prod {hoF , { / 2 +st = infra-goku-a-prodN E B E G # Y-001,cell_id = aws-us-east-1}\"。 数据点=键+值。 值是时间戳和值对X t } Q T } x 9。 例如(1525724520,1} P b = w { p 874706.61),(1525724580,173456.08)。

时间序列查询

每个查询都包含以下部分/全部:度量标准名称,过滤器,聚合器,下采样器,速3 ? 9 O ~率选w A } 3 6 n势。 因此,我们将进行下采样和压缩,以将每小时的存储分区合并为长期的存储分区,从而减少数据量并提高查询性能。

Goku:构建可扩展的高性能时间序列数据库系统

Goku Phase #2 — Disk based: Data iE E . bncludes index data and time series data


复写

目前,我们有两个执行双重写入操作的goku群集。 此设置为我们提供了高可用性:当一个群集中出现问题时,我们可以轻松地将流量切换到另一个群集。 但是,由于两个群集是独立的- 6 $ - _ x,因此很难确保数据的一致性。 例如,如果一次7 ) r j I写入成功而另一次写入失败,则数据将变得不一致。 另一个缺点是故障转移始终是群集级别的粒度。 我们正在努力进行基于日志的集群内复制,以支持主从分片。 这将提高读取可用性,以碎片级别的粒度保留数据一致性和故障转移。

分析用例

所有行业都广泛需要分析,Pinterest也不例外。 每分钟都会询问诸如实验结果和l i h J M A j $ Y广告系列效果之类的问题。 当前,我们主要将离线作业和HBase用于分析目的,这意味着没有实时数据,并且有很多不必要的预聚合。 由于时间序列数据的性质,Goku可以轻松地适应它,不仅可以提供实时数据,还可以按需聚合。

我们将继续探索Goku的用例。 如果您对这样的项目感兴趣,请查看我们的\"职业\"页面!

致谢:非常感谢Bu 2 m 2 trian Overstry 8 _ ! & P Y veet,能见度团队的Wei Zhu以及Paul Bindels和Chiyoung Seo协助推出了Goku和设计建议。

(本文翻译自Pinterest Engineering的文章《Goku: Building a scalable and highV . | N Q ! 7 per* { ( f % Jformant time serd d d 1ies database system》,参考:https://medium.com/pinterest-engineering/goku-building-a-scalable-and-high-perfor$ t t { hmant-time-series-database-system-a8ff5758a181)

确保项目文章设置信息这是设计到位会昌