微信全景监控平台介绍
微信全景监控平台,是微信的多维指标 OLAP 监控以及数据分析平台。反对自定义多维度指标上报,海量数据实时上卷下钻剖析,提供了秒级异样检测告警能力。
我的项目高效撑持了视频号、微信领取、搜一搜等等业务疾速迭代,已笼罩微信各产品线,峰值数据达到 30+ 亿条 /min,3 万亿 + 条 / 天。微信全景监控平台架构如下图所示:
全景监控平台的指标数据应用 Druid 引擎,Druid 引擎通将 CHDFS 作为其 DeepStorage 来进行数据存储和查问。
什么是 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 起到了两个重要的作用:
- 实时节点 (Peon) 和历史节点 (Historical) 数据交换的重要直达。
- 全量数据分片,Historical 负载平衡和容灾的基石。
整体数据流转架构:
- Overlord 节点将任务分配给若干个 MiddleManager 节点。
- MiddleManager 节点创立 Peon 节点,Peon 节点领有独立的端口和 JVM,作为根本 Worker 进行数据生产和解决。
- Peon 节点解决数据,打包分片,达到工作周期时间后,将分片公布到 DeepStorage 中。
- Coordinator 协调 Historical 节点从 CHDFS 中下载 Segment。
- Historical 下载实现,一次实时分片工作实现,Historical 接管这个分片的数据查问,Peon 销毁。
实时工作分片是从 Peon -> CHDFS(DeepStorage) -> Historical,其中 Overlord 作为实时工作的总 Master 节点负责调度实时工作并且下发工作 MiddleManager,MiddleManager 顾名思义:两头管理者,它接管 Overlord 的调度,并且作为「监工」生产 Worker(Peon) 并且同步工作状态。
Segment 容灾
如果一个 Historical 节点宕机或者处于不可用状态,Coordinator 将会感知到并且认为这个 Historical 中的数据分片都丢掉了。
然而 Coordinator 不会立即让其它的 Historical 从 CHDFS 中加载这些 Segments,会有一个过渡期的数据结构,存储这些丢掉的 Segments 信息,如果这个 Historical 又回来了,那么它还是会对外提供服务,不会有分片转移,如果 Historical 宕机超过肯定工夫,Coordinator 会调度其它的 Historical 从 DeepStorage 中加载分片。
Segment 负载平衡
为了确保 Segment 在 Historical 节点中均匀分布,Coordinator 会主动查看所有的 Historical 的分片散布状况,并且调度利用率最低的 Historical 从 CHDFS 中加载分片,并且让利用率最高的 Historical 抛弃分片,从而实现负载平衡。
轻松配置 CHDFS 为 Druid DeepStorage
1、创立 CHDFS,创立权限组、权限规定和挂载点;
2、下载[CHDFS jar GitHub – tencentyun/chdfs-hadoop-plugin: the hadoop plugin for chdfs];
3、将上述 jar 文件拷贝至 extensions/druid-hdfs-storage 和 hadoop-dependencies/hadoop-client/x.x.x;
4、在 Druid 的 conf/druid/_common/common.runtime.properties 下,增加 CHDFS 配置:
// 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
5、配置 hadoop 环境配置 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>
6、通过 Indexer 日志能够看到,数据曾经胜利写入 HDFS,并且能够被 Historical 节点下载。
整体成果
以后,微信监控通过 CHDFS 存储了百 TB 级别,共计百万级别的文件,稳固运行没有故障。
相比于原 HDFS 依赖运维手动部署、保护,CHDFS 开箱即用,无运维、裁撤 等问题,真正解决了业务的一大痛点。
CHDFS 产品十分稳固,微信监控共应用 百 TB 的 存储空间、百万级别 的文件,上线至今稳固运行无故障。后续,微信指标监控会逐渐将所有的存储 DeepStorage 迁徙至 CHDFS,总量达 PB 级别。
— END —