/images/avatar.png

时序数据库 InfluxDB(五)


系统监控


InfluxDB 自带有一个监控系统,默认情况下此功能是开启的,每隔 10 秒中采集一次系统数据并把数据写入到 _internal 数据库中,其默认使用名称为 monitor 的 RP(数据保留 7 天),相关配置见配置文件中的:

时序数据库 InfluxDB(四)


存储引擎


InfluxDB 数据的写入如下图所示:

/images/influxdb/write-data.png

所有数据先写入到 WAL( Write Ahead Log )预写日志文件,并同步到 Cache 缓存中,当 Cache 缓存的数据达到了一定的大小,或者达到一定的时间间隔之后,数据会被写入到 TSM 文件中。

时序数据库 InfluxDB(三)


数据类型


InfluxDB 是一个无结构模式,这也就是说你无需事先定义好表以及表的数据结构。

InfluxDB 支持的数据类型非常简单:

  • measurement : string
  • tag key : string
  • tag value : string
  • field key : string
  • field value : string , float , interger , boolean

你可以看到除了 field value 支持的数据类型多一点之外,其余全是字符串类型。

时序数据库 InfluxDB(二)


RP


先回顾一下 RP 策略( retention policy ),它由三个部分构成:

  • DURATION:数据的保留时长。
  • REPLICATION:集群模式下数据的副本数,单节点无效。
  • SHARD DURATION:可选项,shard group 划分的时间范围。

前两个部分没啥好说的,而 shard duration 和 shard group 的概念你可能会感到比较陌生。

时序数据库 InfluxDB(一)


数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis ),Wide column 类型( 如 HBase )等等等等,当然还有本系列文章将会介绍的时序数据库 TSDB( 如 InfluxDB )。

Go Errors 错误处理

Golang 中的 error 是一个内置的特殊的接口类型:

1
2
3
type error interface {
    Error()  string
}

在 Go 1.13 版本之前,有关 error 的方法只有两个:

  • errors.New :
1
func New(text string) error
  • fmt.Errorf :
1
func Errorf(format string, a ...interface{}) error

这两个方法都是用来生成一个新的 error 类型的数据。

Go 垃圾回收

Garbage Collection( GC )也就是垃圾回收到底是什么?内存空间是有限的,诸如变量等需要分配内存才能存储数据,而当这个变量不再使用的时候就需要释放它占用的内存,这就是垃圾回收。

从 V8 优化看高效 JavaScript【译】

文本翻译自: https://blog.logrocket.com/how-javascript-works-optimizing-the-v8-compiler-for-efficiency


理解 JavaScript 是如何工作的对于编写高效的 JS 大有帮助。

V8 执行 JS 分为三个阶段:

  • 源代码转换为 AST 抽象语法树。
  • 语法树转换为字节码:这个过程由 V8 的 Ignition 完成,2017年之前是没有的。
  • 字节码编译成机器码:由 V8 的编译器 TurboFan 来完成。

第一个阶段并不是文本的讨论范围,第二三阶段对于编写优化 JS 有直接影响。

微服务互通的桥梁: gRPC 入门示例

RPC 是什么?Remote Procedure Call ,远程过程调用,一种通信协议。你可以理解为,在某台机器上调用另外一台机器上的服务或方法。

应用服务对外可以提供 REST 接口以供进行服务的调用,那么对于分布式系统内部的微服务之间的相互调用呢?REST 的方式仍然可行,但是效率不高,因此 RPC 出现了。