从一到无穷大 #22 基于对象存储执行OLAP分析的学术or工程经验,我们可以从中学习到什么?

在这里插入图片描述本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。

文章目录

  • 引言
  • 以AWS S3为例的对象存储基本特征
    • 成本
    • 时延
    • 吞吐量
    • 最优请求大小
    • Model for Cloud Storage Retrieval
  • CLOUD STORAGE INTEGRATION
    • 线程模型概要设计
    • Object Scheduler
  • 性能
  • 结束语

引言

刷完近N年内数据库顶会的时序数据库论文后,我开始把目光投向相关领域的基础方向,vldb2023这篇《Exploiting Cloud Object Storage for High-Performance Analytics》的名字听起来就是一个有趣的主题,且其涉及的内容也和云时序数据库系统关系颇深。

时序数据库本身可以认为是分析性负载,古典的列式存储引擎配合各种奇妙优化后的压缩算法使存储量可以达到原始数据量的百分之十以下(与数据类型有关)。在如今基础架构强调降本增效的大背景下,原本使用Cassandra,Hbase,mysql等不够成本效益的业务倾向于使用时序数据库。一般情况下强大的压缩能力我们认为可以带来成本的大幅度下降,但是在架构不够“弹性”的情况下却无法达到这一美好愿景,举个简单的例子,比如一台16C64G一块3.5T的物理机,分析性需求使得内存和CPU先行到达瓶颈,存储量却大片大片的空余,剩下的存储空间也无法被利用,想要在价格上做到有竞争力,必须提升存储利用率,这里有两个使用存算分离的必要因素:

  1. 公司基础架构的长期思路一定是为了节省成本而使用比例一致的高密机型,不太可能给在保留CPU/内存比例的情况下减少存储介质的上限
  2. 不同的业务场景CPU/内存/存储的使用比例不相同,存储计算不分离的情况下资源利用率永远无法全局最优

基于上述考虑,这篇文章事实上是有工程意义的。

本篇文章的贡献我个人认为可以分为如下三个方面:

  1. 提供一套分析方法决策如何使用对象存储可以在最佳带宽,成本效益以及性能这三个维度达到最优
  2. 现有S3客户端实现较差,且目前用户倾向于使用多云,作者实现了AnyBlob这样的多云对象存储客户端,其中使用io_uring,优化的域名解析器,使用AES而不是https 这三种策略减少使用对象存储CPU消耗,并在其中支持多云客户端。
  3. 云存储集成对象存储章节中详细给出实现细节(有没有实践意义另说),其中调度器的设计确实值得思考,其统计访问对象存储和实际引擎处理的资源消耗,给这两种场景动态分配线程,以达到更高的整体吞吐量,这种思路可以用在很多场景中,比如读写分离,快慢查询分离等

以AWS S3为例的对象存储基本特征

成本

主流云厂商对象存储的计费结构类似,本文对于成本效益的讨论也是基于这种计费模式的

  1. 存储成本
  2. 查询/修改的API开销
  3. region间的流量传输费用
    在这里插入图片描述
    2024.2.4 美元到人民币的汇率是7.12,以AWS举例,其存储成本换算成人民币大概是0.163/G/month。

因为部分历史原因,我曾经负责过一段时间腾讯云对象存储索引层,来看看自家产品的成本构成[3],计费模式分为按量计费[4]和资源包[5]。以按量计费为例:
在这里插入图片描述
费用组成如上,相比于AWS,多收了数据取回费用,相对应的存储容量费用和API计费腾讯云会比友商便宜一点[6],但是值得一提的是腾讯云读写费用是一致的,但是国外友商是把读写分开计费的。

时延

在这里插入图片描述
这里的冷热定义是第一次请求为冷和迭代访问的第二十次为热,基于此分析可以看出几个关键结论:

  1. 达到吞吐量最大的限制是时延,所以为了达到对象存储的最大吞吐量,必须存在大量并发请求
  2. 对于8MB以上的对象,对象大小增加一倍,时延会增加近一倍,意味着8MB以上提升对象大小对于吞吐量没有显著提升
  3. 对于小文件首字节和总体时延基本一致

在这里插入图片描述
实验生成随机的16MB数据,上图显示8周访问对象的带宽,因为不同租户间共享带宽,带宽上限存在互相影响的情况,这是这使得延迟其实很难预测
在这里插入图片描述
这个结论也比较有趣,图 4 所示的实验访问了随机生成的 16 MiB 对象。每次运行后,在下一次运行前都不会访问存储桶,为减少缓存影响,执行间隔(至少)为 12 小时。

