点击蓝字⬆ 关注我们

本文共计3569字 预计阅读时长11分钟

导语

腾讯云数据仓库TCHouse-D助力盖雅工场构建了架构简洁、查询高效的报表平台。目前该平台已经支撑了盖雅工场上千个租户的实时报表需求,报表查询时效性整体可达亚秒,相较原架构,查询耗时平均降低70%,整体开发效率提升50% ,资源成本降低20%,大幅实现了降本提效,深得各业务及数据部门的认可。

作者:盖雅工场技术中台

公司简介

  • 盖雅工场成立于2009年,是一家以「科技让劳动力更高效」为使命的中国科技企业,致力于为全球企业提供智能化劳动力管理云服务。通过覆盖企业人效管理全生命周期的咨询+SaaS软件+运营服务解决方案,助力企业实现人效提升与数字化转型。

  • 目前,盖雅工场的客户分布在全球32个国家与地区,每天为全球1,800余家客户的600余万员工提供盖雅的服务。

  • 盖雅工场专注于解决企业在劳动用工方面的四大问题:「需要多少人」、「实际多少人」、「干得怎么样」、「怎样找到人」,利用科技手段预测劳动力需求并排班,优化调度劳动力安排并补充灵活劳动力,管理多样化劳动力队伍的出勤与时间,分析并提升劳动力效率与销售效能,同时连接劳动力市场中的企业与一线员工,实现降本增效、满意且合规。

业务介绍及早期痛点


聚合报表服务是盖雅工场最核心的数据服务,为上千SaaS租户提供实时报表,覆盖劳动力人员分布、劳动力流动、离职、考勤、薪酬和审批流等关键业务环节。随着盖雅工场全球化业务的推进,聚合报表服务积累了海量数据,上游数据来自近百个MySQL实例,原始库表数量超5万张,然后需要根据不同场景进行实时分析,向B端用户提供人员分布、流动离职、考勤、薪酬和审批流等实时报表,业务报表数量达到数千张

1. 早期架构

早期使用自建的 TiDB 和 StarRocks 集群进行支持上述需求。

链路1:自建 Data Migration -> TiDB

链路2:自研 Flink CDC +Kafka -> StarRocks

2. 问题和挑战

随着盖雅工场全球化业务的推进,聚合报表服务积累的数据规模越来越大,查询并发也越来越高,为应对不断增长的查询分析诉求,盖雅自建了多套集群,运维成本和资源成本不断提升。但即便这样,在业务高峰期租户集中查询时,还是存在报表服务访问慢等问题,导致客户体验严重受损。

1) 为了应对实时计算任务,自建了多套 Flink + TiDB/StarRocks 集群,整体计算和分析链路长、维护难度大,且集群异常无原厂支持;

2) 性能不足:月底和月初会带来周期性的业务高峰,TiDB 数据库查询严重性能不足,且集群人工扩容流程冗长、扩容过程持续数小时、期间业务读写均受到影响;

3) 开发效率低+缺乏资源隔离:历史 SQL 代码执行效率低,多张表联合查询并通过 SQL 做权限管控,一个租户 SQL 可能占满 TiDB 集群 CPU;

4) 自研的数据同步服务覆盖场景有限:TiDB集群部署较早版本陈旧,与业务侧数据库 MySQL 8.0版本无法完全兼容性,数据同步异常频率较高;自研的 Flink CDC 同步工具覆盖技术场景有限,需不断迭代满足线上场景;

5) 公司 BI 类产品无统一的数据仓库,搭建了多套数仓库,数据没有实现高效共享,存在资源浪费的情况;

选型思路


为降低集群运维成本、提升实时查询效率,盖雅决定引入一款新的实时数仓来搭建新的数据平台,同时希望新的 OLAP 引擎可以具备以下能力:

1)性能强,可以在海量数据场景下实现快速响应;

2)支持高并发查询,可满足日常业务的报表分析需求;

3)支持 Join 操作,可满足不同业务用户灵活多变的分析需求;

4)具备良好的资源隔离能力,降低不同租户间的业务影响;

