TiDB 在小米的应用实践

2018-12-04 10:30:32 +08:00
 PingCAP

作者:张良,小米 DBA 负责人;潘友飞,小米 DBA ;王必文,小米开发工程师。

一、应用场景介绍

MIUI 是小米公司旗下基于 Android 系统深度优化、定制、开发的第三方手机操作系统,也是小米的第一个产品。MIUI 在 Android 系统基础上,针对中国用户进行了深度定制,在此之上孕育出了一系列的应用,比如主题商店、小米音乐、应用商店、小米阅读等。

<center>图 1  MIUI Android 系统界面图</center>

目前 TiDB 主要应用在:

这两个业务场景每天读写量均达到上亿级,上线之后,整个服务稳定运行;接下来我们计划逐步上线更多的业务场景,小米阅读目前正在积极的针对订单系统做迁移测试。

二、TiDB 特点

TiDB 结合了传统的 RDBMS 和 NoSQL 的最佳特性,兼容 MySQL 协议,支持无限的水平扩展,具备强一致性和高可用性。

具有如下的特性:

TiDB 的架构及原理在 官网 里有详细介绍,这里不再赘述。

<center>图 2  TiDB 基础架构图</center>

三、背景

跟绝大数互联网公司一样,小米关系型存储数据库首选 MySQL,单机 2.6T 磁盘。由于小米手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快,**每天的读写量级均分别达到上亿级别,数据快速增长导致单机出现瓶颈,比如性能明显下降、可用存储空间不断降低、大表 DDL 无法执行等,不得不面临数据库扩展的问题。**比如,我们有一个业务场景(智能终端),需要定时从几千万级的智能终端高频的向数据库写入各种监控及采集数据,MySQL 基于 Binlog 的单线程复制模式,很容易造成从库延迟,并且堆积越来越严重。

**对于 MySQL 来讲,最直接的方案就是采用分库分表的水平扩展方式,综合来看并不是最优的方案,比如对于业务来讲,对业务代码的侵入性较大;对于 DBA 来讲提升管理成本,后续需要不断的拆分扩容,即使有中间件也有一定的局限性。**同样是上面的智能终端业务场景,从业务需求看,需要从多个业务维度进行查询,并且业务维度可能随时进行扩展,分表的方案基本不能满足业务的需求。

了解到 TiDB 特点之后,DBA 与业务开发沟通确认当前 MySQL 的使用方式,并与 TiDB 的兼容性做了详细对比,经过业务压测之后,根据压测的结果,决定尝试将数据存储从 MySQL 迁移到 TiDB。经过几个月的线上考验,TiDB 的表现达到预期。

四、兼容性对比

TiDB 支持包括跨行事务、JOIN、子查询在内的绝大多数 MySQL 的语法,可以直接使用 MySQL 客户端连接;对于已用 MySQL 的业务来讲,基本可以无缝切换到 TiDB。

二者简单对比如下几方面:

五、压测

5.1 目的

通过压测 TiDB 了解一下其 OLTP 性能,看是否满足业务要求。

5.2 机器配置

5.3 压测内容以及结果

5.3.1 标准 Select 压测

<center>图 3  标准 Select 压测图</center>

5.3.2 标准 OLTP 压测

<center>图 4  标准 OLTP  压测图</center>

5.3.3 标准 Insert 压测

<center>图 5  标准 Insert 压测图</center>

通过压测发现 TiDB 稳定性上与预期稍有差别,不过压测的 Load 会明显高于生产中的业务 Load,参考低 Threads 时 TiDB 的表现,基本可以满足业务对 DB 的性能要求,决定灰度一部分 MySQL 从库读流量体验一下实际效果。

六、迁移过程

整个迁移分为 2 大块:数据迁移、流量迁移。

6.1 数据迁移

数据迁移分为增量数据、存量数据两部分。

Syncer 结构如图 6,主要依靠各种 Rule 来实现不同的过滤、合并效果,一个同步源对应一个 Syncer 进程,同步 Sharding 数据时则要多个 Syncer 进程。

<center>图 6  Syncer 结构图</center>

使用 Syncer 需要注意:

6.2 流量迁移

流量切换到 TiDB 分为两部分:读、写流量迁移。每次切换保证灰度过程,观察周期为 1~2 周,做好回滚措施。

七、集群状况

7.1 配置

集群配置采用官方推荐的 7 节点配置,3 个 TiDB 节点,3 个 PD 节点,4 个 TiKV 节点,其中每个 TiDB 与 PD 为一组,共用一台物理机。后续随着业务增长或者新业务接入,再按需添加 TiKV 节点。

7.2 监控

监控采用了 TiDB 的提供的监控方案,并且也接入了公司开源的 Falcon,目前整个集群运行比较稳定,监控如图 7。

<center>图 7  监控图</center>

八、遇到的问题、原因及解决办法

九、后续和展望

目前 TiDB 在小米主要提供 OLTP 服务,小米手机负一屏快递业务为使用 TiDB 做了一个良好的开端,而后商业广告也有接入,2 个业务均已上线数月,TiDB 的稳定性经受住了考验,带来了很棒的体验,对于后续大体的规划如下:

十、致谢

非常感谢 TiDB 官方在迁移及业务上线期间给予我们的支持,为每一个 TiDB 人专业的精神、及时负责的响应点赞。

更多 TiDB 用户实践: https://www.pingcap.com/cases-cn/

2587 次点击
所在节点    数据库
7 条回复
zwpaper
2018-12-04 13:24:53 +08:00
标准 OLTP 压测 的图,QPS 的坐标系标错了吧?
Cbdy
2018-12-04 18:44:25 +08:00
最近有实践的打算
Cbdy
2018-12-04 18:51:04 +08:00
@PingCAP 最近打算在内部开发环境搞个集群试试水,tidb 有没有交流群论坛之类的组织呢😳
spongedu
2018-12-04 20:30:24 +08:00
@Cbdy 可以加微信用户群~
ruandao
2018-12-04 21:22:38 +08:00
不是很懂数据库,
所以 TPS 就只有 1k ?
ruandao
2018-12-04 21:23:22 +08:00
Insert 为什么是 QPS, 不应该是 TPS 吗?
Cbdy
2018-12-04 21:31:03 +08:00
我看官方的文档推荐使用 Ansible 部署生产,而不建议使用 Docker 部署生产环境
这是出于什么考虑呢? Docker 部署不是更加方便吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/514098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX