360 x TiDB|性能提升 10 倍,360 如何轻松抗住双十一流量

Stella981
• 阅读 562

「我们已经用起来了」,是我们最喜欢听到的话,简简单单几个字的背后代表着沉甸甸的信任和托付。从今天开始,我们将通过**「相信开放的力量」**系列深度案例分享,从业务的角度,看看一个数据库为各行业用户带来的业务价值。 本篇文章将介绍 TiDB 在 360 网盾业务、智慧商业业务、广告物料数据业务等核心场景的应用与实践。

360 x TiDB|性能提升 10 倍,360 如何轻松抗住双十一流量

以科技为驱动力,让世界更安全更美好

360 公司创立于 2005 年,是中国领先的互联网和安全服务提供商,先后推出 360 安全卫士、360 手机卫士、360 安全浏览器等安全产品。

随着全社会、全行业数字化程度的深化,“大安全”时代加速到来,360 以“让世界更安全更美好”为使命,致力于实现“不断创造黑科技,做全方位守护者”的愿景,随之而来的业务发展也更加全面,包括:政企服务、金融科技、直播、个人服务、智能穿戴等多方面业务。

业务挑战

网盾业务

360 网盾是一款免费的上网保护软件,可以拦截木马、欺诈网站等等保护消费者不受到病毒及虚假网站的欺诈。它的运行机制是会针对每一条 URL 进行分析,经过网址检测系统判别后,能够精准识别出该 URL 属于哪个类别。对有问题的 URL 发布到云,其他安全服务商就可以通过订阅云服务,来检测相关的 URL 是否安全,以向自己用户提供更加安全的网页内容服务。

目前整个网盾业务核心场景可以分为以下四个部分:

  • 网址威胁监测:每天入库 1 亿条数据,8 亿多资源链接数据;

  • 关联分析场景:进行大规模恶意网址、黄赌毒等网站的关联分析;

  • 高速返回:897 亿条数据表,每个场景 100+ 条数的查询需要在 5 秒内返回;

  • 人工运营分析:每天每个人不断反复查询统计、分析。

针对业务爆发式增长的数据量,读写上 MySQL 已经出现瓶颈。例如磁盘空间,虽然可以通过分库分表的方式,拆分出来,但这对业务和 DBA 来说都是不小的工作量;最痛苦的无异于这些大表的改表,对一张大表执行 DDL 的代价是非常大的。总的来说,MySQL 已经无法满足网盾业务需求,这对负责底层数据平台支撑的 360 云平台技术团队提出了新的选型需求。

360 云平台负责对 360 集团各大业务线提供服务支持,涉及的数据库支持方案有:MySQL、Redis、MongoDB、ElasticSearch、Greenplum、PiKA。在经过充分的市场调研后,360 云平台团队决定引入 TiDB 来满足业务这一需求。

360 x TiDB|性能提升 10 倍,360 如何轻松抗住双十一流量

整体架构如上,使用 TiDB 的业务主要有两种:

  • 原有 MySQL 业务迁移。因单机磁盘受限,导致单实例磁盘无法支撑爆炸式增长的数据量,数据比较重要,需要备份和支持 7*24 小时的恢复。这类业务通过 DM 套件来实现无障碍迁移,1TB 的导入时间在 16 小时,如果是比较大的数据源,且 TiDB 是全新集群,可以使用 TiDB Lightning 进行数据导入,速度可以达到 100G/小时。

  • 全新的业务。全新的业务目前全部都会放到 TiDB 中,这种业务数据量一般都会比较大,目前网盾业务有多张表都过 10 亿级别,其中有张表到达了 100亿+。

智慧商业业务

360 智慧商业依托覆盖用户全场景的互联网产品,为企业提供全生命周期服务。通过智能营销、企业服务、创新平台等多元业务布局,满足多维增长需求,全面连接用户与企业,打造共生共长的智慧商业生态,其中互联网广告是流量商业变现的重要途径之一,也是 360 集团重要的营收来源,其中涉及企业服务平台、广告主投放、算法策略、数据工程等多个方向。广告投放过程中实时/离线报表业务以及广告物料投放对广告主来说是最重要、最核心的业务。

广告主实时 & 离线报表业务

广告主的实时报表业务流程:业务数据入 Kafka,一条处理链路是通过 Druid 获取 Kafka 的数据提供实时分析,另一条链路通过 Flink 进行聚合后写入 MySQL 分库分表数据库,然后通过广告主维度提供实时查询需求。

广告主的离线报表业务流程:每天凌晨,数仓从 MySQL 分库分表中抽取前一天的所有数据入 Hive,通过 Spark 或者业务程序统计聚合后将结果数据写入 MySQL 结果表,提供给离线报表平台或者 Console 平台查询。

报表作为广告平台的核心业务,面临的问题如下:

  • 数据量大:总数据千亿级别,单表数据量 1.2~1.5 亿。

  • 响应延时低:需要对用户的任意周期及关键词的查询进行实时反馈。

  • 查询复杂:时间维度、地域、行业、关键词等等,同时满足多样化的展示。

  • 架构复杂:基于 MySQL 的分库分表无法进行全局统计,只能基于广告主 UID 来出明细报表,全局的统计需要引入 Druid 来辅助处理;离线报表需要 Hive 数仓抽取全量数据来实现。