5)统一数仓构建,运维简单,缩减运维人力的投入和成本的支出,实现降本提效;

6)社区活跃,在使用过程中遇到问题,可迅速得到解决。

综合以上要求,盖雅快速定位了Apache Doris ,Apache Doris具备强悍的多表Join查询能力、高并发能力,完全可以满足盖雅日常的业务报表分析需求。除此之外,Apache Doris可以同时支持实时数据服务、交互数据分析和离线数据处理多种场景,并且架构简单,可有效降低集群运维成本。

同时,盖雅也了解到腾讯云数据仓库 TCHouse-D 这款产品。作为一款云上的实时数仓产品,腾讯云数据仓库TCHouse-D 100%兼容开源Apache Doris,具备企业级的高可用能力,且提供全托管的产品服务,可很方便的进行精细化集群管理、资源快速伸缩、数据备份恢复、异常监控及巡检定位等操作,同时在业务开发过程中TCHouse-D还会提供专家指导,盖雅基本无需关注集群运维,即可快速完成业务开发上线

另外在数据同步方面, 腾讯云数据仓库TCHouse-D无缝集成了腾讯云WeData的数据集成 ,通过白屏化操作即可高效实现业务库到TCHouse-D的实时数据同步,并支持自动批量建表、字段类型自动映射、高负载情况下自动限流等功能,有效提升迁移效率并保障业务稳定。

新的架构及方案


基于以上优势,盖雅最终选择与腾讯云大数据合作,并采用腾讯云数据仓库 TCHouse-D + 腾讯云 WeData 来搭建新的实时报表体系,架构如下:

源端 MySQL 数据经过 WeData 的数据集成进行自动数据转换后,入库到 TCHouse-D 中进行聚合分析和实时自定义分析。另外为保障数据安全,针对关键业务还创建了主备集群进行容灾,若主集群发生业务问题,可快速切换至备集群,避免长时间业务影响。

数据流向如下图所示:

应用实践


1.库表设计

  • 考勤业务是盖雅产品的核心功能,而考勤中的一个核心点是“时间”,因此在初期设计阶段,为了更好地发挥腾讯云数据仓库 TCHouse-D 的性能,盖雅技术团队结合专家建议,参考以下实践进行了库表设计:

  • Key列选择:将最常用的查询条件字段加到 key 列,区分度越大、频次越高的查询字段越往前放;

  • 分区设置:基于时间创建Range动态分区,提升查询性能的同时,可支持分区的生命周期管理;

  • 分桶设置:先对表的数据量进行预估,视情况配置分桶数,保障每个分桶大小保持在 1-10G 之间;

  • 索引设置-尽量命中前缀索引:最常⽤的查询字段尽量放在表的最前面,以此命中前缀索引;如果不能,放到分桶字段⾥;

  • 索引设置:大基数列(5000以上,如身份证号)进行“in”或者“=”查询时,选择 BloomFilter 索引;

  • 索引设置:非主键列查询,引入倒排索引进行加速;

  • 副本设置:考虑数据安全,副本数设置为3。

2.表原子替换

在考勤月结期间,考勤员为了获得员工本考勤周期最准确的考勤结果,通常会发起批量重算员工考勤记录的操作。由于此场景下业务表无法设定一个增量字段来存储数据,后端的处理动作是先删除历史数据再写入最新数据(亦即批量全删全写),这给 BI 分析师构建员工每日考勤模型带来了相同困境。早期他们采用全删全写,但势必会存在后端在删除、前端客户在查询的现象,造成无法查看数据的异常。

为解决此场景痛点,数据工程师使用“表原子替换”功能,通过 CREATE TABLE LIKE 语句创建一个相同结构的新表,将新数据导入新表后,即可通过替换操作原子替换旧表,过程中实现数据版本的秒级切换,全程对业务透明。类似的场景,在盖雅的业务中还有很多。

----- 创建新表(保留原表结构)
CREATE TABLE new_table LIKE old_table;  ----- 导入新数据(全量):
INSERT INTO new_table SELECT ...;  ----- 原子替换(零中断切换):
ALTER TABLE old_table REPLACE WITH TABLE new_table 
[PROPERTIES("swap" = "true")]

