速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

大促都“内卷”了 ,数据库工程师如何顶住 10 倍流量压力?

  • 2021-11-08
  • 本文字数:2739 字

    阅读完需:约 9 分钟

大促都“内卷”了 ,数据库工程师如何顶住10倍流量压力?

一年一度的 11.11 又双叒叕来了,给技术人最好的礼物就是技术指南! 而经过这些年的发展,购物节早已不仅仅局限于电商行业,现在各行各业其实都会采用类似方式做运营活动,汽车界有 818,小米有米粉节等等,这对包括数据库在内的基础软件提出了很多新挑战,同时也积累了诸多最佳实践。

 

在 11.11 到来前,PingCAP 与汽车之家、易车网、京东、中通等用户展开一系列深入探讨,希望为大家揭秘逐年飙涨的销量背后隐藏着什么样的技术难题?用什么技术架构才能平稳地抗住流量洪峰?


京东 11.11 的技术挑战

 

每年的 618、11.11 对于京东而言都是一次大考,而京东云作为京东集团技术保障的基石,在此期间需要扛住京东零售核心业务和京东物流系统 PB 级别的数据增长压力。面对每年京东 11.11 订单量和成交额迅猛的增速,京东云数据库作为大部分京东背后业务系统的核心,压力自然不小。

 

京东云资深产品经理杨牧对此深有感触:许多和京东 11.11 有关的业务系统都需要数据库的支持,如分析看板、报表数据、运单数据等等。受商品活动和优惠时间的影响,用户下单高峰往往在固定时间段,这些数据库的访问量会急速上升。

 

他所在的数据库团队,从后台监控可以很明显地看到一个个峰值。当京东 11.11 全面开启的瞬间,海量消费者和订单涌入,大量品牌和商家迅速创造了新的纪录,CPU、QPS 等也开始飙升,有时候持续若干分钟,有时候则会持续数小时不等。

如何做好保障?

 

京东云数据库需要在京东 11.11 期间平稳支撑京东集团已经上云的上千个核心业务系统,前期的预案准备和压测、预案演练和实时监控都是必不可少的环节。而京东云数据库团队对此已经积累起丰富的经验,他们将备战分为 8 个步骤:(1)识别保障范围;(2)业务量预估及预检查;(3)预案整理;(4)监控及报警梳理;(5)业务压测;(6)预案演练;(7)11.11 值班;(8)技术复盘。

 

根据以往经验,杨牧认为京东 11.11 时的业务量会达到平时的 10 倍之多。这个数据量的峰值增长必须准备额外的资源来满足,但由于京东云的数据库已经跑在云上,他们只需根据预先估计好的数据量做好资源规划和分配,并做足压力测试,确保后面数据库的存储容纳量和性能就可以满足要求。到流量洪峰真正到来时,往往只需要静静等待就会平稳度过,并不会出现什么极端情况。

 

特别像京东物流大部分业务已经上云,保障和准备其实是无时无刻都在进行中。云数据库通过高可用架构、自动故障切换、弹性扩容机制等一系列数据库级别的技术手段,保证数据可备份,故障可切换,增量可扩容,从容应对京东 11.11 期间海量数据压力。

 

而在应用 TiDB 后,这些工作变得更加简单。TiDB 采用的分布式架构支撑海量数据扩展,可以有效地解决单机 MySQL 容量和性能的瓶颈问题。杨牧形容,在扩容时只需根据业务方需要提前对 TiDB、TiKV 进行扩容。而扩容的工作也仅需在控制台上点一点鼠标,然后安心地喝着茶等待就行了,大大提高了 DBA 的工作效率。同时,TiDB 是开源的,不存在技术锁定问题,也更容易在云上使用,甚至跨云部署。

 

为了降低集团内部各团队使用 TiDB 的技术门槛,京东云与 PingCAP 联合推出了云上的分布式数据库 —— Cloud-TiDB,在京东云上提供 TiDB 服务。这样一来,业务方所有和数据库服务有关的事情不再需要设置自己的 DBA,完全委托给京东云即可。

 

今年的 京东 618 和 11.11 中,Cloud-TiDB 就已成功应用于京东物流内的物流业务费用系统、物流大件分拣系统、运单计提明细系统等多个业务中,应用规模总体接近 6000 核,达到 30 个 TiDB 集群,在成本、效率和体验三大方面带来了大幅提升。杨牧笑言,研发再也不用整天忙着优化系统了,可以早点回家。运维同学也不用再熬夜支持系统运维,头发都可以少掉几根。

物流某业务系统

 

11.11 中,大家买买买后最期盼的事情就是收到快递。而在京东中,京东物流就承担了将下单物品送到买家手中的职责。可想而知,京东物流业务系统的数据量肯定非常大,几个主表的数量分别是 20 亿、50 亿和 100 亿,系统上线半年后数据翻倍到了 220 亿。原先 MySQL 分库分表的架构就遇到了一些复杂的 SQL 不支持、跨分片统计报表难于实现等问题。


系统迁移到 TiDB 之后,整体的性能表现优秀,写入和更新的效率在 100 毫秒左右,查询和 Sum 查询只有二三十毫秒。一个几百亿数据量的系统从 MySQL 迁移到 TiDB,实际业务代码零修改,系统只是更换了 JDBC 连接的用户名和密码,真正地实现了从 MySQL 到 TiDB 的零代码修改和无缝迁移。TiDB 和 MySQL 良好的兼容性,降低了用户的试错、测试和迁移的成本,且收益周期短,见效快。

 