数据库选型:MySQL or TiDB?

360 x TiDB|性能提升 10 倍,360 如何轻松抗住双十一流量

在部署 TiDB 之前,360 曾经尝试过单实例 MySQL 去应对业务需求,测试完后发现单实例 MySQL 压力较大,为了分散写压力,又必须走 MySQL 分库、分表这条老路,而且大数据量下的分库分表,经常需要变动拆分规则,每次规则变动都可能涉及到数据的重新搬迁,并且业务端还需要投入大量的人力去维护路由规则,并且要满足广告主的报表需求需要引入其他的数据库,离线 ETL 每天凌晨对 MySQL 的抽取造成网卡满载,也会影响了凌晨的其他业务操作。

360 x TiDB|性能提升 10 倍,360 如何轻松抗住双十一流量

部署 TiDB 后,TiDB 良好的扩展性完全解决了分库分表的问题,同时经过性能压测,2 小时 1.5 亿的数据存储(TPS:2W/s),整个系统负载完全满足业务需求,通过搭配 TiFlash (TiDB 的实时分析引擎插件),我们可以对合并后的单表进行各种维度的全局以及明细的实时分析,并且实现了离线报表的在线统计,免去了离线数仓这种 T+1 的时效和同步流程,同时还提供金融级别的强一致性保证。

广告物料数据业务

对于广告主而言,在搜索推广中,基于安全、精准、可信赖的新一代搜索引擎360搜索,通过关键词技术匹配,定位目标网民,精准展现企业推广信息,物料创意的作用则是帮助广告主吸引潜客,进而产生转化行为,比如注册、在线提交订单、电话咨询、上门访问等等。

目前 360 广告的物料平台会承载客户制作图片、文字、视频等的信息,支持对推广账户、推广计划、推广组、关键词、推广创意、高级样式各个层级的物料进行上传、下载、导入、导 出、添加、编辑、删除等操作。

在使用 TiDB 之前,点睛物料数据底层使用了 16 套分库 * 4 的 MySQL 架构,每套分库 MySQL 单表已经到达 10 亿,单表数据规模在 370G,对于单库 QPS 过万的 SQL 请求,MySQL 表已经到达性能瓶颈,高峰期频繁抖动,并且新业务想对大表新增字段,由于硬盘空间不足,也不能支持新业务上线。如果继续使用 MySQL ,则需要将目前的 16 套分库拆分成 64 套分库(需要新增约上百服务器),除了新增服务器,迁移和运维成本也非常高。

360 商业化业务线技术团队通过技术选型调研,最终确定了以 TiDB 作为物料平台底层的数据库。目前支撑物料平台的 TiDB 集群规模为 63 个节点,日 SQL请求在 70 亿次以上,在刚刚过去的双十一 QPS 最高达 25 W/s,工作日 99% 的 SQL 请求都在 15ms 以内,响应快、稳定性、扩展性都达到预期。

通过部署 TiDB 收益如下:

  • 成本节约
  1. 相较之前 MySQL 部署模式,节约了 40% 的服务器成本。

  2. 之前是业务维护的分库分表路由规则,现在对于业务来说都是一张表,提升了业务的开发效率,让研发更多的关注在业务上。

  3. 运维成本降低,TiDB 提供丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景,提升了运维效率。

  • 性能提升
  1. 618、双十一 QPS 最高能到 25 W/s,工作日 99% 的 SQL 请求都在 15 ms。

  2. 相对于基于 VIP 切换的 MySQL 主从架构,TiDB 的可用性超过 99.95%。

  3. 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容,吞吐跟存储都可以在线平滑扩容,数据库扩展能力提升了 1~2 个数据量级。

未来,360 技术团队也计划将 TiDB 推上 360 HULK 云平台,为 360 集团安全大脑、360 游戏、核心安全服务平台等更多业务线提供稳定可靠的数据库服务。

与客户同行,相信开放的力量

每次数据库架构改善与落地,无论是 TB 级还是 PB 级,都需要付出努力,但这也值得每一个企业去实践。在当下这个时代,不管企业的规模如何,都要学会借助开源的力量,避免去重复的造轮子。 每一个看似轻松的背后都有不为人知的努力,每一个看似光鲜亮丽的背后,都有不为人知的付出。分布式数据库建设之路道阻且长,TiDB 愿与 360 及每个客户一起,携手并肩把事情做好。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
TiDB x 吉林祥云|打破数据孤岛,TiDB 联手吉林祥云推动政务数字化转型
「我们已经用起来了」,是我们最喜欢听到的话,简简单单几个字的背后代表着沉甸甸的信任和托付。我们将通过「相信开放的力量」系列深度案例分享,从业务的角度,看看一个数据库为各行业用户带来的业务价值。本篇文章将介绍TiDB在吉林祥云政务大数据平台的应用与实践。!(https://oscimg.oschina.net/oscne
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这