从一到无穷大 #7 Database-as-a-Service租户隔离挑战与解决措施

文章目录

  • 引言
  • 计算侧多租户隔离
    • 2DFQ
    • SQLVM
    • Retro
  • 其他隔离方法
  • 其他

引言

在云环境中租户之间的资源共享对于运营商的成本效益来说非常重要,但是一个主要问题是租户之间的资源隔离,这通常与Qos息息相关,从多租户的角度讲,安全性/性能与成本其实是互相矛盾的,[1]中提到:

• Degree of consolidation: The higher up in the stack virtualization is supported, the greater the degree of consolidation
achievable, leading to lower cost for the service provider.
• Degree of isolation: The lower down in the stack the virtualization logic is supported, the greater is the security and
performance isolation achievable across tenants.

所以核心要解决的问题是:在云环境Serverless的环境中,运营商如何在保证成本效益的情况下向用户提供一系列有意义的保障。

租户隔离其实可以理解为租户间的资源隔离,就这个角度讲,租户隔离需要在以下要点之间做trade-off

  1. 绝对的资源保障,即提供给用户的资源与购买时相比是任意时刻满足还是周期内近似满足
  2. 不对用户实际运行的工作负载做假设,即用户的查询可能在Mem/磁盘IO/网络IO/CPU任意维度先过载
  3. 满足用户弹性扩容物理隔离的需求
  4. 运营商成本效益,即单独的机器在近似满足其他约束的情况下尽可能多的放置租户,但是当资源被过度使用时,一个节点有可能没有足够的资源来满足其上所有数据库的资源需求,此时需要迁移或者扩容。

从公有云的定价策略来看,目前大体可以分为两种:

  1. 存储量+RU(某些模态可以是扫描的数据量)
  2. 存储+实例+其他

用户使用第一种(serverless)的初衷是为了省钱,为了扎实的价格竞争力在计算侧做资源级别的隔离是一个好的选择,因为这个时候计算层也可以选择大池子超卖。但是此时就会有超卖后不满足用户要求的情况出现。

用户使用第二种按照实例购买时,单独分配计算节点,存储节点依旧按照partition级别做隔离。而且当存算分离时存储节点基本上不会有CPU瓶颈,瓶颈基本集中在IO,而IO的基准线经测试是基本线性,此时多租户隔离很好做,因为在引擎层面工作负载的问题基本已经压缩到IO了,不需要大刀阔斧改引擎

计算侧多租户隔离

但是计算侧为了足够的成本效益仍旧需要放置多个租户在一台机器上,此时有这么几种方法。

2DFQ

应用场景为系统运行一组工作线程,工作线程从租户队列中选择下一个执行的请求,公平队列可以做到工作线程取任务执行的过程为每个租户提供公平的份额,且为不同租户服务时调度器不是突发的。

相对于一般的公平队列,2DFQ优势是The goal of Two-Dimensional Fair Queueing (2DFQ) is to produce smooth schedules for tenants with small requests.

但是正因为2DFQ是WFQ的变种,所以其计算时认为请求消耗的资源大小是像数据包大小一样可预测的,其实这很难做到,目前可行的方法是按照关系型数据库中SQL优化层中Cardinality estimation(不是count distinct的那个)的做法采样做预估。

设计挑战如下:

  1. 资源并发性
  2. 不同租户和不同API的请求对资源的需求可以达到1000倍(每一个请求在不同的线程中有不同的资格,小请求)
  3. 存在一个请求的资源需求和执行时间是不确定的(悲观估计策略)

2DFQ一篇论文其实就一段有用:
在这里插入图片描述

SQLVM

应用于单进程中多租户的性能隔离方案。这篇文章提出了在DBMS中内嵌一个VM,这个VM提供了资源最小使用粒度的reservation,并引入新的资源调度机制,以保证每个租户的资源reservations,最后在服务提供方无法满足约束时记录事件,后续补偿用户。

本质上仍然是在OS层面之上,即用户态中新增了一个资源调度层,以满足不同租户间的资源最低使用限度。文中只提到了IO调度的实际方法,[6]中提到了CPU的隔离方法,但是内存隔离没有提及。

但是其实方法是通用的,类似的方案可以在TiFlash中看到[8]。

