Hologres揭秘:如何支持超高QPS在线服务(点查)场景

简介: 本期我们将揭秘Hologres如何支持超高QPS在线服务(点查)场景。

Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容PostgreSQL协议并与大数据生态无缝打通,能用同一套数据架构同时支持实时写入实时查询以及实时离线联邦分析。它的出现简化了业务的架构,为业务提供实时决策的能力,让大数据发挥出更大的商业价值。从阿里集团诞生到云上商业化,随着业务的发展和技术的演进,Hologres也在持续不断优化核心技术竞争力,为了让大家更加了解Hologres,我们计划持续推出Hologres底层技术原理揭秘系列,从高性能存储引擎到高效率查询引擎,高吞吐写入到高QPS查询等,全方位解读Hologres,请大家持续关注!

往期精彩内容:

  • 2020年VLDB的论文《Alibaba Hologres: A cloud-Native Service for Hybrid Serving/Analytical Processing
  • Hologres揭秘:首次公开!阿里巴巴云原生实时数仓核心技术揭秘
  • Hologres揭秘:首次揭秘云原生Hologres存储引擎
  • Hologres揭秘:Hologres高效率分布式查询引擎
  • Hologres揭秘:高性能原生加速MaxCompute核心原理
  • Hologres揭秘:优化COPY,批量导入性能提升5倍+

本期我们将揭秘Hologres如何支持超高QPS点查。

传统的 OLAP 系统在业务中往往扮演着比较静态的角色,以通过分析海量的数据得到业务的洞察(比如说预计算好的视图、模型等),从这些海量数据分析到的结果再通过另外一个系统提供在线数据服务(比如HBase、Redis、MySQL等)。这里的服务(Serving)和分析(Analytical)是个割裂的过程。与此不同的是,实际的业务决策过程往往是一个持续优化的在线过程。服务的过程会产生大量的新数据,我们需要对这些新数据进行复杂的分析。分析产生的洞察实时反馈到服务,让业务的决策更实时,从而创造更大的商业价值。

Hologres定位是一站式实时数仓,融合分析能力(Analytical)与在线服务(Serving)为一体,减少数据的割裂和移动。本文的内容将会针对Hologres的服务能力(核心为点查能力),介绍Hologres到底具备哪些服务能力,以及背后的实现原理。

通常我们所说的点查场景是指Key/Value查询的场景,广泛用于在线服务。由于点查场景的广泛需求,市场上存在多种KV数据库定位于支持高吞吐、低延时的点查场景,例如被大家广而熟知的HBase,它通过自定义的一套API来提供点查的能力,在许多业务场景都能够获得较好的效果。但是HBase在实际使用中也会存在一定的缺点,这也使得很多业务从HBase迁移至Hologres,主要有以下几点:

  • 当数据规模大到一定程度的时候,HBase在性能方面将会有所下降,无法满足大规模的点查计算,同时在稳定性上也变得不如人意,需要有经验的运维支持
  • HBase提供的是自定义API,上手有一定的成本。Hologres直接通过SQL提供高吞吐、低延时的点查服务。相比于其它KV系统提供自定义API,SQL接口无疑更加的简单易用。
  • HBase采用Schema Free设计,没有数据类型,对于检查数据质量,修正数据质量也带来了复杂度,查错难,修正难。Hologres具备与Postgres兼容的几乎所有主流数据类型,可以通过Insert/Select/Update/Delete标准SQL语句对数据进行查看、更新。
  • 在Hologres中的点查场景是指行存表基于主键(PK)的查询。
--建行存表
BEGIN;
CREATE TABLE public.holotest ("a" text NOT NULL,"b" text NOT NULL,"c" text NOT NULL,"d" text NOT NULL,"e" text NOT NULL,
PRIMARY KEY (a,b)
);
CALL SET_TABLE_PROPERTY('public.holotest', 'orientation', 'row');
CALL SET_TABLE_PROPERTY('public.holotest', 'time_to_live_in_seconds', '3153600000');
COMMIT;-- Hologres通过SQL进行点查
select * from table where pk = ?; -- 一次查询单个点
select * from table where pk in (?, ?, ?, ?, ?); -- 一次查询多个点

点查场景技术实现难点

正常情况下,一条SQL语句的执行,需要经过SQL Parser进行解析成AST(抽象语法树),再由Query Optimizer处理生成Plan(可执行计划),最终通过执行Plan拿到计算结果。而要想通过SQL做到高吞吐、低延时、稳定的点查服务,则必须要克服如下困难:

  1. 在不破坏PostgreSQL生态的情况下,SQL接口如何做到高QPS?
  • 如何做低甚至避免SQL解析与优化器的开销
  1. 一套高效的Client SDK如何与后端存储进行交互?
  • 如何在低消耗的情况下,做到高并发的交互
  • 如何减少消息传递过程中的开销
  • 如何感知后端的压力、配合做到最好的吞吐与延迟
  1. 后端存储如何在高性能的情况下更加稳定?
  2. 如何最大化利用cpu资源
  3. 如何减少各种内存的分配与拷贝、避免热点key等问题对系统带来的不稳定性
  4. 如何减少冷数据IO的影响

在克服上述3大类困难后,整体的工作方式就可以非常的简洁:在接入层(FrontEnd)上直接通过Client SDK与后端存储通信。

点查1.png

下面将会介绍Hologres是如何克服以上3大困难,从而实现高吞吐低延时的点查。

降低、避免SQL解析与优化器的开销

Query Optimizer进行Short Cut

由于点查的Query足够简单,Hologres的Query Optimizer进行了相应的short cut,点查Query并不会进入Opimizer的完整流程。Query进入FrontEnd后它会交由Fixed Planner进行处理,并由其生成对于的Fixed Plan(点查的物理Plan),Fixed Planner非常轻,无需经过任何的等价变换、逻辑优化、物理优化等步骤,仅仅是基于AST树进行了一些简单的分析并构建出对应的Fixed Plan,从而尽量规避掉优化器的开销。

Prepared Statement

尽管Query Optimizer对点查Query进行了short cut,但是Query进入到FrontEnd后的解析开销依然存在、Query Optimizer的开销也没有完全避免。

Hologres兼容Postgres,Postgres的前、后端通信协议有extended协议与simple协议两种:

  • simple协议:是一次性交互的协议,Client每次会直接发送待执行的SQL给Server,Server收到SQL后直接进行解析、执行,并将结果返回给Client。simple协议里Server无可避免的至少需要对收到的SQL进行解析才能理解其语义。
  • extended协议:Client与Server的交互分多阶段完成,整体大致可以分成两大阶段。
  • 第一阶段:Client在Server端定义了一个带名字的Statement,并且生成了该Statement所对应的generic plan(不与特定的参数绑定的通用plan)。

点查2.png

  • 第二阶段:用户通过发送具体的参数来执行第一阶段中定义的Statement。第二阶段可以重复执行多次,每次通过带上第一阶段中所定义的Statement名字,以及执行所需要的参数,使用第一阶段生成的generic plan进行执行。由于第二阶段可以通过Statement名字和附带的参数来反复执行第一个阶段所准备好的generic plan,因此第二个段在Frontend的开销几乎等同于0。

为此Hologres基于Postgres的extended协议,支持了Prepared Statement,做到了点查Query在Frontend上的开销接近于0。

高性能的内部通信

BHClient是Hologres实现的一套用于与后端存储直接通信的高效Private Client SDK,主要有以下几个优势:

1)Reactor模型、全程无锁的异步操作

BHClient工作方式类似reactor模型,每个目标shard对应一个eventloop,以“死循环”的方式处理该shard上的请求。由于HOS对调度执行单元的抽象,即使是shard很多的情况下,这种工作方式的基础消耗也足够低。

2)高效的数据交换协议binary row

通过自定义一套内部的数据通信协议binary row来减少整个交互链路上的内存的分配与拷贝。

3)反压与凑批

BHClient可以感知后端的压力,进行自适应的反压与凑批,在不影响原有Latency的情况下提升系统吞吐。

稳定可靠的后端存储

1)LSM(Log Structured Merge Tree)

Hologres的行存表采取LSM进行存储,相比于传统的B+树,LSM能够提供更高的写吞吐,因为它不会出现任何的随机写,Append Only的操作保证了其只会顺序的写盘。

  • 一个行存tablet上会存在一个memtable,和多个immutable memtable。
  • 数据更新都会写入到memtable中,当memtable写满后会转变为immtable memtable,immutable memtable会Flush成Key有序的SST(Sorted String Table)文件,SST文件一旦生成则不能修改,因此不会发生随机写的操作。
  • SST文件在文件系统里面按层组织,除了level 0上的SST文件间无序,且存在overlap外,其它level上的SST文件间有序,且无overlap。因此查询的时候,对于level 0上的文件需要逐个遍历,而其它level的文件可以二分查找。底层的SST文件通过Compaction成新的SST文件去到更高层,因此低层的数据要比高层的新,所以一旦在某层上找到了满足条件的key则无需往更高层去查询。

2)基于C++纯异步的开发

采用LSM对数据进行组织存储的系统并不仅仅只有Hologres,LSM在谷歌的"BigTable"论文中被提出后,很多的系统都对其进行了借鉴采用,例如HBase。Hologres采用C++进行开发,相较于Java,native语言使得我们能够追求到更极致的性能。同时基于HOS(Hologres Operation System)提供的异步接口进行纯异步开发,HOS通过抽象ExecutionContext来自我管理CPU的调度执行,能够最大化的利用硬件资源、达到吞吐最大化。

3)IO优化与丰富的Cache机制

Hologres实现了非常丰富的Cache机制row cache、block cache、iterator cache、meta cache等,来加速热数据的查找、减少IO访问、避免新内存分配。当无可避免的需要发生IO时,Hologres会对并发IO进行合并、通过wait/notice机制确保只访问一次IO,减少IO处理量。通过生成文件级别的词典及压缩,减少文件物理存储成本及IO访问。

总结

Hologres致力于一站式实时数仓,除了具备处理复杂OLAP分析场景的能力之外,还支持超高QPS在线点查服务,通过使用标准的Postgres SDK接口,就能通过SQL获得低延时、高吞吐的在线服务能力,简化学习成本,提升开发效率。

作者:周思华(花名:思召),阿里巴巴技术专家,现从事交互式分析引擎Hologres研发工作。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请写一个java程序实现线程连接池功能_写一个java程序实现线程连接池的功能