此外,杨牧特别指出,迁移到 TiDB 还给业务方带来一个意外的惊喜。如果按两年的周期计算,TiDB 的使用成本只有 MySQL 的 37%。这主要是因为 TiDB 对数据的压缩率非常好。比如在 MySQL 里数据占到 10.8 TB,迁移到 TiDB 之后只有 3.2TB,而且这还是三副本的总数据量,TiDB 实实在在地帮助整个业务部分极大降低了 IT 的投入成本。

物流大件分拣系统

 

京东物流大件分拣系统的一些实时看板和核心报表跑在 MySQL 上。随着数据量增加,而且 SQL 比较复杂,报表和看板的性能比较低,用户体验不佳。分库分表的方式对代码侵入性比较大,架构需要大幅调整,风险较高。



在 618 期间,京东物流采用 TiDB 支撑业务的实时看板和核心报表,在 MySQL 和 TiDB 之间,用自研的蜂巢系统进行数据的准实时同步。从 MySQL 迁移到 TiDB 后,总共数百个指标,整体性能实现了 8 倍提升。

运单计提明细系统

 

运单计提明细系统用来记录部分运单的明细数据,每天的数据增长在千万级别,单表最大记录接近 200 亿条。从数据量看用 MySQL 难以支撑,京东物流尝试过使用 Presto,但使用成本比较高,后来使用 ElasticSearch 做查询,但也存在着不稳定的情况,维护工作量很大。

 


业务系统迁移到 TiDB 之后解决了海量数据的问题,TiDB 可以毫无压力地支撑百亿级的数据量。TiDB 成本比起以前使用的 MySQL + ElasticSearch 方案降低了 30%。TiDB 性能满足业务的要求,从百亿的单表里面查询出业务数据的 TP99 大概在 500 毫秒左右。此外,TiDB 整个表结构的调整修改操作非常简单,带来了运维敏捷和成本下降。

 

经过 618 、11.11 的严酷考验,TiDB 在京东集团的多个 0 级系统中应用稳定,没有出现任何事故,各业务方反馈都比较好,已经成为集团内部的标杆案例。这也给了杨牧他们充足的信心,在接下来的时间中可以继续在集团内部推动使用 TiDB ,以技术的进步推动业务发展,预计 2021 年底规模还将再翻一倍,达到 10000 核规模。

 

大促对于企业而言,除了支持业务创新,也是一次对自身技术架构的大练兵和全链路演练。通过大促的极致考验,企业的 IT 架构、组织流程、人才技能都获得了大幅提升。而在大促中的经验和思考,也会加速企业日常的业务创新节奏,提升技术驱动的创新效率,打造增长新引擎。

 

2021-11-08 15:1610052

评论 1 条评论

发布
用户头像
牛逼
2021-12-14 15:09
回复
没有更多了
发现更多内容

c++ 杂谈3

菜鸟小sailor 🐕

高难度对话读书笔记—求助的勇气

wo是一棵草

java安全编码指南之:敏感类的拷贝

程序那些事

Java java安全编码 java安全 java安全编码指南

基于数组的有界阻塞队列 —— ArrayBlockingQueue

程序员小航

Java 源码 队列 源码阅读 JUC

数据提交

hasWhere

Java进阶教程、大厂面试真题、项目实战,GitHub上这14个开源项目屌炸天了!

Java架构之路

Java 程序员 面试 编程语言 项目实战

架构师训练营第 1 期 第 2 周作业

李循律

极客大学架构师训练营

鸿蒙系统究竟是PPT秀还是有真材实料?鸿蒙HarmonyOS开发环境搭建与运行Demo

软测小生

华为 鸿蒙 HarmonyOS

在多架构时代,英特尔扩展高性能计算边界

E科讯

解读华为云原生数据库设计原则,打破传统数据库上云瓶颈

华为云开发者联盟

数据库 数据

一文了解Zookeeper

Java旅途

kafka zookeeper 分布式

LeetCode题解:641. 设计循环双端队列,使用队列,JavaScript,详细注释

Lee Chen

大前端 LeetCode

ARChatRoom功能介绍手册

anyRTC开发者

音视频 WebRTC 语音 RTC 安卓

Http自定义请求头接收不正确

hasWhere

《转》Spring事务传播机制

hasWhere

onblur调用alert导致的死循环

hasWhere

实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

华为云开发者联盟

物联网 IoT 传感

如何避免option请求

hasWhere

清华架构师整理分布式系统文档:从实现原理到系统实现,收藏吧

小Q

Java 程序员 架构 分布式 微服务

TensorFlow 篇 | TensorFlow 2.x 基于 HParams 的超参数调优

Alex

tensorflow keras hparams tensorboard 超参数调优

学习路线

hasWhere

学习思路

hasWhere

栈与队列简介

Java旅途

数据结构 队列

Redis 缓存性能实践及总结

vivo互联网技术

redis redis集群 redis监控

《我在你床下》观后感

徐说科技

CICD实战——服务自动构建与部署

TARS基金会

DevOps 后端 jenkins CI/CD TARS

阿里P8大牛力荐Java程序员进阶必读的书籍清单(附电子版)

Java架构之路

Java 程序员 面试 编程语言 书籍推荐

《转》POI的XWPFParagraph.getRuns分段问题

hasWhere

格式化报文输出

hasWhere

form表单提交get请求

hasWhere

揭秘App的财富密码,剖析算法工程师价值来源

峰池

人工智能 互联网 推荐算法 互联网公司

大促都“内卷”了 ,数据库工程师如何顶住10倍流量压力?_AI&大模型_PingCAP技术团队_InfoQ精选文章