FantasticMao 技术笔记
BlogGitHub
  • README
  • C & Unix
    • C
      • 《C 程序设计语言》笔记
      • C 语言中的陷阱
      • CMake 示例
      • GNU make
      • LLVM Clang
      • Nginx 常用模块
      • Vim 常用命令
    • Unix-like
      • 《深入理解计算机系统》笔记
      • 《UNIX 环境高级编程》笔记 - UNIX 基础知识
      • 《UNIX 环境高级编程》笔记 - 文件 IO
      • 《UNIX 环境高级编程》笔记 - 标准 IO 库
      • 《鳥哥的 Linux 私房菜》笔记 - 目录配置
      • 《鳥哥的 Linux 私房菜》笔记 - 认识与学习 bash
      • 《鳥哥的 Linux 私房菜》笔记 - 任务管理
      • OpenWrt 中的陷阱
      • iptables 工作机制
  • Go
    • 《A Tour of Go》笔记
    • Go vs C vsJava
    • Go 常用命令
    • Go 语言中的陷阱
  • Java
    • JDK
      • 《Java 并发编程实战》笔记 - 线程池的使用
      • 设计模式概览
      • 集合概览
      • HashMap 内部算法
      • ThreadLocal 工作机制
      • Java Agent
    • JVM
      • 《深入理解 Java 虚拟机》笔记 - Java 内存模型与线程
      • JVM 运行时数据区
      • 类加载机制
      • 垃圾回收算法
      • 引用类型
      • 垃圾收集算法
      • 垃圾收集器
    • Spring
      • Spring IoC 容器扩展点
      • Spring Transaction 声明式事务管理
      • Spring Web MVC DispatcherServlet 工作机制
      • Spring Security Servlet 实现原理
    • 其它
      • 《Netty - One Framework to rule them all》演讲笔记
      • Hystrix 设计与实现
  • JavaScript
    • 《写给大家看的设计书》笔记 - 设计原则
    • 《JavaScript 权威指南》笔记 - jQuery 类库
  • 数据库
    • ElasticSearch
      • ElasticSearch 概览
    • HBase
      • HBase 数据模型
    • Prometheus
      • Prometheus 概览
      • Prometheus 数据模型和指标类型
      • Prometheus 查询语法
      • Prometheus 存储原理
      • Prometheus vs InfluxDB
    • Redis
      • 《Redis 设计与实现》笔记 - 简单动态字符串
      • 《Redis 设计与实现》笔记 - 链表
      • 《Redis 设计与实现》笔记 - 字典
      • 《Redis 设计与实现》笔记 - 跳跃表
      • 《Redis 设计与实现》笔记 - 整数集合
      • 《Redis 设计与实现》笔记 - 压缩列表
      • 《Redis 设计与实现》笔记 - 对象
      • Redis 内存回收策略
      • Redis 实现分布式锁
      • Redis 持久化机制
      • Redis 数据分片方案
      • 使用缓存的常见问题
    • MySQL
      • 《高性能 MySQL》笔记 - Schema 与数据类型优化
      • 《高性能 MySQL》笔记 - 创建高性能的索引
      • 《MySQL Reference Manual》笔记 - InnoDB 和 ACID 模型
      • 《MySQL Reference Manual》笔记 - InnoDB 多版本
      • 《MySQL Reference Manual》笔记 - InnoDB 锁
      • 《MySQL Reference Manual》笔记 - InnoDB 事务模型
      • B-Tree 简述
      • 理解查询执行计划
  • 中间件
    • gRPC
      • gRPC 负载均衡
    • ZooKeeper
      • ZooKeeper 数据模型
    • 消息队列
      • 消息积压解决策略
      • RocketMQ 架构设计
      • RocketMQ 功能特性
      • RocketMQ 消息存储
  • 分布式系统
    • 《凤凰架构》笔记
    • 系统设计思路
    • 系统优化思路
    • 分布式事务协议:二阶段提交和三阶段提交
    • 分布式系统的技术栈
    • 分布式系统的弹性设计
    • 单点登录解决方案
    • 容错,高可用和灾备
  • 数据结构和算法
    • 一致性哈希
    • 布隆过滤器
    • 散列表
  • 网络协议
    • 诊断工具
    • TCP 协议
      • TCP 报文结构
      • TCP 连接管理
由 GitBook 提供支持
在本页
  • 数据模型 / 存储
  • 架构设计
  • 总结
  • 参考资料
  1. 数据库
  2. Prometheus

Prometheus vs InfluxDB

最后更新于1年前

是一个开源的时许数据库,商业版本额外提供「弹性扩展」和「集群部署」的特性。Prometheus 和 InfluxDB 之间有着显著的差异,两者各自面向不同的使用场景。

数据模型 / 存储

与 Prometheus 类似,InfluxDB 数据模型也将 key-value 键值作为标签信息。另外 InfluxDB 还有二级标签,被称为字段(fields),但在使用上会受到更多限制。InfluxDB 支持的时间戳精度高达纳秒级别,还支持 float64、int64、bool 和 string 数据类型。相比之下,Prometheus 只支持毫秒级别的时间戳精度,还有 float64 和 string 数据类型(==FIXME==)。

InfluxDB 使用一种 变种的数据结构来存储预写日志(write ahead log,WAL),并且会以时间来进行数据分片。相比 Prometheus 的 AOF(append only file)方式(==FIXME==),InfluxDB 更加适合记录事件日志的场景。

架构设计

Prometheus 服务彼此之间独立运行,并且仅依靠本地存储来实现 Prometheus 的核心功能:数据抓取、规则处理,以及告警。开源版本的 InfluxDB 也是类似。

商业版的 InfluxDB 提供了一个分布式的存储集群,存储和查询将由多个节点同时处理。这意味着商业版的 InfluxDB 更加易于水平扩展,但也意味着你必须从一开始就要接受和管理分布式存储系统带来的复杂性。

Prometheus 运行起来会更加简单,但在某些时候,你将需要按照产品、服务、数据中心或者类似的边界条件来显式地对 Prometheus 服务进行划分。Prometheus 服务之间独立运行(可以并行运行来冗余数据)的方式,更加有利于服务的可靠性和故障隔离。

总结

InfluxDB 和 Prometheus 两者之间有很多相似之处。两者都有用于高效支持多维指标的标签,都使用基本相同的数据压缩算法,都有广泛的集成(包括对彼此生态的集成),都有易于扩展的钩子(例如在统计工具中分析数据、执行自动化操作)。

InfluxDB 更加适用的场景:

  • 如果需要记录日志事件

  • 商业版的 InfluxDB 提供的集群模式,更加适用于数据的长期存储

  • 如果需要多个数据副本之间的最终一致性

Prometheus 更加适用的场景:

  • 如果主要用于记录监控指标

  • 更加强大的查询语言和告警功能

  • 对监控图表和告警功能需要更高的可靠性

InfluxDB 是由一家商业公司按照开放核心功能的模式来维护,并提供了闭源的高级功能,例如集群模式、服务托管和技术支持。Prometheus 是一个完全开源和独立的项目,由多家公司和个人来维护,其中还有一些公司会提供商业服务和技术支持。

参考资料

InfluxDB
LSM Tree
Comparison to alternatives
InfluxDB storage engine