线程池:import java.util.linkedlist;public abstract class manager {private string mthreadpoolname null;private int mthreadpoolmaxsize 1;private linkedlist workers new linkedlist();public manager() {}public manager(string name, int poolmaxsize) {mthreadpo…

shell 提取sql 的字段名表名_Mysql 常用SQL语句集锦(仅学习)

基础篇//查询时间,友好提示 $sql "select date_format(create_time, %Y-%m-%d) as day from table_name";//int 时间戳类型 $sql "select from_unixtime(create_time, %Y-%m-%d) as day from table_name";//一个sql返回多个总数 $sql "…

告别“大小周”、回到二三线,程序员“内卷”时代终结?

作者 | 郑丽媛出品 | CSDN(ID:CSDNnews)相信许多人都有这样一种感觉:工作之后,对于时间的概念似乎减弱了,只会在恍惚间瞄到日历,才惊觉:一年竟又已临近尾声。这一年,我们…

MySQL 8.0 Server层最新架构详解

简介: 本文基于MySQL 8.0.25源码进行分析和总结。这里MySQL Server层指的是MySQL的优化器、执行器部分。我们对MySQL的理解还建立在5.6和5.7版本的理解之上,更多的是对比PostgreSQL或者传统数据库。然而从MySQL 8.0开始,持续每三个月的迭代和…

产品解读 | 敏捷版数据库场景 一站式快速构建企业全场景数据库管理平台

简介: Gartner 的报告显示预计到2022年将有75%数据库将采用云数据库,与此同时,IDC预计到2024年传统部署数据库市场将达到13亿美元,企业数字化转型升级,积极拥抱开源、云原生数据库成为重要趋势,也是必然选择…

核弹级漏洞,把 log4j 扒给你看!

作者 | 轩辕之风O来源 | 编程技术宇宙相信大家这两天应该被这么一条新闻刷屏了:这个漏洞到底是怎么回事?核弹级,真的有那么厉害吗?怎么利用这个漏洞呢?我看了很多技术分析文章,都太过专业,很多非…

外部工具连接SaaS模式云数据仓库MaxCompute实战——商业BI分析工具篇

简介: MaxCompute 是面向分析的企业级 SaaS 模式云数据仓库,以 Serverless 架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,帮助企业和大数据开发者经济…

挑战程序设计竞赛_我系首次参加第六届中国大学生程序设计竞赛网络预选赛

点击上方蓝字关注 「龙外信息工程系」讲述有温度的故事 传递有态度的思想2020年9月20日12时至17时,第六届中国大学生程序设计竞赛网络赛预选赛在杭州电子科技大学OJ成功举办,黑龙江外国语学院(信息工程系)参赛队与来自清华大学、上海交通大学、复旦大…

如何用阿里云实行全链路数据追踪

简介: 阿里云采用了日志服务,帮助畅捷通构建了用户体验感知、业务安全合规、用户业务链路追踪、成本预算的使用场景,实现了对用户、业务、成本、安全等方面的全维度感知,使得运维效率提升了30%。 在日常生活中,遇到电…

谷歌能否赶上「元宇宙」这趟快车?

整理 | 禾木木出品 | CSDN云计算(ID:CSDNcloud)大多数人认为 Google Glass 只是领先于时代。虽然 Glass 不再出售给日常消费者(它仍然存在于企业版本中),但它在很多方面都是公众对混合现实体验的首次介绍。…

Flink on Zeppelin 流计算处理最佳实践

简介: 欢迎钉钉扫描文章底部二维码进入 EMR Studio 用户交流群 直接和讲师交流讨论~ 点击以下链接直接观看直播回放:https://developer.aliyun.com/live/247106 开源大数据社区 & 阿里云 EMR 系列直播 第十二期 主题:Flink on Zeppelin…

储留香:一个智能运维系统就是一个中枢神经系统,我说的!

简介: 运维系统可以像神经系统一样,首先,做到数据的统一汇总;其次,可以对数据进行识别筛选输出有效信息;再次,可以预先感知到异常风险,并进行有效规避。而日志服务SLS凭借出色的数据…

云上资源编排的思与悟

简介: 在传统软件架构下,撇开业务层代码,都需要部署计算节点、存储资源、网络资源,然后安装、配置操作系统等。而云服务本质上是实现 IT 架构软件化和 IT 平台智能化,通过软件的形式定义这些硬件资源,充分抽…

阿里云力夺FewCLUE榜首!知识融入预训练+小样本学习的实战解析

简介: 7月8日,中文语言理解权威评测基准CLUE公开了中文小样本学习评测榜单最新结果,阿里云计算平台PAI团队携手达摩院智能对话与服务技术团队,在大模型和无参数限制模型双赛道总成绩第一名,决赛答辩总成绩第一名。 作…

【产品干货】经典营销模型的产品化介绍

简介: 为什么说Quick Audience是集数据资产构建、用户分析、精准营销投放、跨端社交互动和全域会员管理为一体的全域消费者运营平台,其中一个很大的原因是置入了经典营销模型,如RFM模型与AIPL模型,由方法论支撑消费者运营&#xf…

填平数据、产品、模式需求鸿沟,浪潮云发布新一代行业云 MEP战略

围绕安全这一核心,浪潮云从新模式(New Model)、新要素(New Essential Factor)、新产品(New Product)三大方面出发,提出新一代行业云MEP战略。 出品 | CSDN云计算 12月16日&#xff0…

hpsocket java代码_HPSocket介绍与使用

一、HPSocket介绍HP-Socket是一套通用的高性能TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的TCP/UDP/HTTP通信系统,提供C/C、C#、Delphi、E(易语言)、Java、Python等编程语言接口。HP-Socket对…

Dapr 在阿里云原生的实践

简介: Faas 场景下,比较吸引用户的是成本和研发效率,成本主要通过按需分配和极致的弹性效率来达成。而应用开发者期望通过 FaaS 提供多语言的编程环境,提升研发效率,包括启动时间、发布时间、开发的效率。​ 作者&…

postgre 生成数据库html文档_还在手动整理数据库文档?试试这个(螺丝钉)数据库文档生成工具...

简介在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如…

OpenFaaS - 以自己的方式运行容器化函数

作者 | Addo Zhang来源 | 云原生指北译者注: 本文篇幅较长,有助于了解 FaaS 和 OpenFaaS。作者分别从开发人员和运维人员的视角来了解 OpenFaaS,对了解新的技术是个很好的方式。本文翻译自 Ivan Velichko[1] 的 OpenFaaS - Run Containerized…