为啥etcd社区建议db大小不超过8g

author author     2023-04-08     312

关键词:

参考技术A db大小会对那些方面造成影响:

treeIndex模块维护了用户key与boltdb key的映射关系,boltdb的key、value有包含了构建treeIndex的所需的数据,etcd启动的时候,会启动不同角色的
goroutine并完成treeIndex构建。

遍历boltdb获取所有key-value的数据,并将其反序列化成etcd的mvccpb.KeyValue结构。核心原理是基于etcd存储在boltdb中的key数据有序性,按版本号
从1开始批量遍历,每次查询1000条key-value记录,直到查询数据为空。

从主goroutine获取mvccpb.KeyValue数据,基于key、版本号、是否带删除表示等信息,构建keyIndex对象,插入到treeIndex模块的B-tree中。

etcd启动时只有一个构建treeIndex的goroutine。

etcd启动时,调用boltdb Open API的时候,设置了mmap的MAP_POPULATE flag,告诉内核预读文件,将db文件内容全部从磁盘加载到物理内存中
(通过mmap机制将db文件映射到内存中)。如果节点内存小于treeIndex内存之和,会触发缺页中断,导致读延时抖动、QPS下降。

boltdb事务提交的四个核心流程:B+ tree的重平衡、分裂,持久化dirty page、持久化freelist以及持久化meta data。

事务提交延时抖动的原因主要是在B+Tree树的重平衡和分裂过程中,需要从freeList中申请若干连续的page存储数据,或者释放空闲个的freelist。

freeList后端实现在boltdb中是array。如果db文件较大,又存在大量的碎片空闲页,很可能导致超时。同时事务提交过程中,也可能会释放若干个page给
freelist,因此需要合并到freelist的数组中,此操作时间复杂度是O(NlogN)。为了优化boltdb事务提交的性能,etcd实现了基于HashMap来管理freelist。
通过引入三个map数据结构(freemaps的key是连续的页数, value是以空闲页的起始页pgid集合,forwardmap和backmap用于释放的时候快速合并页),
将申请和释放时间复杂度降低到O(1),同时支持事务提交时,不持久化freelist,而是通过重启时扫描page重建,以提升etcd写性能、降低db大小。

那些expensive read请求会导致etcd不稳定性:

快照会影响db备份文件生成速度、Leader发送快照给Follower节点的资源开销、Follower节点通过快照重建恢复的速度。

为啥弹性项目不缩小超过内容大小?

】为啥弹性项目不缩小超过内容大小?【英文标题】:Whydon\'tflexitemsshrinkpastcontentsize?为什么弹性项目不缩小超过内容大小?【发布时间】:2021-11-0410:27:28【问题描述】:我有4个flexbox列,一切正常,但是当我在列中添加一些文本... 查看详情

AWS Athena 为啥单行或其列的大小不能超过 32 MB 错误 select * from tableName 但不是在 where 条件

】AWSAthena为啥单行或其列的大小不能超过32MB错误select*fromtableName但不是在where条件【英文标题】:AWSAthenawhysizeofasingleroworitscolumnscannotexceed32MBerrorinselect*fromtableNamebutnotinwhereconditionAWSAthena为什么单行或其列的大小不能超过32MB错误sel... 查看详情

为啥 DB2 建议每个表空间一个表?

】为啥DB2建议每个表空间一个表?【英文标题】:WhydoesDB2suggestonetablepertablespace?为什么DB2建议每个表空间一个表?【发布时间】:2012-02-2108:30:57【问题描述】:DB2/zv10的DB2文档在tablespacessection中有以下sn-p:作为一般规则,每个表... 查看详情

为啥 LibSvm 准确率不超过 50%?

】为啥LibSvm准确率不超过50%?【英文标题】:WhyLibSvmaccuracynotgoingabove50%?为什么LibSvm准确率不超过50%?【发布时间】:2014-11-1208:48:46【问题描述】:我有新闻数据,我想在LibSVM的帮助下进行情感分析,遵循创建训练文件和测试文... 查看详情

腾讯微云上传文件大小限制是多少?为啥我不能上传超过1g的文件?今天刚用不了解,我记得以前不是宣传

腾讯微云上传文件大小限制是多少?为什么我不能上传超过1g的文件?今天刚用不了解,我记得以前不是宣传30多g吗参考技术A下载微云客户端,还有看你的微云还有多少容量 查看详情

为啥颤振项目文件大小超过 500MB?

】为啥颤振项目文件大小超过500MB?【英文标题】:whyflutterprojectfilessizeismorethen500MB?为什么颤振项目文件大小超过500MB?【发布时间】:2021-08-2512:32:18【问题描述】:在Android设备上flutterstartapp“counterapp”的大小是125MB是否正常,... 查看详情

为啥这个递归函数超过调用堆栈大小?

】为啥这个递归函数超过调用堆栈大小?【英文标题】:Whyisthisrecursivefunctionexceedingcallstacksize?为什么这个递归函数超过调用堆栈大小?【发布时间】:2018-10-2816:29:38【问题描述】:我正在尝试编写一个函数来找到1到20之间的所... 查看详情

【css】为啥设置不显示滚动条不好用呢?

参考技术Aoverflow有几个属性:1。overflow:visible;是使滚动条一直显示~~2。overflow:auto;是默认值~内容超过区域大小的时候才显示滚动条~~~3。overflow:hidden;内容超过区域大小的时候,多出来的部分被裁掉~不显示滚动条 查看详情

为啥 Chrome 审核会建议我最小化 cookie 大小?

】为啥Chrome审核会建议我最小化cookie大小?【英文标题】:WhydoesChromeauditrecommendmetominimizecookiesize?为什么Chrome审核会建议我最小化cookie大小?【发布时间】:2012-04-2317:42:58【问题描述】:如何最小化请求的cookie大小?Chrome似乎“... 查看详情

为啥我的一台电脑原装2g后加装8g内存速度和没有加8g内存速度差不多?鲁大师评测只打败7%的电脑

...电脑。还没有另外一台4G内存的机器评分高,请赐教这是为啥?你的主板和CPU型号是什么?系统配置截个图发上来看看。1、是否主板不支持、不识别单条8G内存?如果这样,尽管能开机进操作系统,但系统能利用的内存仍然还是2... 查看详情

为啥基于raft实现的etcd还会出现数据不一致

参考技术ADeployment滚动更新异常,节点莫名消失。根据想象产生的几个猜想:1.etcd集群出现分裂,三个节点分裂成为两个集群。APIServer不会检测各节点集群ID是否一致,因此会出现数据消失现象。2.Raft日志同步异常,其他节点会不会因为... 查看详情

为啥这个函数不超过值 2^31?

】为啥这个函数不超过值2^31?【英文标题】:Whydoesn\'tthisfunctionexceedthevalue2^31?为什么这个函数不超过值2^31?【发布时间】:2012-01-0215:51:53【问题描述】:幂函数(用c++编写)...longpower(longa,longb)longresult=1l;for(inti=0;i<b;i++)result*=a... 查看详情

为啥 mongodb 不给我超过 100 个文件?

】为啥mongodb不给我超过100个文件?【英文标题】:Whymongodbnotgivingmemorethan100documents?为什么mongodb不给我超过100个文件?【发布时间】:2016-09-1615:35:08【问题描述】:为什么我的查询不能处理超过100个集合中的文档?db.collection(\'all... 查看详情

【css】为啥设置不显示滚动条不好用呢?

为什么设置overflow:visible还有滚动条呢?overflow:visible是硬性的不要滚动条,不同的浏览器对于一些情况会出现你所未料的BUG。所以,你应该从逻辑上避免出现滚动,也就是宽度不超过1000px为宜。而不是逻辑上出现了滚动,而去通... 查看详情

为啥不建议@import 链接css?

】为啥不建议@import链接css?【英文标题】:Why@importisnotadvisabletolinkcss?为什么不建议@import链接css?【发布时间】:2011-01-1505:57:53【问题描述】:为什么@import不建议链接css?什么@import不能做&lt;link&gt;可以做,@import和浏览器... 查看详情

为啥pycharm建议将方法更改为静态

】为啥pycharm建议将方法更改为静态【英文标题】:WhydoesPyCharmproposetochangemethodtostatic?为什么pycharm建议将方法更改为静态【发布时间】:2014-06-2614:50:55【问题描述】:新的pycharm版本(3.1.3社区版)提出将不能处理当前对象状态的... 查看详情

蓝鲸社区版部署

部署前准备1.1准备主机和系统环境主机和系统环境(DNS1要设置为127.0.0.1)准备三台Centos7.5虚拟机192.168.51.1034CPU8G200G192.168.51.1044CPU8G200G192.168.51.1054CPU16G200G默认网络配置(三台都需要配置)IPADDR=192.168.51.xxxPREFIX=24GATEWAY=192.168.51.1DNS1=... 查看详情

为啥 PyCharm 不建议为 django 模型自动填充?

】为啥PyCharm不建议为django模型自动填充?【英文标题】:WhyPyCharmisnotsuggestingautofillfordjangomodels?为什么PyCharm不建议为django模型自动填充?【发布时间】:2017-04-2119:52:00【问题描述】:最近我的PyChar停止了对我的django项目的建议。... 查看详情