腾讯云 CHDFS 助力微信秒级异常检测
微信全景监控平台介绍
编辑搜图
什么是 Druid
Druid 是一个分布式的、支持实时多维 OLAP 分析的数据处理系统。它既支持高速的数据实时摄入处理,也支持实时且灵活的多维数据分析查询。因此 Druid 最常用的场景就是大数据背景下、灵活快速的多维 OLAP 分析。
Druid 节点可以分为以下几类:
-
Master节点:Overlord、Coordinator
-
实时数据处理节点:MiddleManager、Peon
-
存储节点:Historical(数据分片)、HDFS(DeepStorage)(数据分片)、MetaDataStorage(数据表结构等)、Zookeeper(IndexingTask信息)
-
数据访问节点:Broker、Router
编辑搜图
Druid 与 CHDFS 完美结合
CHDFS(Cloud HDFS)是提供标准 HDFS 访问协议和分层命名空间的高性能分布式文件系统,由腾讯云存储团队自研的云原生数据存储产品。通过 CHDFS,可以实现计算与存储分离,极大发挥计算资源灵活性,同时实现存储数据永久保存,降低大数据分析资源成本。
在和 Druid 系统结合过程中,CHDFS 起到了两个重要的作用:
1. 实时节点 (Peon) 和历史节点 (Historical) 数据交流的重要中转。
2. 全量数据分片,Historical 负载均衡和容灾的基石。
-
整体数据流转架构:
编辑搜图
-
Overlord 节点将任务分配给若干个 MiddleManager 节点。
-
MiddleManager 节点创建 Peon 节点,Peon 节点拥有独立的端口和 JVM,作为基本 Worker 进行数据消费和处理。
-
Peon 节点处理数据,打包分片,达到任务周期时间后,将分片发布到 DeepStorage 中。
-
Coordinator 协调 Historical 节点从 CHDFS 中下载 Segment。
-
Historical 下载完成,一次实时分片任务完成,Historical 接管这个分片的数据查询,Peon 销毁。
-
Segment 容灾
-
Segment 负载均衡
为了确保 Segment 在 Historical 节点中均匀分布,Coordinator 会自动检查所有的 Historical 的分片分布情况,并且调度利用率最低的 Historical 从 CHDFS 中加载分片,并且让利用率最高的 Historical 丢弃分片,从而完成负载均衡。
轻松配置 CHDFS 为 Druid DeepStorage
// segment存储
druid.storage.type=hdfs
druid.storage.storageDirectory=ofs://xxx.chdfs.ap-shanghai.myqcloud.com/usr/xxx/druid/segments
// indexer日志
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=ofs://xxx.chdfs.ap-shanghai.myqcloud.com/usr/xxx/druid/indexing-logs
conf/druid/_common/ 下添加 core-site.xml 和 hdfs-site.xml
// core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--chdfs 的实现类-->
<property>
<name>fs.AbstractFileSystem.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter</value>
</property>
<property>
<name>fs.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter</value>
</property>
<property>
<name>fs.ofs.tmp.cache.dir</name>
<value>/home/xxx/data/chdfs_tmp_cache</value>
</property>
<!--appId-->
<property>
<name>fs.ofs.user.appid</name>
<value>00000000</value>
</property>
</configuration>
// hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.AbstractFileSystem.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter</value>
</property>
<property>
<name>fs.ofs.impl</name>
<value>com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter</value>
</property>
<!--本地 cache 的临时目录, 对于读写数据, 当内存 cache 不足时会写入本地硬盘, 这个路径若不存在会自动创建-->
<property>
<name>fs.ofs.tmp.cache.dir</name>
<value>/home/qspace/data/chdfs_tmp_cache</value>
</property>
<!--appId 用户需要换成自己的 appid,可前往 https://console.cloud.tencent.com/cam/capi 获取-->
<property>
<name>fs.ofs.user.appid</name>
<value>00000</value>
</property>
</configuration>
整体效果
当前,微信监控通过 CHDFS 存储了百 TB 级别,共计百万级别的文件,稳定运行没有故障。
编辑搜图
相比于原 HDFS 依赖运维手动部署、维护,CHDFS 开箱即用,无运维、裁撤等问题,真正解决了业务的一大痛点。
CHDFS 产品非常稳定,微信监控共使用 百 TB 的存储空间、百万级别的文件,上线至今稳定运行无故障。后续,微信指标监控会逐步将所有的存储 DeepStorage 迁移至 CHDFS,总量达 PB 级别。
我有话说: