Cisco Webex 在成立之初,便致力于将世界各地使用网络的人聚拢起来,协同创意并开展业务,使用户能够实现基于融合实时视频和音频的技术进行扩展学习、专题活动和多媒体演示,省去传统会议的时间和开销。如今,Webex 已成为世界头号网络会议供应商。
使用 TiDB 的业务场景
TiDB 目前是 Webex 比较核心的数据库系统,现在承载的不仅有面向最终用户的项目,同时也有很多面向内部运营和管理的项目。
本节将主要介绍四个上线 TiDB 的项目:People Insight、Meeting Revamp、Canned Report 和 OneView,其中前三个是面向最终用户的项目。
People Insight
People Insight 是 Webex 的新功能。通过 People Insight 的分析页面,用户可以了解使用 Webex 的情况,比如在一个时间段内,开会的数量,在这些会议中与多少人产生了联系或交集、与哪些人的交集更加密切,又有哪些人升级了产品或改变了地理位置等等。从这个业务的特点可以看出,数据不仅要满足每个个体的查询需要,还需要把每个用户在这一段时间所有的交互信息全部保存起来。
上线 TiDB 之前
People Insight 项目在上线 TiDB 之前,使用的是 BI 软件 Qlik。如前文所讲,People Insight 的功能是要把数据展示给用户看,但之前使用 Qlik 的时候就非常受制于软件本身。在使用时,我们需要把所有的数据全部存储在 Qlik 里,每一个站点就是一个全索引的 table,然后每一个 table 放在软件的磁盘里。当需要用到数据的时候,Qlik 就会把数据从磁盘读到内存里,然后再供用户进行多维度的分析和展现。
遇到的问题
这个解决方案存在一个很大的问题就是等待时间过长。Webex 通常会保存 13 个月的历史数据,而我们的一些大客户拥有的数据量非常大,所以每一次当用户打开 People Insight 分析页面时,要等待 Qlik 把数据从硬盘读到内存里,这就导致等待时间过长。而且,无论我们如何优化,用户都需要等一两分钟才能看到他们的数据,可想而知用户体验非常差,这也是我们不能接受的。
上线 TiDB 后
为解决等待时间过长的问题,我们又提出了一个新的解决方案,就是把所有的数据全部都预聚合好,再在它之前放一层 Redis 的缓存,这样一来用户查询数据的速度就会非常快,而且用户体验相较之前也大大提升。后来,我们就把这个业务上线到了 TiDB。所以 People Insight 是 TiDB 在 Webex 上线的第一个数据库。
我们把用户所有的交互信息全部存储在 TiDB 上,每次用户打开分析页面的时候就会查询 TiDB 数据库。在 TiDB 高性能查询特性的支持下,实时的统计结果很快就可以得到并展现出来。在 People Insight 这个项目上面我们有四张大表,最大的一张表有 800 GB 的容量并且单表可达 40 亿条数据,存储的是访客级别的数据。目前,日独立访问人数可达 5,000 个,每天 API 的请求数可达 50,000 个,到现在为止访问量已经超过了 250,000。这里所展示的仅是在美国地区业务的数据,之后该功能上线加拿大和欧洲地区后,也都会建立这样的大表。
Meeting Revamp
Meeting Revamp 是我们上线 TiDB 的第二个面向最终用户的项目。我们的处理方法和 People Insight 一样,也是把所有生产线上用户比较在意的 metrics 聚合好之后存在 TiDB 里供用户使用,这里就不赘述了。
Canned Report
Canned Report 也是一个面向最终用户的项目,目前它只有部分功能和部分报表使用了 TiDB。另外, Canned Report 的元数据是存储在 TiDB 上,供用户查询和下载。
OneView
Webex 上线 TiDB 的另外一个业务是我们的一个内部数据分析门户平台 OneView。OneView 的目的是把所有内部重要的、高级别的 metrics 保存下来,以供我们通过各种时间维度去观察这些核心指标是否有很显著的变化,帮助公司运营和决策。目前,在 OneView 这个项目里,我们把所有的元信息和应用数据全部存储在 TiDB 中。
在上线 TiDB 之前,OneView 的数据是全部都存储在 Oracle 里,但在使用过程中给我们带来了很多的痛点。
虽然 Oracle 有很多函数也非常好用,但首先的一个问题就是 Oracle 的数据库非常昂贵,这在一定程度上增加了我们的业务成本,也使业务的扩展受到了限制。
第二个问题是 Oracle 并不是开源数据库,掌控权不属于我们,这给我们数据库的管理和沟通带来困难。
第三个问题是 Oracle 的大表查询瓶颈。当一张数据库表的行数达到千万级别时,经常会出现查询耗时过长或者查询超时的情况。
最后, Oracle 还有一个大的弊端。我们的数据有很多 Upsert 的需求。原来在使用 Oracle 时,要使用 MERGE WHEN MATCHED 功能,语句比较复杂,容易出错。而 TiDB 可以很容易地实现 Upsert,语句大大简化,这对我们来说就很友好。
由于以上的痛点,我们不得不调研新的数据库解决方案去替换 Oracle,而我们的选择就是 TiDB。
以查询速度为例,在 Hybrid Working Insights 这个 Dashboard 里,我们把 Meeting、Messaging 和 Calling 等超过一年的数据全部都存储在 TiDB 里。不负所望, TiDB 查询速度非常快,1 秒以内就可以把所有的图全部读出来,而这个速度是之前使用 Oracle 时没法比的。
为什么选择 TiDB
前面讲到了 Webex 使用 TiDB 的业务场景,接下来就和大家分享我们最终选择 TiDB 并不断在 TiDB 上线新业务的一些原因,或者说于我们而言 TiDB 的整体优势:
- TiDB 存储计算分离的架构设计。使用者可以很容易地按需对计算和存储资源分别进行在线扩缩容,而且这个过程对应用开发和运维人员透明。
- TiDB 对于海量数据的高性能读写。我们在使用 TiDB 之前也做过很多性能测试以及稳定性方面的读写测试对比,得到的结论就是 TiDB 的高并发、可扩展、无上限的写入和查询能力表现令我们非常满意,完全可以达到我们的要求。
- 方便易用的集群控制工具。 TiDB 的管理工具非常容易使用,使得运维非常容易,极大降低了运维成本。
- MySQL 兼容性。TiDB 使用的是 MySQL 的 Driver,开发或迁移的成本很低。同时 TiDB 支持的功能也比较丰富,尤其是对我们最重要的 Join 和 Subquery 等功能与 MySQL 保持了非常高的兼容性,对我们帮助很大。
- 完善的中英文文档。在进行初期的数据库调研时,我们就在网上看到了关于 TiDB 的文档。经过一番查看和研究,我们发现 TiDB 的文档非常完善,内容丰富且易上手,这对于我们跨全球协作的工程师团队来说非常重要,使得我们接入业务非常快。
- 最后一点很重要的原因就是开源。TiDB 一直坚定地走开源路线,采用宽松的 Apache 开源许可证,一方面我们自己可以对数据库的正确性、稳定性和性能有把握,不受制于软件;另一方面使用开源软件也可以帮我们节省很大一部分费用,这些开源的好处都是像 Oracle 和 Qlik 等软件不支持的。
所以,在综合考虑技术架构的生态系统、开源社区的支持、优质的文档以及 MySQL 的兼容性等因素后,Webex 决定选用具有高可用性的云原生数据库方案 TiDB 去承载这几项业务。
在 Webex 中 TiDB 集群的部署及使用情况
在 Webex 中,已搭建的规模比较大的 TiDB 集群有 6 套,其中在美国搭建了 2 套,一主一备。每套集群中部署 3 个节点的 TiDB 及 9 个节点的 TiKV。现在每套集群的总容量是 22 TB,后续还会继续增加。
我们在欧洲的法兰克福和阿姆斯特丹也搭建了 2 套集群,目前每套集群的总容量是 20 TB。现在正在搭建加拿大的 2 套集群,每套集群的总容量为 21 TB。
美国业务的查询情况
下图所示为 Webex 在美国的生产线上正在使用业务的查询情况。当前平均 QPS 查询为 668,最高峰值可以达到 2,000 以上。
在当前 QPS 的情况下,TiDB 的性能表现非常好,在 80% 分位的查询时间是 6.18 毫秒,在 99.9% 分位为 640 毫秒,不会超过 1 秒钟。
美国业务的写入情况
目前,TiDB 在 Webex 一周的平均写入数据速度可以达到 21 MB 每秒,峰值可以达到 500 M+ 每秒。
TiDB 为 Webex 业务提升带来的好处
业务性能层面
相较于 Webex 之前所采用的数据库解决方案,TiDB 的技术优势让我们明显地感受到业务层面的性能比之前有很大的提升。之前给用户展示可能需要 20 秒左右才能打开页面,但现在打开页面基本无延时,1 秒以内就可以将数据呈现给用户。此外,还要向大家介绍几个很棒的 TiDB 功能,比如上文提到的 Upsert 功能,其简化的语句帮我们解决了很多问题。 TiCDC 增量数据同步工具,它支持创建多个同步任务,向多个不同的下游进行数据同步。之前我们使用 MyCAT 时还要自己做一套 CDC 的机制,去做双 DC 的数据同步。但 TiCDC 原生支持增量数据同步至下游数据库,并且支持超大规模集群的水平扩展,对我们的业务帮助很大。另外,TiDB Dashboard 也是一个很好用的工具,其中的慢查询的页面访问显示非常方便,可以帮我们定位有潜在问题的查询语句,快速分析和优化 SQL 语句执行的性能问题。整体而言,TiDB 的功能和工具都很易于上手,且技术支持也很到位,对我们的业务性能提升帮助很大。
业务推广层面
在业务推广层面,TiDB 可以帮助我们更快地上线业务,从而可以加快我们的业务推向市场的速度。TiDB 的弹性扩容可以让我们获得在不同业务负载下的持续高性能。最初要预先加工聚合数据的处理流程,直接把原始数据存储到 TiDB,然后在用户请求时进行关联和聚合查询,获得很不错的查询性能。这样一来,用户得到完全实时的数据统计,同时开发和运维复杂度的降低使得后续新功能的开发速度得以加快、更加敏捷,后续我们再持续进行优化和推广。这样敏捷的开发与运维对于我们快速抢占市场是非常高效的。
未来计划
TiDB 的开源属性是其本身的一大亮点,非常具有吸引力,而它开源社区的成熟度和活跃度也是我们坚定使用 TiDB 的一个重要原因。在未来,我们希望可以与 TiDB 社区有更多的合作,也可以以个人的身份更多地参与到 TiDB 开源社区中,为我们的业务提升也能助一把力。