其次SQLVM的做法其实是硬性限定了租户的资源使用上限,即最多就是reservations的值,不能多一点点,这对于突发请求防御性较差

Retro

这篇文章阐述的框架与Dynamo的RU控制框架较为类似。retro将机器上的组件抽象为控制流(每一个租户一个控制流),资源(执行资源的精确统计)和控制点(控制节点实际执行限流的措施,文中提到令牌桶)。一个控制节点提供一组API接受控制流的上报,执行BFAIR/RDRF/LATENCYSLO策略,决策控制点实际的限流策略。所以从隔离来讲其实还是基于限流点做,文中提到资源限制可以通过限制用户的吞吐来做(4.3节)。

但是Retro对于资源的态度与Dynamo也不一样。Dynamo是给每个租户分配一个配额,希望在周期内只使用这么多(不考虑burst),但是Retro对资源始终有一种探索上界的过程(BFAIR/RDRF),知道发现某个租户导致过载,则会减少资源需求,实际由控制点控制,这样可以让租户实际使用更多的资源

(题外话:BFAIR/RDRF两种策略与我最近设计的两个算法莫名的相似。。。。)

其他隔离方法

类似Redis慢查询隔离和HTAP负载隔离解决方法其实是完全不同的解决思路,都是很简单的思路,难点在于工业实现上,本文不再阐述。

其他

二十三岁的九局下半

参考:

  1. Multi-Tenant Cloud Data Services: State-of-the-Art, Challenges and Opportunities
  2. Tenant Placement in Oversubscribed Database-as-a-Service Clusters
  3. SQLVM: Performance Isolation in Multi-Tenant Relational Database-as-a-Service
  4. Retro: Targeted Resource Management in Multi-tenant Distributed Systems
  5. 2DFQ: Two-Dimensional Fair Queueing for Multi-Tenant Cloud Services
  6. CPU Sharing Techniques for Performance Isolation in Multi-tenant Relational Database-as-a-Service
  7. 数据库内核那些事|PolarDB HTAP如何实现行列混存(IMCI)查询优化?
  8. TiDB 6.5 新特性解析丨过去一年,我们是如何让 TiFlash 高效又稳定地榨干 CPU?
  9. 为什么资源隔离对HTAP至关重要?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/16837.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

〖Python网络爬虫实战⑲〗- 数据存储之CSV文件

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

DolphinScheduler海豚调度教程

DolphinScheduler 教程 (一)入门指南 简介 关于Dolphin Apache DolphinScheduler是一个分布式易扩展的可视化DAG工作流任务调度开源系统。解决数据研发ETL 错综复杂的依赖关系,不能直观监控任务健康状态等问题。DolphinScheduler以DAG流式…

欧拉奔赴品牌2.0时代,女性汽车真实用户需求被定义?

每年的上海国际汽车工业展览会,不仅是各大汽车品牌的技术“秀场”,也是品牌的营销“修罗场”。今年上海车展出圈的营销事件特别多,热度甚至一再蔓延到汽车行业外,其中欧拉也贡献了不少流量。 据了解,在2023上海车展欧…

ModuleNotFoundError: No module named ‘mmcv._ext‘

mmsegmentation使用pyinstaller打包出现问题 mmsegmentation是商汤开源的语义分割框架,里面包含了大量SOTA模型,十分适合从事语义分割工作的小白学习。 最近想将mmsegmentation打包成exe进行使用,但是遇到了一个问题,在打包的过…

Photon AI Translator 和做产品的一些思考

近 4 个月内我一直在做 Apple 平台的产品,虽然从使用量来说「简体中文」用户是占多数,但我一直有做多语言的支持:英语、简体中文和繁体中文。习惯上 Google 翻译的我,基本上在使用 Xcode 过程中也会一直在浏览器开着 Google Trans…

目标跟踪--卡尔曼滤波 与 匈牙利算法

目前主流的目标跟踪算法都是基于Tracking-by-Detecton策略,即基于目标检测的结果来进行目标跟踪。 跟踪结果中,每个bbox左上角的数字是用来标识某个人的唯一ID号。那么问题就来了,视频中不同时刻的同一个人,位置发生了变化&#x…

《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记

