作者:luzizhuo

原文来源: https://tidb.net/blog/9870195f

本文根据茄子科技存储负责人闫林林在【PingCAP DevCon 2021】上的演讲整理而成。

  • 视频回顾: https://www.bilibili.com/video/BV1og41177fu
  • 讲义下载: 茄子科技-闫林林-TiDB 在茄子科技的应用实践及演进.pdf (765.5 KB)

茄子科技 (海外 SHAREit Group)是一家全球化互联网科技公司,主要从事 移动互联网软件研发与全球移动广告变现解决方案、跨境支付解决方案等互联网服务 等业务。 茄子快传 (SHAREit)是茄子科技旗下的代表产品, 是一款 一站式数字娱乐内容与跨平台资源分享平台 ,累计安装用户数近 24 亿。茄子科技作为一家出海企业,已经在东南亚、南亚、中东以及非洲等地区,打造了多款工具和内容的应用,并且在 Google Play 的下载榜上常年名列前茅。

面向不同业态的数据库选型

茄子科技的产品矩阵丰富,产品形态相对比较复杂,包括了 工具、内容、游戏、广告、支付 等。针对相对复杂的业务场景,根据不同的业务形态,我们做了不同的数据库选型。目前,茄子科技使用的六款最主要的数据库包括:

  • 自研持久化 KV :特征平台、用户画像、行为记录等
  • Redis Cluster :业务缓存、session 信息等
  • Cassandra :内容库
  • MySQL :Hue、Metadata、运营平台等
  • ClickHouse :数据分析、实时报表
  • TiDB :用户增长、APM 系统、云账单等

基于业务层面的痛点思考,我们在多个业务场景引入了 TiDB。

第一 ,茄子科技作为一家出海企业引入了多家公有云作为基础设施,所以在数据库的层面,要考虑业务在多云架构下的业务适配、数据迁移、数据库的兼容以及数据同步的问题。

第二 ,茄子有多款高流量的 APP 产品,业务呈现高速增长的态势,传统的 DRS 数据库,比如 MySQL,因为需要分库分表,阻碍业务快速发展。

第三 ,Cassandra、HBase 等 NoSQL 数据库,无法满足分布式事务,多表 join 等复杂场景。

第四 ,茄子科技的 APM(Application Performance Management)、Data Store 等系统,有一些是 HTAP 场景,同一份业务数据既有 OLTP 又有 OLAP 的需求,我们希望一套数据库可以搞定。

引入 TiDB 之后,TiDB 在多个方面发挥出独特优势,帮助茄子科技打造可持续发展的数据库生态:

  • 利用 TiDB 的 跨集群迁移、数据同步 的能力打造多云架构下的业务扩展能力,满足 多云架构 下的业务架构设计。
  • TiDB 提供 自动水平弹性扩展 的能力,做到业务无感知,解决分库分表的问题。
  • TiDB 高度兼容 MySQL,在 大容量、高并发 的场景下 学习成本低、迁移成本低
  • 利用 TiDB HTAP 的能力,满足业务 在一份数据上的 OLTP 与 OLAP 的双重需求

TiDB 在 APM 场景的应用实践

茄子科技的 APM(Application Performance Management)系统提供 APP 崩溃、性能等问题的 监控、分析、看板、修复 的一体化能力,用来支撑多款高增长的 APP 应用。这个系统的第一个特点就是 信息量大 ,每天产生百亿条的数据,需要保留 30 天;第二个特点是 时效性要求比较高 ,针对一些比较棘手的情况,比如说崩溃以及严重的性能问题,如果时效性不能满足的话会直接影响到用户的体验,甚至是产品的营收;第三个特点是需要 打通工单系统 ,提供 问题追踪、修复 的一体化能力;第四个特点是在 OLTP 事务场景的基础上需要兼顾 OLAP 的分析场景。

首先分析一下早期 APM 的数据流转,从 APP 数据上报到日志收集,最后到 ClickHouse,整个数据流转是一个类似 批处理 的流程,大概需要两个多小时的时效性,整体时效性是很弱的,问题暴露不及时,会对用户体验产生影响。另外,这套系统里面有 MySQL 和 ClickHouse 两套数据库,为什么这么设计?因为 ClickHouse 可以用来 做数据的分析聚合 ,MySQL 主要是用来打造流程工单,同时有两套数据库在支撑,在成本上是比较高的。

