热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阅读笔记:HowShiftLeftUsesPostgreSQLExtensionTimescaleDBHighScalability

https:blog.shiftleft.iotime-series-at-shiftleft-e1f98196909bShiftLeft是一个安全公司,公司会涉及到大量的关于时间

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出来,解决了错误处理的诟病之后,说不定会火的不得了了。


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
author-avatar
木瓜香皂a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有