3.数据管理

数据质量的好坏直接决定了数据同步、数据查询的效率,对后续业务实施尤为重要,所以在数据管理方面,盖雅技术中台制定了约束规范:

  • 数据库/表命名:不支持以数字开头,中划线-命名;

  • 数据表主键:必须有独立的主键且主键列长度需<160(注:特殊场景,如业务表无独立主键而是联合主键,联合主键第一个栏位需存储经常变化的数据,且联合主键栏位总数<=3,联合主键栏位总长度需<160)

  • 业务表管理:禁止修改字段名称(包含栏位字母的大小写互换)

  • 数据存储:栏位中存储的数据总长度需<65533字节,如业务库表中存有图片base64、html等超文本的数据,此类的数据表无法进行同步

4.数据同步

使用腾讯云 WeData 进行MySQL数据实时同步,同步过程中无需进行SQL/代码开发,即可自动进行一键自动建表、字段类型映射、数据精度对齐、DML过滤、DDL同步等操作,大幅降低了操作成本,且过程中WeData会实时监控TCHouse-D的集群负载情况,进行自动限速,保障集群健康。

5.数据备份与恢复

使用TCHouse-D的备份恢复功能周期性的将数据导入到对象存储COS中进行备份,避免数据误删除或丢失的情况发生。比如当因某些原因导致Flink同步任务失败、无法从 Checkpoint进行启动时,可读取最新的数据进行同步,历史缺失数据通过外部表进行修复,使得同步任务能够快速恢复。

6.监控告警

将腾讯云产品(腾讯云数据仓库TCHouse-D、WeData数据集成)两类告警接入盖雅飞书,做到实时预警。

另外对于重要的单表,我们还会通过程序进行比对,如比对业务库数据和TCHouse-D的数据,来进行数据质量、报表质量稽查告警。

收益总结


盖雅工场将自建TiDB+StarRocks完全迁移到腾讯云TCHouse-D上,借助其向量化查询、数据预聚合、丰富的索引等方式实现了查询性能的巨大提升,通过TCHouse-D的集群弹性伸缩能力实现快速扩缩容,并配合合理业务拆分+Workload Group资源组的方式对集群内租户进行资源隔离,充分避免不同租户见的资源抢占。配合WeData数据集成,实现全程自动化同步与智能限流,避免集群过载。

1.性能提升:同配置下TCHouse-D 2.0比TiDB查询效率平均提升70%

2.弹性伸缩:基于全托管的TCHouse-D+专线实现多云统一数据报表,业务高峰快速水平扩缩容。

3.开发运维降本:统一技术栈,标准SQL开发,开发效率提升50%;无需关注集群运维,运维成本大幅降低;

4.成本降低:通过性能优化和架构整合,TCHouse-D对比TiDB+StarRocks节省20%成本

未来规划


截至目前,盖雅95%的数据分析类业务已迁移至腾讯云数据仓库TCHouse-D,并得到了很好的效果,深得各数据部门、业务部门的认可。未来盖雅将继续深度加强同腾讯云大数据团队的合作,配合产品的不断更新迭代,进一步提升实时数据处理的能力。近期关注的重点能力包括:

  • 部分列更新:减少不必要的数据写入和锁竞争,降低I/O和CPU开销,实现数据更新和查询性能的双重提升;

  • 异步物化视图:空间换时间,支持分区级数据自动增量刷新,进一步提升复杂查询报表的性能;

  • 基于CCR的主备容灾:通过CCR实现主备集群间的实时同步,降低集群综合负载,提升主备容灾的及时性和易用性;

  • 存算分离:升级至腾讯云数据仓库 TCHouse-D的存算分离版本,降本的同时,进一步提升资源弹性、和资源隔离能力,更好的应对业务波峰波谷问题,并提升不同租户间的资源隔离效果。

最后,感谢腾讯云大数据团队,感谢其对问题的快速响应和积极的技术支持。

END

关注腾讯云大数据╳探索数据的无限可能