再来看引入了 TiDB 之后的新版 APM 数据流转,可以看到从 APP 的上报,到看板展示,到报警,再到流程工单,实现 分钟级 的准实时看板展示和报警。这个部分主要是借助了 TiDB 的 HTAP 能力,通过 聚合分析 向看板进行展示,向报警中心进行及时的报警。同时,利用 TiDB 的 OLTP 能力进行看板的行更新。所以,我们可以通过一套 TiDB 数据库打通看板、监控、问题的追踪和修复流程。

利用 TiKV 打造分布式 KV 系统

大家知道 TiKVTiDB 的存储层 ,同时也是一个 Key-Value 数据库 ,接下来谈谈茄子科技基于 TiKV 打造分布式 KV 系统的历程。茄子科技主要是提供工具和内容产品,产生的数据量非常大,KV 产品需要为两类场景做支撑:一类是 数据的实时产生 ,对于 Redis,需要实时的写入;另一类是针对 用户画像和特征引擎 ,将离线产生的大批量数据快速地加载到在线的 KV 存储,为在线业务提供快速的访问,即 Bulk Load 能力 ,实际业务中需要大概每小时 TB 级的吞吐量。

下图是茄子科技之前基于 RocksDB 自研的分布式 KV,这个系统同时满足上述的两类对 KV 的需求。图中左边展示的架构主要是实时写入能力的实现,数据先从 SDK 到网络协议层,然后到拓扑层,再到数据结构的映射层,最后到 RocksDB。右边是 Bulk Load 批量导入的流程。大家可能有一个疑问,为什么左边实时的写入流程不能满足小时级 TB 数据导入?主要原因有两点:一是因为 RocksDB 的写放大 ,尤其在大型场景下,LuaDB 写放大是非常严重的。另一点是受限于单块盘的网络带宽,导致了 单机负载或者单机存储是有限的 。右边整个批量导入的能力是怎么实现的?它是通过 Spark 把 Parquet 进行数据解析、预分片以及 SST 生成,把 SST 上传到 LuaDB 的存储节点,最后通过 ingest & compact 统一加载到 KV 层,供在线的业务进行访问, 单机吞吐每秒钟可以达到百兆

茄子科技既然已经自研了基于 RocksDB 的分布式 KV,为什么还要用到 TiKV ?首先在技术层面,虽然自研分布式 KV 在生产已经运行了两年多的时间,支撑了上百 TB 的数据,但是有些技术问题,比如 自动弹性升缩、强一致性、事务和大 key 等支持上还需要进一步投入研发。第二,在 人才层面针对高质量数据库人才储备 还有一定的欠缺。经过多次调研以及和 TiKV 研发同学的沟通,发现我们的需求和痛点与 TiKV 的产品规划是不谋而合的,这就促使了我们积极地拥抱 TiKV。我们借助 TiKV 可以在技术上打造存储与计算分离的 KV 产品。第三,TiKV 拥有 活跃的开源社区 ,我们可以借助社区的力量共同打磨产品。

下图中的架构是茄子科技基于 TiKV 打造的一款分布式 KV。左侧部分主要是解决数据实时写入的一个流程,从 SDK 到网络存储,到数据计算,最后到 TiKV 的存储引擎。我们重点的研究方向是右侧部分整个 Bulk Load 能力的研发,与自研的分布式 KV 的不同,我们把 整个 SST 的生成流程放在 TiKV 内部 去做,这样做的原因是可以 最大化地减少 Spark 部分的代码开发和维护成本,提升易用性

以下两张表是基于 TiKV 的 Bulk Load 能力进行实际测试的结果。上面这张表是在 E5 CPU,40 个 vcore,磁盘使用 NVMe 的情况下,最大可以达到 256 兆的单机吞吐 。下边这张表是我们在进行 Bulk Load 的同时对 online reading 部分进行压测,可以看到 Latency 响应时间的抖动是非常小的,不管是 P99 还是 P99.99 ,都是处在一个比较稳定的状态。这个测试结果是一个 Demo 的验证,相信后续经过我们的优化,不管是存储吞吐还是响应延迟,都会有质的提升。

Bulk Load 的能力是我们和 TiKV 的研发同学一起,共同协作开发、共同演进的。我们相信开放的力量,在不远的某个时刻,我们会把整个架构,包括测试数据都会放到 GitHub 上公开,如果大家有相应的需求可以关注一下。