实验显示出S3的平均延迟其实更高,其次S3存在一个最低延迟,且不存在异常值;其他云厂商的时延更低,但是方差更大。

以我的经验,异常值更多和集群相关,虽然运营的安全水位会把资源保持在一定比例下,保证延迟,但是部分集群存在大客户,突发的访问(list/del/get)等会严重影响此存储节点上的其他租户,而分裂本身存在滞后性,所以异常值本身比例不高可以忽略,但是这样的实验可以告诉我们客户端超时值设置为多少是一个合理范围,即测试后PN个9的时延,这样做在API计费的情况下在成本效益和效率之间达到平衡。

吞吐量

对于OLAP负载,最看重的其实是存储的综合吞吐量,因为需要获取大量的数据执行分析,数据不够无法吃满CPU/内存。

在这里插入图片描述
上述实验为访问随机生成的16MB对象,使用多个线程同时调用256个请求,每一个数据点都表示1s内获取数据大小的总和,这个实验我们可以获取如下结论:

  1. get请求本身可以吃满对象存储的带宽
  2. 不同区域间表现存在差异

最优请求大小

这一节的结论建立在国外友商的计费基础上。

文章认为最优请求大小需要在性能和成本之间做权衡,在计费章节我们看到腾讯云不同于友商,还额外收取了获取数据大小费用,所以本章的结论对于腾讯云其实不适用。

在这里插入图片描述
上图展示了分别使用独占和spot模式的EC2不同请求大小下S3的成本效益,可以得到如下结论:

  1. 16MB更具性价比

Model for Cloud Storage Retrieval

请添加图片描述

这个公式给出了对象存储在请求量多少时可以吃满带宽,这是有实际意义的,结论可以用在实际的工程实践中。

公式中参数含义分别如下:

  1. baseLatency:图2的1kb实验,获取数据传输的基础时延中位数,约30ms
  2. dataLatency:图2的16mb实验的每mb传输时延,获取数据传输的基础时延中位数,约20ms/MB

以S3 100Gbit/s为例计算,假设单对象带宽为50MB/s,需要250个并发请求才可以吃满带宽。

CLOUD STORAGE INTEGRATION

基于云存储分析引擎的设计想要最大化性能必须仔细平衡分析查询引擎与网络组件的资源消耗。

线程模型概要设计

在这里插入图片描述

  1. Table metadata retrieval:在步骤 1 和 2 中,首先请求表元数据,即数据块列表。然后获取所有相关的块元数据,作为开始表扫描数据检索基础数据
  2. Worker thread scheduling:步骤 3 显示,每个线程都会询问调度程序要处理的任务,如果检索到足够的数据,工作线程就会继续处理数据,如 4A 所示;否则会将线程用于prepare block
  3. Download preparation:为了使网络带宽达到饱和,必须有足够的检索线程和大量未处理请求来持续下载。在步骤 4B 中,准备工作程序会创建新请求,让检索线程不间断地执行事件循环。对象管理器保存表、块及其列块数据的元数据。如果数据不在内存中,会创建一个新请求,并安排它进行检索,如 5B 所示检索线程获取数据

Object Scheduler

调度器的重点为在平衡数据检索和数据处理的资源使用。

  1. Balance of retrieval and processing performance:对象调度程序的主要目标是在处理和检索性能之间取得平衡。它将不同的任务分配给可用的工作线程,以实现这种平衡。如果检索性能低于扫描性能,它就会增加检索和准备线程的数量。另一方面,减少检索线程数量会提高处理吞吐量。需要注意的是,检索性能受网络带宽的限制,对象调度程序会考虑网络带宽。
  2. Processing and retrieval estimations:决策过程需要检索和处理过程中的性能统计。每个处理线程都会跟踪执行时间和处理的数据量。通过汇总数据,我们可以计算出每个线程的平均处理吞吐量。对于网络吞吐量,我们汇总了当前时间周期内的总体检索字节数。
  3. Balancing retrieval threads and requests:第 2.8 节和第 3.4 节分析了实现吞吐量目标需要多少并发请求以及相应的 AnyBlob 检索器数量。调度器会跟踪用于检索的线程数量,并根据实例带宽规定加以限制。通过计算未处理请求(如列块)的数量,我们可以计算出未处理网络带宽的上限。未处理请求是指当前正在下载或等待检索的已准备好的 HTTP 请求,由于线程数和未处理请求限制了网络带宽,我们的对象调度程序总是要求未处理带宽至少与当前检索线程数可能达到的最大带宽一样高。因此,它会调度足够多的准备工作来匹配检索线程的数量。
  4. Performance adaptivity:调度程序会计算处理和检索之间的全局比率,以平衡检索和处理性能。该比率用于调整检索线程的数量和带宽。如果处理速度较慢,则准备的数据块较少,调度的检索线程也较少。一些正在运行的检索线程会因为未处理请求减少而停止。这些线程会被安排为处理线程,从而提高全局处理性能。
  5. Overpreparation:由于不希望检索线程因未准备列而停滞,因此鼓励Overpreparation,调度程序可确保最多 2 倍的所需带宽尚未使用,并据此调度准备工作。

