influx-proxy
influx-proxy copied to clipboard
关于measurements的prefix的疑惑
关于measurement会去判断是不是前缀,这样设计的话如果两个单词局部相同,不就混了吗
func (ic *InfluxCluster) GetBackends(key string) (backends []BackendAPI, ok bool) {
....
if strings.HasPrefix(key, k) {}
...
如cpu和cpu_percent这样会去write到同样的backends
这是个能work的设计,并不是完备的设计。如果要完备的话,可以用regex来判断命中。但是regex的算法量和使用难度都比keyword要大大升高。所以综合考虑下来,我们还是采用keyword来判断。至于混淆的问题,实际上我们的所有key都有一定分类前缀要求,所以反而问题不大。例如我们实际认为cpu和cpu_percent应该就是放到一起去的。mem和所有mem*放一起。
这是个能work的设计,并不是完备的设计。如果要完备的话,可以用regex来判断命中。但是regex的算法量和使用难度都比keyword要大大升高。所以综合考虑下来,我们还是采用keyword来判断。至于混淆的问题,实际上我们的所有key都有一定分类前缀要求,所以反而问题不大。例如我们实际认为cpu和cpu_percent应该就是放到一起去的。mem和所有mem*放一起。
好的,谢谢,另外还有个疑问,这个方案使用的时候像一台机器你们会创建多个database,然后多个应用共用一台机器,还是说一个应用就用某几台,另一个应用用另外的几台
我们一台机器就创建一个db。这个系统的最主要场景是单个机器无法容纳所有指标了,但是可以容纳其中几个指标。所以我们做了分片,使得1,2,3这几个指标在机器A,4,5,6这几个在机器B。但是对外表现上,他们好像就在一台机器一样。客户无需去思考,这个指标需要用什么IP去存取。而一旦我们做了这个,我们就不需要对指标做再分组了。所有指标都是在一个虚拟的大db里的,最后映射到一台或多台后端机器。