⏬点击阅读原文

了解更多产品详情

分享给认识的人吧

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

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

相关文章

zynq裸机开发:更改系统时间保存文件到SD卡

1、首先勾选文件系统库 2、之后导出一个SD卡文件写demo 3、SD卡创建或修改文件时的创建时间和修改时间是通过调用BSP包的diskio.c文件中的get_fattime函数 4、找到这段函数&#xff0c;先把他注释掉&#xff0c;之后考到导出demo的最后一行&#xff0c;稍作修改&#xff0c…

“荔枝使”的难题怎么破:A*运输路径算法编程实践

原文首发请访问&#xff1a;https://cloud.tencent.com/developer/article/2533317 荔枝最初被称为“离支”&#xff0c;亦作“离枝”。 这是一种非常精贵的水果&#xff0c;一旦离开枝头&#xff0c;色泽、香气和味道会在短时间内迅速变质。 但它又是非常美味&#xff0c;宋…

python基础知识,以及7个练习案例

python的用途 搭建网站网络爬虫科学计算与大数据分析人工智能与机器学习设计动画游戏&#xff1a;例如pygame图形用户接口开发&#xff1a;模块与框架&#xff0c;如tkinter python基础课程包含内容 自动化运维人工智能应用web开发多媒体处理自动化办公python爬虫 python是…

Java 编程之命令模式

什么是命令模式 命令模式Command Pattern 是一种行为型设计模式&#xff0c;它把请求封装成对象&#xff0c;从而将请求的发送者与执行者完全解耦&#xff0c;支持排队、撤销、日志记录等操作。。 模式目标&#xff1a; 解耦命令的发出者&#xff08;Invoker&#xff09;与执…

