13 万亿条数据查询如何做到毫秒级响应?.docx





《13 万亿条数据查询如何做到毫秒级响应?.docx》由会员分享,可在线阅读,更多相关《13 万亿条数据查询如何做到毫秒级响应?.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.3万亿条数据查询,如何做到毫秒级响应?;:亿行数据且不断增长,这一数字将在两年内达到3万亿。在保持良好用户体验的同时,我们在扩展后端方面面临严峻挑战。在这篇文章中,我将深入探讨如何在如此大量的数据上保持毫秒级的查询响应时间,以及TiDB是一个开源的MySQL兼容的NewSQL混合事务/分析处理(HTAP)数据库,如何为我们提供支持获得对我们数据的实时洞察。我将介绍为什么我们选择TiDB,我们如何使用它,我们学到了什么,优秀实践以及对未来的一些想法。#我们的痛点本节介绍了我们的Moneta应用程序的体系结构,我们尝试构建的理想体系结构,以及数据库可伸缩性作为我们的主要难点。系统架构要求知乎的
2、PostFeed服务是一个关键系统,用户可以通过该系统接收网站上发布的内容。后端的Moneta应用程序存储用户已阅读的帖子,并在知乎的推荐页面的帖子流中过滤掉这些帖子。Moneta应用程序具有以下特征:需要高可用性数据:PostFeed是第一个出现的屏幕,它在推动用户流量到知乎方面发挥着重要作用。处理巨大的写入数据:例如,在高峰时间每秒写入超过4万条记录,记录数量每天增加近30亿条记录。长期存储历史数据:目前,系统中存储了大约1.3万亿条记录。随着每月累积约1000亿条记录并且不断增长,历史数据将在大约两年内达到3万亿条记录。处理高吞吐量查询:在高峰时间,系统处理平均每秒在1200万个帖子上执
3、行的查询。将查询的响应时间限制为90毫秒或更短:即使对于执行时间最长的长尾查询,也会发生这种情况。容忍误报:这意味着系统可以为用户调出许多有趣的帖子,即使有些帖子被错误地过滤掉了。考虑到上述事实,我们需要一个具有以下功能的应用程序架构:高可用性:当用户打开知乎的推荐页面时,找到大量已经阅读过的帖子是一种糟糕的用户体验。出色的系统性能:我们的应用具有高吞吐量和严格的响应时间要求。易于扩展:随着业务的发展和应用程序的发展,我们希望我们的系统可以轻松扩展。勘探为了构建具有上述功能的理想架构,我们在之前的架构中集成了三个关键组件:代理:这会将用户的请求转发给可用节点,并确保系统的高可用性。缓存:这暂时
4、处理内存中的请求,因此我们并不总是需要处理数据库中的请求。这可以提高系统性能。存储:在使用TiDB之前,我们在独立的MySQL上管理我们的业务数据。随着数据量的激增,独立的MySQL系统还不够。然后我们采用了MySQL分片和MasterHighAvailabilityManager(MHA)的解决方案,但是当每月有1000亿条新记录涌入我们的数据库时,这个解决方案是不可取的。#MySQLSharding和MHA的缺点MySQL分片和MHA不是一个好的解决方案,因为MySQL分片和MHA都有它们的缺点。MySQL分片的缺点:应用程序代码变得复杂且难以维护。更改现有的分片键很麻烦。升级应用程序逻辑
5、会影响应用程序的可用性。MHA的缺点:我们需要通过编写脚本或使用第三方工具来实现虚拟IP(VIP)配置。MHA仅监视主数据库。要配置MHA,我们需要配置无密码安全Shell(SSH)。这可能会导致潜在的安全风险。MHA不为从属服务器提供读取负载平衡功能。MHA只能监视主服务器(而不是从主服务器)是否可用。在我们发现TiDB并将数据从MySQL迁移到TiDB之前,数据库可伸缩性仍然是整个系统的弱点。#什么是TiDB?TiDB平台是一组组件,当它们一起使用时,它们将成为具有HTAP功能的NewSQL数据库。在TiDB平台内部,主要组件如下:TiDB服务器是一个无状态的SQL层,它处理用户的SQL查
6、询,访问存储层中的数据,并将相应的结果返回给应用程序。它与MySQL兼容并且位于TiKV之上。TiKV服务器是数据持久存在的分布式事务键值存储层。它使用Raft共识协议进行复制,以确保强大的数据一致性和高可用性。TiSpark集群也位于TiKV之上。它是一个ApacheSpark插件,可与TiDB平台配合使用,支持商业智能(BI)分析师和数据科学家的复杂在线分析处理(OLAP)查询。放置驱动程序(PD)服务器是由etcd支持的元数据集群,用于管理和调度TiKV。除了这些主要组件之外,TiDB还拥有一个工具生态系统,例如用于快速部署的Ansible脚本,用于从MySQL迁移的Syncer和TiD
7、B数据迁移。以及用于收集对TiDB群集进行的逻辑更改并提供增量备份的TiDBBinlog。复制到下游(TiDB,Kafka或MySQL)。TiDB的主要功能包括:水平可扩展性。MySQL兼容的语法。具有强一致性的分布式事务。云原生架构。使用HTAP进行最小提取,转换,加载(ETL)。容错和Raft恢复。在线架构更改。#我们如何使用TiDB在本节中,我将向您展示如何在Moneta的架构中运行TiDB以及Moneta应用程序的性能指标。我们架构中的TiDB知乎的Moneta应用程序中的TiDB架构我们在系统中部署了TiDB,Moneta应用程序的整体架构变为:顶层:无状态和可伸缩的客户端API和代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 13 万亿条数据查询,如何做到毫秒级响应? 万亿 数据 查询 如何 做到 毫秒 响应

限制150内