目录 一、论文摘要 1.背景 2.方法 3.结果 4.结论 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究&#xff…

【算法】冒泡排序

一.冒泡排序 主要思想: 反复交换相邻的元素,使较大的元素 逐渐冒泡到数组的末尾,从而实现排序的效果 实现过程: 1.遍历待排序数组,比较相邻的元素,如果前面的元素比后面的元素大, 就交换这两…

07 Kubernetes 网络与服务管理

课件 Kubernetes Service是一个抽象层,用于定义一组Pod的访问方式和访问策略,其作用是将一组Pod封装成一个服务,提供一个稳定的虚拟IP地址和端口号,以便于其他应用程序或服务进行访问。 以下是Kubernetes Service YAML配置文件的…

transformer and DETR

RNN 很难并行化处理 Transformer 1、Input向量x1-x4分别乘上矩阵W得到embedding向量a1-a4。 2、向量a1-a4分别乘上Wq、Wk、Wv得到不同的qi、ki、vi(i{1,2,3,4})。 3、使用q1对每个k(ki)做attention得到a1,i(i{1,2,3,4…

项目经理在项目中是什么角色?

有人说,项目经理就是一个求人的差事,你是在求人帮你做事。 有人说,项目经理就是一个与人扯皮的差事,你要不断的与开发、产品、测试等之间沟通、协调。 确实,在做项目的时候,有的人是为了完成功能&#x…

( 数组和矩阵) 769. 最多能完成排序的块 ——【Leetcode每日一题】

❓769. 最多能完成排序的块 难度:中等 给定一个长度为 n 的整数数组 arr ,它表示在 [0, n - 1] 范围内的整数的排列。 我们将 arr 分割成若干 块 (即分区),并对每个块单独排序。将它们连接起来后,使得连接的结果和按升序排序后…

1. 先从云计算讲起

本章讲解知识点 什么是云计算? 为什么要用云计算? 物理服务器与云服务器对比 云计算服务类型 云计算部署类型 1. 什么是云计算? 云计算是一种通过计算机网络以服务的方式提供动态可伸缩的虚拟化资源的计算模式。按照服务层次分为IaaS、…

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

随着更多的公链底层面向市场,通过参与早期测试在主网上线后获得激励成为了行业的一个热点话题,在 Apots、Arbitrum One、Optimism等陆续发放了测试空投后,以 Layer3为主要特性的 Nautilus Chain 也在前不久明确表示将会有空投,引发…

ESP8266_RTOS_SDK之SPIFFS

需要在ESP8266的FLASH中存储一些可变参数,有两种方式,一种是调用SPI Flash API直接指定地址读写FLASH;二是在SPI FLASH上创建一块SPIFFS 分区,以读写文件的形式存取数据。 下面记录第二种方式,使用SPIFFS文件系统存取…

【Unity入门】20.三维向量

【Unity入门】三维向量 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)空间向量 (1)什么是三维向量 为什么会有这么一篇博客呢?主要是三维向量在unity中…

数据库之事务隔离级别详解

事务隔离级别详解 一、事务的四大特性(ACID)1. 原子性(atomicity):2. 一致性(consistency):3. 隔离性(isolation):4. 持久性(durability): 二、事务的四种隔离级别1. 读未提交(Read uncommitted)&#xff1…

吧佬联手抵制奸商,百元级游戏电脑横出江湖

最近小忆闲得在电商平台搜索了下关键词「游戏主机」,不出意外销量榜前列清一色全是「i9 级高端游戏主机」。 这些主机不论配置单介绍还是十万百万级销量宣传标语,都给人一种血赚不亏的「豪华」感。 咱就说时代在变,唯一不变的是奸商们的套路与…

指针函数和函数指针

本文目录 • 前言 • 一、返回指针的函数 二、指向函数的指针回到顶部 一、返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的。 返回指针的函数的一般形式为:类型名 * 函数名(参数列表) 比如下面这个函数&#…

「Codeforces」771-div2 E. Colorful Operations

E. Colorful Operations https://codeforces.com/contest/1638/problem/E 题目描述 给你一个数组,默认初始元素为 0 ,颜色为 1,有三种操作: Color l r c:将 [l, r] 区间内的颜色修改为 cAdd c x:将所有颜…