性能

请添加图片描述
作者将查询分为:

  1. IO密集型:1,6,19,本地计算和远程计算的性能差距还是比较大,
  2. 计算密集型:9,18 时延基本接近

结束语

这篇文章于我而言最大的启发有四点:

  1. 基于对象存储执行分析需求的数据支持
  2. 基于对象存储执行分析需求的实践经验
  3. 使用对象调度器平衡数据检索和数据处理的资源使用,这种思路可以用在很多地方
  4. 基于对象存储性能存在下降(复杂的cache策略可以部分缓解,这里的研究很多[7,8,9,10]),所以这里其实是成本和性能之间的权衡

因为文章基本基于S3的计费模式,带宽讨论,导致这些经验并不是拿来即用的,国内主流公有云对象存储计费与国外不太一样;其次除了阿里云其他家云带宽还没到100Gbit/s,我司的15Gbit/s甚至比华为云还低,这点其实在内部也广为诟病,基本上只能靠拆桶或者联系售后加钱解决问题。

参考:

  1. Exploiting Cloud Object Storage for High-Performance Analytics vldb2023
  2. 论文分享:利用对象存储进行高性能数据分析
  3. 腾讯云对象存储计费概述
  4. 腾讯云对象存储按量计费
  5. 腾讯云对象存储资源包
  6. 腾讯云对象存储按量计费价格
  7. Crystal: A Unied Cache Storage System for Analytical Databases vldb2021
  8. Netco: Cache and I/O Management for Analytics over Disaggregated Stores Socc 2018
  9. FlexPushdownDB: Hybrid Pushdown and Caching in a Cloud DBMS vldb2021
  10. The Demikernel Datapath OS Architecture for Microsecond-scale Datacenter Systems SOSP2021

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

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

相关文章

Visual Studio使用Git忽略不想上传到远程仓库的文件

前言 作为一个.NET开发者而言,有着宇宙最强IDE:Visual Studio加持,让我们的开发效率得到了更好的提升。我们不需要担心环境变量的配置和其他代码管理工具,因为Visual Studio有着众多的拓展工具。废话不多说,直接进入正…

机器学习 | 基于网格搜索的SVM超参数调节

机器学习模型被定义为一个数学模型,其中包含许多需要从数据中学习的参数。然而,有一些参数,称为超参数,这些参数不能直接学习。它们通常是由人类在实际训练开始前根据直觉或经验和试验选择的。这些参数通过提高模型的性能&#xf…

Deepin系统安装x11vnc远程桌面工具实现无公网ip访问本地桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

2018年苏州大学837复试机试C/C++

