阅读笔记:How ShiftLeft Uses PostgreSQL Extension TimescaleDB - High Scalability

https://blog.shiftleft.io/time-series-at-shiftleft-e1f98196909b

ShiftLeft是一个安全公司,公司会涉及到大量的关于时间序列数据。所以对时间序列的数据库做了一个选型,选型策略如下:

  1. 最好使用go语言写的,因为ShiftLeft公司的大部分产品的开发语言都是GO
  2. 需要很好的能够适合Docker这个生态链,因为当前的大部分产品都使用到了Docker的方案。
  3. 需要能够很好的支持迭代开发,不能过于依赖一种数据模型,因为经常会有需求更改。(感觉这个跟自己开发有关系啊,跟系统选型没关系,放在这里有些奇怪呢)
  4. 一个创业公司能够维护的了的系统,特别复杂的就算了,公司没有几个人。
  5. 不同类的粒度的序列支持。Retention management(没翻译出来啥意思,但是感觉还挺关键的)

最后选择了基于PostgreSQL的TimescaleDB,这款数据库是作为PostgreSQL的一个扩展,提供了一个叫Hypertables的超级表,估计是增强了一下PostgreSQL强大的分区表的功能,让分区根据时间段进行划分,查询的时候根据时间来筛选chunk,会省掉大部分无用的磁盘IO。我猜测选型的过程还是为了最大限度的保持技术栈一致,因为公司的其他业务也都大量的使用了PostgreSQL。不过对于TimescaleDB来说,在时间序列业内也算是首屈一指了,就算是没有技术栈的考虑,选择它也是没有问题的。

整个数据采集系统的架构非常典型,前端API接口接受应用上报数据,然后发送给Kafka(订阅模式),在Kafka的后端进行数据聚合,分批次写入数据库,间隔有2秒的,有1分钟的,还有5分钟,还有更长的1个小时和1天的。1个小时以上的都认为是大粒度的任务,做了特殊的设计,即大粒度分解成小粒度,然后汇总成大粒度的数据。

ShiftLeft定义了两种类型的采集事件,一种是应用上报的指标类数据,另一种实际上也是应用上报的数据,但是跟安全相关的信息,对这类信息进行了特殊的处理。

上报消息中的关键字段:时间戳,消息计数,对于安全类消息的话,包含一些请求消息的一些细节数据,这些数据都是以JSONB的格式存放,这里非常赞一下PostgreSQL对JSONB的支持,一个私有key(叫SP ID),用来标识版本。

在系统运行的过程中,曾经发生过一次性能问题,查询过程中Plan的节点竟然花掉了17秒,但执行阶段只用了250毫秒,这个有点吓人,不过还好的是,这个问题已经被数据库方面修复了。文章中给了一个链接关于这次问题的分析,很有兴趣找机会再翻译一下。

接下来就是任何完整系统都逃不过的系统监控了,我们最近也在选型这个部分。

ShiftLeft其他业务用的数据库也是PostgreSQL,所以用的PGHero来做的数据库请求的监控(https://pghero.dokkuapp.com/datakick,他们一开始想用pg自己的pg_stat_statements这个表的功能来做监控数据,但是发现不合适,人家这个表是看某一个消息处理延迟的,而ShiftLeft的延迟大多是因为大量的消息导致的,单纯每一个消息看的话,都很快。这部分上报数据实际上也都是时间序列的数据,那么最合适的监控和分析工具就是Prometheus(今天看到这个工具好几次了,有缘分啊),我们可以观察他的数据库写入和延迟情况(美图就不贴了)。除了上面的时间序列的监控,还用到了一个PostgreSQL的关于Grafana(哇塞,又看见了一次他)的扩展http://docs.grafana.org/features/datasources/postgres/

接下来要做的事情:
1. 优化一下Timescale那个Hypertables的chunk size
2. 希望加入一个流复制的备节点,这样对于查询可以有一些性能的扩容
3. ShiftLeft现在还处在PostgreSQL9.6版本,计划升级到11版本,因为11版本使用了JIT,性能会有很大的提升。
4. ShiftLeft之前只是对PostgreSQL内部的事务处理做了很多的关注,接下来对于一个消息在API层的处理延迟要进行分析。

希望:
希望未来TimescaleDB能够支持RDS版本,因为ShiftLeft其他业务用的PostgreSQL都已经上云了。

总结:
TimescaleDB是我今年去美国参加新泽西的Postgresql用户大会的时候第一次听见的,也看见了公司的一些开发者,感觉还蛮有朝气的。虽然公司规模不大,但是推广的粒度还挺猛的,后来的一些会议都有这个公司的参与和赞助。
也就是在这次用户大会才了解到了时间序列数据库,想象了一下应用场景,确实还挺多的,特别适合IOT场景,我以前还在想,以后这个世界未来那么多的智能设备,如果每时每刻都要上报数据,那得需要啥样的数据库才能处理的来。

现在好像好多的公司的新的系统开发语言都是选择了GO,这个趋势好明显,我的大Python虽然红红火火, 但是命运也是尴尬的,只能集中在运维和大数据分析领域了。GO的2.0出来,解决了错误处理的诟病之后,说不定会火的不得了了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351