【翻译】驯服野兽:Scylla 如何利用控制理论来控制压实
但凡跟 rocksdb 一类的存储引擎打过交道的同学一定会有一个烦恼,就是在大量
写入的时候引发的 compaction 很容易把 cpu 和磁盘带宽占满,影响了业务的正常读写,如
何解决这个问题,让磁盘读写和 compaction 自动根据业务负载有条不紊地进行,scylladb 给
出了他自己的答案。
教 程 翻 译 自 Seastar 官 方 文 档 :
https://www.scylladb.com/2018/06/12/scylla-leverages-control-theory/
转载请注明出处:https://www.cnblogs.com/morningli/p/16170046.html
从鸟瞰的角度来看,数据库的任务很简单:用户插入一些数据,然后再获取它。但是当我
们仔细观察时,事情变得更加复杂。例如,为了持久性,数据需要进入提交日志,需要被索
引,并且被多次重写以便可以轻松获取。
所有这些任务都是数据库的内部进程,它们将争夺有限的资源,如 CPU、磁盘和网络带
宽。然而,授予其中一个或另一个特权的回报并不总是很清楚。这种内部过程的一个例子是
compactions,这是任何具有基于日志结构化合并 (LSM) 树的存储层的数据库中的一个事实,
比如 ScyllaDB。
LSM 树由源自数据库写入的 append-only 的不可变文件组成。随着写入的不断发生,系
统可能会变成相同的 key 的数据会出现在许多不同的文件中,这使得读取非常昂贵。然后,
这些文件根据用户选择的压缩策略在后台由 compaction process 进行压缩。如果我们花费更
少的资源来压缩现有文件,我们可能能够实现更快的写入速率。但是,读取将受到影响,因
为它们现在需要访问更多文件。
设置用于压缩的资源量的最佳方法是什么?一个不太理想的选择是以可调参数的形式将
决定推给用户。然后,用户可以在配置文件中选择专用于压缩的带宽。然后,用户负责
trial-and-error 调试周期来尝试为匹配的工作负载找到正确的数字。
在 ScyllaDB,我们认为这种方法是脆弱的。手动调优对工作负载的变化没有弹性,其中
许多变化是无法预料的。资源稀缺时峰值负载的最佳速率可能不是集群非工作时间(资源充
足时)的最佳速率。但是,即使调优周期确实能以某种方式找到一个好的速率,该过程也会
显著增加操作数据库的成本。
在本文中,我们将讨论 ScyllaDB 规定的解决此问题的方法。我们借鉴了工业控制器的数
学框架,以确保压缩带宽自动设置为合适的值,同时保持可预测的系统响应。
控制系统入门
评论0
最新资源