TCP 三次握手与四次挥手全流程详解

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。为了建立和终止连接,TCP 使用了 三次握手 和 四次挥手 的机制。本文将从原理到状态变化,详细解析 TCP 连接的建立与释放全过程,力求专业、准确。 一、TCP 三次握手(Three-Way Han…

MySQL 慢 SQL 识别与优化

一、识别慢 SQL 1. 启用慢查询日志 -- 查看当前慢查询配置 SHOW VARIABLES LIKE slow_query%; SHOW VARIABLES LIKE long_query_time;-- 开启慢查询日志&#xff08;临时生效&#xff09; SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 2; -- 设置慢查询阈值…

墨记APP:水墨风记事,书写生活诗意

在快节奏的现代生活中&#xff0c;记录生活的点滴成为了一种独特的仪式感。无论是日常的琐事、突发的灵感&#xff0c;还是对未来的规划&#xff0c;一款好用的记事软件都能帮助我们更好地整理思绪&#xff0c;留住美好瞬间。墨记APP正是一款兼具美学与实用性的记事软件&#x…

龙芯7A1000桥片数据手册解读(时序)

RTC是电池&#xff0c;理论上一直是有电的&#xff0c;图示指的是接上220V电之后切换为系统的电。顺序是这样的&#xff1a;接上220V电之后系统的12V供电就有了&#xff0c;12V转为5VSB&#xff0c;5VSB供给RTC3V&#xff0c;此时RTC3V转为系统供电而不是电池供电。这里的5VSB指…

无人机气压计模块技术解析

一、运行方式 1. 基础原理 气压计通过测量大气压力间接计算高度。无人机飞行中&#xff0c;气压随高度上升而降低&#xff0c;传感器将压力信号转为电信号&#xff0c;经ADC转换为数字值。 2. 工作流程 数据采集&#xff1a;同步获取压力与温度值。 原始数据处理&…

第十四节:第三部分:IO流:前置知识-什么是方法递归以及递归的形式、递归算法三要素

什么是方法递归以及递归的形式 递归算法三要素 代码 代码一&#xff1a;认识一下递归的形式 package com.itheima.Recurtion; //目标:认识一下递归的形式 public class RecurtionTest1 {public static void main(String[] args) {test2();}//直接方法递归public static void…

论文阅读笔记:Digging Into Self-Supervised Monocular Depth Estimation

论文阅读笔记&#xff1a;Digging Into Self-Supervised Monocular Depth Estimation 1 背景2 创新点3 方法4 模块4.1 自监督训练4.2 优化自监督深度估计4.2.1 每个像素的最小重建损失4.2.2 自动掩码静态像素4.2.3 多尺度估计4.2.4 最终的训练损失 4.3 额外考虑 5 效果 1 背景 …

YAML 数据格式详解

1. YAML 概念 YAML (YAML Ain’t Markup Language) 是一种人性化的数据序列化格式&#xff1a; 专注于数据而非标记&#xff08;与 XML 不同&#xff09;使用简洁的语法表示复杂数据结构可读性高&#xff0c;适合人类编写和阅读广泛应用于配置文件&#xff08;如 Docker Comp…

react扩展

首先补充一下上个章节的一点结尾内容。reducer是一个纯函数&#xff0c;纯函数指的是当我们在redux里面定义了我们需要共享的对象后&#xff0c;我们是不可以对共享的对象本身进行改变的。我们在获取更新后的共享数据时&#xff0c;要去重新定义一个新的变量来获取更新后的共享…

6.获取图片灰度与缩放

目录 一、Halcon 1. 获取像素坐标以及灰度 2. 拖动缩放 3.图像缩放的实现方式 二、VS联合编程 1.获取像素坐标和灰度 2.拖动缩放 一、Halcon 1. 获取像素坐标以及灰度 *1. 获取像素坐标 * 1. get_mposition * 2. halcon窗口事件自带坐标数据 * *2. 获取像素灰度 *…

无人机+AI:革新集装箱箱号识别的智能解决方案

在现代化物流体系中&#xff0c;集装箱箱号识别是货物追踪与管理的核心环节。然而&#xff0c;传统的人工巡检或固定摄像头识别方式存在效率低、覆盖范围有限、易受环境干扰等问题&#xff0c;难以满足日益增长的物流需求。基于无人机与AI技术的集装箱箱号识别系统&#xff0c;…

一种新的参数高效微调方法-LoRI

论文&#xff1a;LoRI: Reducing Cross-Task Interference in Multi-Task Low-Rank Adaptation LoRA 具体参考 1. 引言与背景&#xff1a;为什么需要 LoRI&#xff1f; 这篇论文提出了一种新的参数高效微调&#xff08;PEFT&#xff09;方法&#xff0c;名为 LoRA with Reduce…

Go网络编程:基于TCP的网络服务端与客户端

Go 语言的 net 包为网络编程提供了简洁高效的接口。我们可以使用它快速构建 TCP 网络服务&#xff0c;如聊天服务器、RPC、微服务通信等。 一、TCP简介 TCP&#xff08;Transmission Control Protocol&#xff09;是面向连接的、可靠的传输协议&#xff0c;通信模型为客户端-服…

【StarRocks系列】架构、核心概念

目录 一、架构&#xff1a;分布式 MPP 列式存储 向量化引擎 二、存储&#xff1a;高性能列式存储引擎 三、表设计&#xff1a;三类模型适配不同场景 四、数据写入&#xff1a;多种方式支持实时与批量 五、数据读取&#xff1a;极致优化的查询引擎 总结&#xff1a;Star…

从源码到生产:Apache 2.4.57 自动化安装实战指南(附脚本)

引言&#xff1a;为何选择源码安装 Apache&#xff1f; 在服务器运维场景中&#xff0c;源码编译安装 Apache HTTP Server 是实现精细化配置的重要方式。相比包管理器安装&#xff0c;源码安装可自定义模块组合、适配特定依赖环境&#xff0c;并精确控制版本。本文将通过自动化…

iOS开发中的安全实践:如何通过Ipa混淆与加固确保应用安全

随着移动应用技术的不断发展&#xff0c;开发者越来越重视应用的安全性&#xff0c;尤其是iOS应用。无论是面对大规模的数据泄露问题&#xff0c;还是在应用上线后避免被逆向破解&#xff0c;开发者们都需要采取一系列技术手段来保护应用。然而&#xff0c;很多开发者在应用开发…