OceanBase 多租户场景下,不同租户之间的资源隔离是如何实现的?在资源争抢时,OB 的调度策略会优先保障哪些租户的业务?
1 个赞
OceanBase 多租户资源隔离与调度策略
根据检索到的文档片段,我将回答您关于OceanBase多租户场景下的资源隔离以及在资源争抢时的调度策略。
1. 资源隔离
1.1 单位(Unit)作为基本单位
- 定义:OceanBase数据库中把Unit当作给租户分配资源的基本单位。一个Unit可以类比于一个Docker容器。
- 分配方式:一个节点上可以创建多个Unit,在节点上每创建一个Unit都会占用一部分该节点的CPU、内存等物理资源。
- 独立性:一个租户可以在多个节点上放置多个Unit,但一个租户在某个节点上只能有一个Unit。一个租户的多个Unit相互独立,目前OceanBase数据库不会汇总多个Unit的资源占用进行全局的资源控制。
1.2 CPU资源隔离
- 活跃线程数控制:在当前版本中,OceanBase通过控制活跃线程数量(实际消耗CPU资源的线程)来控制CPU消耗。每个租户在创建时会指定资源池,资源池定义了最大活跃线程使用数量,从而实现租户间CPU使用的隔离。
- cgroup隔离:在最新版本中,OceanBase内核实现了cgroup的隔离来对CPU和内存资源进行更有效的控制和限制。这需要操作系统级别的配置配合生效。
2. 调度策略
2.1 租户优先级
-
租户优先级设定:默认情况下,所有租户之间的资源争抢遵循平等原则,即没有哪个租户会被特别优先保障。但是,管理员可以通过调整租户的资源池配置(例如设置更高的
max_cpu值)来间接影响调度器的行为,使得某些关键业务租户在资源紧张时能够获得更多的计算能力。 - 自定义权重:虽然直接为租户设置优先级并不是一个公开的功能,但通过调整租户所关联资源池的具体参数(如最大并发事务数、内存大小等),可以达到类似的效果,让部分租户拥有更好的性能表现。
以上信息基于以下文档内容:
希望这些信息对您有所帮助!如果有更多具体细节想要了解,请继续提问。
具体信息可参考以下文档: