首页 > 解决方案 > Scylla 如何处理写入工作负载的激进 memflush 和压缩?

问题描述

Scylla 如何保证/保持写入工作负载情况的低写入延迟,因为更多的写入会产生更多的内存刷新和压缩?有节流吗?如果有人可以回答,那将非常有帮助。

标签: latencyscylla

解决方案


从本质上讲,Scylla 通过并行化问题来提供一致的低延迟,然后适当地优先考虑面向用户的任务和后台任务。

并行化 - Scylla 使用每线程分片架构。每个线程负责其令牌范围内的所有活动。读取、写入、压缩、修复等。

优先级- 每个线程都根据任务的优先级进行调度。处理读取(查询)和写入(提交日志)等高优先级任务获得最高优先级。诸如内存刷新、压缩和修复之类的后台任务仅在有空闲周期时才完成。其中——考虑到现代 CPU 的纳秒级——通常有。

如果没有足够的空闲周期,并且 RAM 或磁盘开始填充,Scylla 将提高后台任务的优先级以保存节点。实际上,这会注入一些延迟。但这表明您可能身材矮小,应该添加一些资源。

我建议从https://go.scylladb.com/real-time-big-data-database-principles-offer.html上的 Scylla 架构白皮书开始。在https://www.scylladb.com/resources/tech-talks/上也有来自 Scylla 开发人员的许多深入会谈

例如,https: //www.scylladb.com/2020/03/26/avi-kivity-at-core-c-2019/ 深入讨论了 shard-per-core。

https://www.scylladb.com/tech-talk/oltp-or-analytics-why-not-both/深入讨论了任务优先级。


推荐阅读