2018年苏州大学复试机试 要求 要求用C/C编程;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名(中文);考试完毕后,将所编写的文件放在上述文件中。 第一题(20分&…

CTFshow web(php特性 105-108)

web105 <?php /* # -*- coding: utf-8 -*- # Author: Firebasky # Date: 2020-09-16 11:25:09 # Last Modified by: h1xa # Last Modified time: 2020-09-28 22:34:07 */ highlight_file(__FILE__); include(flag.php); error_reporting(0); $error你还想要flag嘛&…

在windows和Linux中的安装 boost 以及 安装 muduo 和 mysql

一、CMake安装 Ubuntu Linux 下安装和卸载cmake 3.28.2版本-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135960115?spm1001.2014.3001.5501二、安装boost boost官网&#xff1a;boost官网 我下载的boost版本&#xff1a; windows:boost_1_84_0.zipli…

ROS机器视觉应用中的关键点

1.ROS图像接口 ​​​​​​ 2.摄像头内参标定 3.ROS&#xff0b;OpenCV物体识别 ​​​ 4.小结

C++学习Day04之对象字节数初探

目录 一、程序及输出1.1 空类字节数1.2 非空类字节数1.3 设置对齐方式的数值 二、分析与总结 一、程序及输出 1.1 空类字节数 #include<iostream> using namespace std;class Person { };void test01() {//空类的sizeof结果是1 原因 每个对象都应该在内存上有独一无二…

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D &#xff0c; 接下来做UI框架的逻辑系统&#xff0c;管理器和UI背包&#xff0c; 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs &#xff0c; 双击BasePanel.cs脚本修改代码&#xff1a; using UnityEngine; pu…

从头开始构建和训练 Transformer(上)

1、导 读 2017 年&#xff0c;Google 研究团队发表了一篇名为《Attention Is All You Need》的论文&#xff0c;提出了 Transformer 架构&#xff0c;是机器学习&#xff0c;特别是深度学习和自然语言处理领域的范式转变。 Transformer 具有并行处理功能&#xff0c;可以实现…

bitcoin core 请求拒绝响应【或者】卡死

日志 经过排查节点日志&#xff0c;发现抛出异常。 tail -f debug.log日志&#xff1a; 2024-02-05T05:56:26Z BlockUntilSyncedToCurrentChain: txindex is catching up on block notifications 2024-02-05T05:56:26Z BlockUntilSyncedToCurrentChain: txindex is catching…

Docker容器化扫描SonarScanner

文章目录 1.SonarQube创建项目1.1 手工创建1.2 创建web_test_learning1.3 选择本地1.4 点击创建1.5 点击继续1.6 项目总揽 2.SonarScanner2.1 获取镜像2.2 启动扫描2.3 页面结果 3.SonarLint3.1 下载SonarLint插件3.2 配置连接到SonarQube3.3 在SonarQube页面“用IDE打开”3.4 …

今日arXiv最热NLP大模型论文:微软提出SliceGPT,删除25%模型参数,性能几乎无损

引言&#xff1a;探索大型语言模型的高效压缩方法 随着大型语言模型&#xff08;LLMs&#xff09;在自然语言处理领域的广泛应用&#xff0c;它们对计算和内存资源的巨大需求成为了一个不容忽视的问题。为了缓解这些资源限制&#xff0c;研究者们提出了多种模型压缩方法&#…

《短链接--阿丹》--技术选型与架构分析

整个短链接专栏会持续更新。有兴趣的可以关注一下我的这个专栏。 《短链接--搭建解析》--立项+需求分析文档-CSDN博客 阿丹: 其实整套项目中的重点,根据上面的简单需求分析来看,整体的项目难题有两点。 1、快速的批量生成短链,并找到对应的存储。 并且要保持唯一性质。…

java基本知识详解

八大基本数据类型 java的数据类型可以说很简洁&#xff0c;只有整型&#xff0c;浮点型&#xff0c;字符型&#xff0c;和布尔型四大种&#xff0c;八小种基本类型。 整型 byte&#xff1a;-2^7 ~ 2^7-1&#xff0c;即-128 ~ 127。1字节。 short&#xff1a;-2^15 ~ 2^15-…

SpringIOC之support模块PropertySourcesPlaceholderConfigurer

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

app对接优量汇收益如何?

优量汇作为国内头部的广告联盟&#xff0c;开发者在对接时要注意哪些方面&#xff1f; AdSet官网 | 聚合SDK广告变现平台-上海神蓍信息科技有限公司 一、优量汇优势&#xff1a; &#xff08;1&#xff09;快速变现&#xff0c;节省对接时间 1、快速变现&#xff0c;节省接…

router路由跳转的两种模板

<router-link><router-link/> <router-view><router-view/> link &#xff1a;链接&#xff0c;联系 view&#xff1a;指看见展现在人们面前的、可以稳定地进行详细审视的事物 将语境拉回到router里&#xff0c;抽象概括一下 router-link就是一个…

Git命令窗口:创建一个.bashrc文件,别名实现git log (代替冗余的指令)查询提交修改日志功能

在我们的用户下创建一个.bashrc文件&#xff0c;然后添加如下代码。即可实现我们命令窗口由于每次想要看到好的效果而输入几条指令的问题。 这里我们就只需要使用 git-log 代替我们的git log。这样在命令窗口看到的效果就清晰明了。

MySQL进阶45讲【12】为什么你的MySQL偶尔会卡一下

1 前言 平时的工作中&#xff0c;不知道大家有没有遇到过这样的场景&#xff0c;一条SQL语句&#xff0c;正常执行的时候特别快&#xff0c;但是有时也不知道怎么回事&#xff0c;它就会变得特别慢&#xff0c;并且这样的场景很难复现&#xff0c;它不只随机&#xff0c;而且持…