【翻译】驯服野兽:Scylla 如何利用控制理论来控制压实

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

教程翻译自Seastar官方文档:https://www.scylladb.com/2018/06/12/scylla-leverages-control-theory/

转载请注明出处:https://blog.csdn.net/morningli/p/16170046.html

从鸟瞰的角度来看,数据库的任务很简单:用户插入一些数据,然后再获取它。但是当我们仔细观察时,事情变得更加复杂。例如,为了持久性,数据需要进入提交日志,需要被索引,并且被多次重写以便可以轻松获取。

所有这些任务都是数据库的内部进程,它们将争夺有限的资源,如 CPU、磁盘和网络带宽。然而,授予其中一个或另一个特权的回报并不总是很清楚。这种内部过程的一个例子是 compactions,这是任何具有基于日志结构化合并 (LSM) 树的存储层的数据库中的一个事实,比如 ScyllaDB。

LSM 树由源自数据库写入的append-only的不可变文件组成。随着写入的不断发生,系统可能会变成相同的key的数据会出现在许多不同的文件中,这使得读取非常昂贵。然后,这些文件根据用户选择的压缩策略在后台由 compaction process进行压缩。如果我们花费更少的资源来压缩现有文件,我们可能能够实现更快的写入速率。但是,读取将受到影响,因为它们现在需要访问更多文件。

设置用于压缩的资源量的最佳方法是什么?一个不太理想的选择是以可调参数的形式将决定推给用户。然后,用户可以在配置文件中选择专用于压缩的带宽。然后,用户负责trial-and-error 调试周期来尝试为匹配的工作负载找到正确的数字。

在 ScyllaDB,我们认为这种方法是脆弱的。手动调优对工作负载的变化没有弹性,其中许多变化是无法预料的。资源稀缺时峰值负载的最佳速率可能不是集群非工作时间(资源充足时)的最佳速率。但是,即使调优周期确实能以某种方式找到一个好的速率,该过程也会显著增加操作数据库的成本。

在本文中,我们将讨论 ScyllaDB 规定的解决此问题的方法。我们借鉴了工业控制器的数学框架,以确保压缩带宽自动设置为合适的值,同时保持可预测的系统响应。

控制系统入门

虽然我们无法通过查看系统神奇地确定最佳压缩带宽,但我们可以设置希望数据库遵守的用户可见行为。一旦我们这样做了,我们就可以使用控制理论来确保所有部分以指定的速率协同工作,从而实现所需的行为。这种系统的一个例子是汽车的巡航控制。虽然不可能猜测每个部分的单独设置会结合起来使汽车以所需的速度行驶,但我们可以简单地设置汽车的巡航速度,然后期望各个部分进行调整以实现这一目标。

特别是,我们将在本文中关注闭环控制系统——尽管我们也在 ScyllaDB 中使用开环控制系统。对于闭环控制系统,我们有一个被控制的过程和一个执行器,它负责将输出移动到特定状态。期望状态和当前状态之间的差异称为误差,它会反馈给输入。因此,闭环控制系统也称为反馈控制系统</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值