今天SRE调整了我开发的应用的底层的数据库连接服务。这个数据库连接服务是我们公司自研的,主要用于实现分库分表的聚合查询。使用该组件之后,应用系统访问数据表时,无论分了多少个库,多少张表,访问方式都和单库单表的方式一致。其实就是简化了应用层的逻辑。为什么不用开源的分库分表方案呢?没有为什么,有时候我们就是喜欢自己造造轮子……
这套数据库连接服务使用的是C++编写的,C++的程序没有JVM的垃圾回收机制,按道理来讲就不存在堆存大小影响应用停顿时间,进而影响应用P99的响应时间的问题。所以,按道理来说,高配置小集群和低配置大集群的效果应该是差不多的。如果考虑到应用启动需要的额外开销,甚至可以认为高配置小集群的效果更优。
但是,SRE调整完底层配置之后,应用出现了明显的抖动。
下面是调整前的图形:
下面是调整后的图形:
错误率的波动率明显变大了。
从现象看,高配置小集群的效果明显要比低配置大集群要差。具体是什么原因呢,让人费解……