简介:本期我们将揭秘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与后端存储通信。

下面将会介绍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)。

  • 第二阶段:用户通过发送具体的参数来执行第一阶段中定义的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研发工作。

后续我们将会陆续推出有关Hologres的技术底层原理揭秘系列,具体规划如下,敬请持续关注!

  • Hologres揭秘:首次公开!阿里巴巴云原生实时数仓核心技术揭秘
  • Hologres揭秘:首次揭秘云原生Hologres存储引擎
  • Hologres揭秘:深度解析高效率分布式查询引擎
  • Hologres揭秘:高性能原生加速MaxCompute核心原理
  • Hologres揭秘:优化COPY,批量导入性能提升5倍+
  • Hologres揭秘:如何支持超高QPS在线服务(点查)场景
  • Hologres揭秘:如何支持高吞吐Upsert
  • Hologres揭秘:如何支持高并发查询
  • Hologres揭秘:如何支持高可用架构
  • Hologres揭秘:如何支持资源隔离,支持多种负载
  • Hologres揭秘:向量检索引擎Proxima原理与使用实践
  • Hologres揭秘:读懂执行计划,查询性能翻十倍
  • Hologres揭秘:分布式系统如何设计Shard与Table Group
  • Hologres揭秘:如何支持更多Postgres生态扩展包
  • Hologres揭秘:高吞吐写入Hologres的N种姿势
  • ......

感谢您的阅读,也欢迎使用体验Hologres,可以参考使用手册。

原文链接:https://developer.aliyun.com/article/785647?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

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

  1. Hologres如何支持超高基数UV计算(基于roaringbitmap实现)

    简介: 本文将会介绍Hologres基于roaringbitmap实现超高基数的UV计算 RoaringBitmap是一种压缩位图索引,RoaringBitmap自身的数据压缩和去重特性十分适合对于大 ...

  2. Hologres揭秘:优化COPY,批量导入性能提升5倍+

    简介:揭秘Hologres优化COPY的技术原理,实现批量导入性能提升5倍+ Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼容 ...

  3. Hologres揭秘:高性能原生加速MaxCompute核心原理

    简介:Hologres技术揭秘系列持续更新中,本期我们将带来Hologres高性能原生加速查询MaxCompute的技术原理解析. Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这 ...

  4. Hologres揭秘:深度解析高效率分布式查询引擎

    简介:从阿里集团诞生到云上商业化,随着业务的发展和技术的演进,Hologres也在持续不断优化核心技术竞争力,为了让大家更加了解Hologres,我们计划持续推出Hologers底层技术原理揭秘系列, ...

  5. 【kafka】支持超高并发的kafka网络设计

    1.概述 [源码请入群]41. 响应消息是如何发送给客户端的 视频地址:https://www.bilibili.com/video/BV1M64y1D7NN?p=41 [源码请入群]42. 支持超高 ...

  6. 功能区不显示工具条_【新老客户必知】软件支持超高清屏显示器了

    随着计算机硬件的不断更新换代 显示设备的不断更新 从原来的分辨率640 X 480 啥原来分辨这么低呀? 还记得DOS吗? 或者Win95,win98吗 当时显示器分辨率能调到800X 600很好了 ...

  7. datagrid如何获取一行数据中的某个字段值_redis 所支持的数据类型以及其应用场景...

    1.支持的数据类型 redis 支持 String.hash.list.set.Sort set这几种数据类型,可用于缓存.事件发布订阅.高速队列等场景. String是最常用的数据类型,它能够存储任 ...

  8. 腾讯微信支付支持全量商家小程序场景开通云闪付功能

    为持续推进支付生态开放及合作,腾讯宣布与银联云闪付互联互通再次取得重大进展: 微信支付于12月15日开始逐步升级商家小程序支持云闪付付款功能,微信商家小程序已全面开通云闪付.该功能升级后,用户即可在已 ...

  9. kylin如何支持flink_Flink 在快手实时多维分析场景的应用

    作者:董亭亭.徐明 摘要:作为短视频分享跟直播的平台,快手有诸多业务场景应用了 Flink,包括短视频.直播的质量监控.用户增长分析.实时数据处理.直播 CDN 调度等.此次主要介绍在快手使用 Fli ...

最新文章

  1. skrollr 中文教程
  2. 优云,新一代运维PaaS平台
  3. PHP7 学习笔记(七)如何使用zephir编译一个扩展记录
  4. java面向对象知识汇总的思维导图
  5. html css js 实战案例_使用html+css+js实现弹球游戏
  6. python杂记-读取png图像文件头数据
  7. mysql --prompt
  8. LeetCode 1690. 石子游戏 VII(博弈DP)
  9. 【LeetCode笔记】62. 不同路径(Java、动态规划)
  10. 数据计算 统计学案例_PSG三维数据采集软件在土方量计算中的应用案例
  11. 【redis源码学习】rax,我愿称之为“升级版字典树”
  12. 机动车合格证手机扫码开票实现方式
  13. Wifi攻击工具 3:图形化工具 fern-wifi-cracker
  14. 新南威语言班C加,【干货来了】新南威尔士大学UEEC语言班 你了解多少?
  15. OM6621系列国产M4F内核低功耗BLE5.1大内存SoC蓝牙芯片
  16. win7、win10关闭驱动签名,进入驱动测试模式,以及常见初级问题的解决
  17. 用易语言制作一款图文展示软件,点击按钮切换图片和文字说明,易语言按钮、图片框、编辑框的应用
  18. 五分钟教会你如何使用GitHub
  19. windows如何修改复制粘贴与剪切快捷键?
  20. MFC视图窗口(CView子类)初始化消息的调用顺序

热门文章

  1. python中列表的sort方法_python中列表的sort方法使用详解
  2. 从零开始学习docker(九)持久化存储和数据共享之 bind Mounting
  3. docker 镜像加速
  4. 七、朴素贝叶斯中文文本分类
  5. GUI实战|Python做一个文档图片提取软件
  6. append 换行_代码风格:答应我,让括号换行吧!!
  7. 机器学习实战-逻辑回归-19
  8. es类比关系型数据库
  9. 虚拟化技术知识点初步梳理
  10. Mybatis 逆向工程 自动生成代码