TiDB 在茄子科技的应用实践及演进相关推荐

  1. 精彩回顾 | 苏州农商银行新一代云原生信息科技架构体系实践

    11月18日,2022年第五届中国金融科技产业大会暨第四届中新(苏州)数字金融应用博览会"基础软件与云原生系统软件"分论坛成功举办.该论坛由由中国计算机学会CTO CLUB(苏州) ...

  2. TiDB上百T数据拆分实践

    作者:杨家鑫 原文来源: https://tidb.net/blog/57fbca58 TiDB上百T数据拆分实践 背景 提高TiDB可用性,需要把多点已有上百T TiDB集群拆分出2套 挑战 1.现 ...

  3. 茄子科技(海外SHAREit Group),助力跨境电商有效实现出海稳定发展

    在疫情给全球经济带来巨大冲击下,全球供应链断裂.国际物流道路受阻,全球经济和贸易面临前所未有的挑战.随着全球经济复苏,国际市场商品需求增加,跨境电商渗透率持续增长,跨境电商也迎来了新机遇.根据数据显示 ...

  4. SHAREit(茄子科技(快乐茄科技)SRE运维一面题目)

    SHAREit(茄子科技(快乐茄科技)SRE运维一面题目)接不接受7*24oncall crontab *字段含义 Linux版本 http状态码 tcp和udp区别 怎样学习新知识 k8s了解 怎样 ...

  5. 当线下门店遇上AI:华为云ModelBox携手佳华科技客流分析实践

    摘要:在赋能传统门店客流经营数字化转型方面,华为云ModelBox与伙伴佳华科技合作推出的"华为云客流统计项目",算是一次成功的探索. 本文分享自华为云社区<当线下门店遇上A ...

  6. 百分点大数据技术团队:舆情平台架构实践与演进

    编者按 现代社会每天都有大量信息产生,抖音.小红书等自媒体的普及,不断丰富着人们表达看法.传播诉求.分享信息的渠道和形式.如何完成多源异构数据的收集和处理,挖掘海量信息中的价值,洞察事件背后的观点和情 ...

  7. 阿里HBase的数据管道设施实践与演进

    为什么80%的码农都做不了架构师?>>>    摘要:第九届中国数据库技术大会,阿里巴巴技术专家孟庆义对阿里HBase的数据管道设施实践与演进进行了讲解.主要从数据导入场景. HBa ...

  8. 阿里技术专家详解 Dubbo 实践,演进及未来规划

    2019独角兽企业重金招聘Python工程师标准>>> 作者:曹胜利 链接:https://www.infoq.cn/article/IwZCAp3jo_H5fJFbWOZu?utm ...

  9. 阿里技术专家详解Dubbo实践,演进及未来规划

    Dubbo 整体介绍 Dubbo 是一款高性能,轻量级的 Java RPC 框架.虽然它是以 Java 语言来出名的,但是现在我们生态里面已经有 Go.Python.PHP.Node.JS 等等语言. ...

最新文章

  1. Kotlin系列之类和属性
  2. 画出的点做交互_设计之下交互设计原型设计之概念设计
  3. MySQL划重点-查询-条件
  4. 工作295:发布逻辑处理
  5. Android中给按钮同时设置背景和圆角示例代码
  6. 解决/usr/local/lib/libglog.so.0: error adding symbols: DSO missing from command line
  7. LeetCode-26 删除排序数组中的重复项
  8. 为Web Service添加缓存
  9. dev gridcontrol 单元格内容复制_Excel复制还在用“Ctrl+C”?这5种高效的复制操作,堪称神来之笔...
  10. linux fuse文件系统在 android fuse sdcard的 运用
  11. java垃圾回收机制GC
  12. 使用charles抓取https的方法
  13. oracle恢复init文件,详解NBU异机恢复ORACLE数据库
  14. 【转】国家集训队论文分类
  15. 社交电商平台的消费返利模式——共享购
  16. 利用LabVIEW开发应变量测试
  17. 解决vue和vue-template-compiler版本不一致问题
  18. ISP——坏点矫正(Defective Pixel Correction,DPC)
  19. 自带流量的免费微信编辑器推荐
  20. Java数组转集合之Arrays.asList()用法

热门文章

  1. git的基本使用流程演示
  2. wsl2的安装与卸载
  3. 干货|app自动化测试之模拟器控制
  4. HTML+CSS+JavaScript实现仿猫眼电影购票选座
  5. 使用自定义git lg命令来配置git log输出信息
  6. 如何去除视频上的水印?
  7. 利用.ftl模板生成word之后再转pdf发现 填充的印章图片显示不全,没有自动移到下一页处理办法
  8. 计算机要通过手机传播,教你一个手机电脑互传功能的小妙招,比蓝牙传输快千倍...
  9. 数字逻辑课程设计-数字时钟时分秒的设计
  10. html 5 设置标签居中,Html5中新增标签与样式实现元素水平垂直居中的方法