last modified: 2024-07-20 12:26
在字节越来越多的业务(Ads AB Test,Zhuxiaobang)需要针对海量高时效要求的实时数据,进行高QPS的复杂Ad Hoc查询。
总结需要满足下面3点需求:
Krypton作为一款HSAP(Hybrid Serving and Analytical Processing)产品,设计来满足这些需求。
Analytical表示它支持复杂Ad Hoc查询,Serving表示它提供高QPS的在线查询能力。Krypton总体设计遵循以下原则:

整体上,Krypton使用了存储计算分离的架构,数据存放在Cloud Store上,利用Cloud Store可以实现无限扩展性。计算模块是无状态的,可以根据负载独立动态扩展。
另外Krypton采用了读和写分离的架构。IgSs(Ingestion Servers)负责处理实时写入,并将数据周期性flush到Cloud Store,它同时还Serve来自DSs(Data Servers)读最新数据的请求。CSs(Compaction Servers)周期性的合并Cloud Store中存储的数据文件。
来自Client的读请求先发送到Coordinator节点,Coordinator进行SQL解析、生成执行计划,发送请求到DSs(Data Servers)节点查询数据。DSs符合MPP的架构设计,每个节点只负责特定子集数据查询,并且其数据并不存储在本地,可以很容易进行水平扩展。IgSs和DSs可以根据读写负载的不同,单独进行扩容。
作为对比,Krypton解决了ClickHouse的两个问题。
Krypton是存算分离架构,查询节点DSs无状态,可以方便进行扩展,而ClickHouse则因为查询节点与本地数据绑定而无法实现动态扩展。
Krypton提供了单独的IgS节点用于数据写入,解决了实时数据写入灵活性的问题,它类似于Druid提供的MiddleManager节点。而作为对比,ClickHouse虽然也有Kafka table engine,但实际使用中,在成熟度和灵活性上要差的多。
最能满足以上需求的产品是ClickHouse,与Krypton对比如下:
因为计算节点与存储绑定,ClickHouse的动态扩展能力不足。但通过预先估算好数据量,设置合理shard,亦能支持数百PB的数据分析。
ClickHouse查询延迟较低,得益于列式存储和索引的支持。但是ClickHouse是MPP架构,查询能力受节点个数限制,提供不了高QPS支持。
ClickHouse提供ReplacingMergeTree保证数据一致性,但本身并不提供事务写入保障。
数据在完成协调节点到存储节点的数据同步后即可查询,这个过程很快完成。可以实现亚秒级的查询。
ClickHouse提供类LSM-Tree的数据架构,数据批量顺序写入,可以实现非常高的写入吞吐。
ClickHouse不是标准SQL,但使用上与标准SQL差别不大。
综上Krypton对比Clickhouse的优点是通过存算分离解决了高QPS查询的问题,并且有专门的节点负责数据Ingestion,灵活性更好。
以Database system通用的技术框架,来分析Krypton实现细节
数据文件结构
该算法对比Parquet的优点是, 1)对Nested和Repeated数据,有更好的寻址速度,2)对稀疏列有更好的存储效率,3)存储更多Index,在TPC-H数据集上,通过13%的额外存储带来21%的读效率提升
编码和索引
差异化的是ribbon算法,它对范围查询和精确查找进行了优化。其它都是较为普遍使用的设计。
分区
副本
Cloud Store(类比HBase使用HDFS存储Hfile)
事务 & 一致性
缓存(+++)
Krypton整体在解决方案上没有应用什么创新技术,与Clickhouse比较最大的优势是实现了存储和计算的分离,从而使读负载可以水平扩展以支持高QPS查询的场景。但这也带来Cloud Store与DSs节点间数据传输带来的天然延迟和带宽问题。Krypton通过DSs上大量、多级缓存来解决这个问题,它非常适合于对较少数据量(热点、局部性)进行高QPS查询的场景。