全球最大职业社交平台 LinkedIn 为何将 TiDB 应用于大规模服务系统
作者: 数据源的 TiDB 学习之路原文来源:https://tidb.net/blog/5445e297
LinkedIn,中文名 “领英”,作为全球领先的职业社交平台,自 2003 年成立以来,其影响力和用户规模不断扩大,已成为全球职业人士交流、寻找职业机会、建立专业人脉的重要渠道。据 LinkedIn 工程师 Ashish Singhai 介绍,当前 LinkedIn 全球用户数已经超过 10 亿,覆盖全球 67M+ 企业、41K+ 技能标签、 133K+ 学校,这些数字进一步印证了 LinkedIn 在全球范围内的广泛影响力和深度渗透。
LinkedIn 面临的挑战
庞大的用户体量导致海量的数据产生,这些数据包括但不限于用户的基本信息(如姓名、年龄、性别、地理位置等)、行为数据(如浏览记录、点击行为、购买记录、搜索关键词等)、交互数据(如评论、点赞、分享、私信等)以及传感器数据(如通过智能设备收集的健康数据、环境数据等)。这些数据不仅数量庞大,而且种类繁多、结构复杂,既有结构化数据(如数据库中的表格数据),也有非结构化数据(如文本、图片、视频、音频等)。
LinkedIn 企业内部的数据规模是一个庞大且不断增长的数字,根据公开发布的信息和一些趋势分析,我们可以对 LinkedIn 的数据规模有一个大致的了解:
峰值请求数高达 255 万 笔 / 秒
日均发送 Kafka 消息数达到 45 T
在线业务系统(online system)承载数据量达到 百 PB 级别
数据湖(datalake)承载数据量达到 EB 级别
海量数据的产生给 LinkedIn 的相关系统带来了巨大的挑战,这些挑战涉及数据存储分析、高可用性、多租户以及 t 稳定性等多个方面。
海量数据挑战。首先需要解决海量数据存储的问题;其次,需要具备实时数据处理的能力,比如快速处理用户请求、更新用户状态、推荐职位等;在数据分析上,能够做到从海量数据中提取有价值的信息和洞察,以支持业务决策和优化用户体验。
高可用性挑战。系统在面对各种故障时能够持续提供服务的能力,高可用性的标准需要达到“6 个 9”,即每年停机时间不超过 49 秒。
多租户挑战。当多种不同负载共享同一集群时,相互之间不会造成影响,可保证不同租户之间的资源隔离、数据隔离等要求。
稳定性挑战。在持续变化的操作环境中,面对复杂的负载变化、硬件故障、环境部署及升级等方面问题,需要保证对业务基本无感知。
为了应对这些挑战,LinkedIn 过去在基础环境上必须采用基于多数据中心的大规模服务系统来满足要求:
多地理位置的数据中心布局。LinkedIn 在全球多个地理位置建立了数据中心,以确保数据存取的快速响应和灾难恢复能力。这种布局不仅提高了数据的可用性,还减少了因单一地区故障导致的服务中断风险。
大规模服务系统。LinkedIn 使用成百上千台服务器来支撑其海量数据的存储和处理需求。这种大规模的服务器集群提供了强大的计算能力和存储容量。
大规模服务系统的特点
一个典型的大规模服务系统通常至少包含以下几个特点:
支持多个大型数据集加载到系统中,并提供查询服务
支持任意连接(joins)和索引查找(indexed lookups),数据量和查询量可以独立扩展,如能支持 500 万 QPS 和 5PB 数据量
支持常规功能,如快速批量加载、读取扩展、跨区域复制,同时不影响读取延迟
另外,在系统的生命周期中,尤其是长期运行时,运营成本(如维护、升级、能源消耗、人力成本等)通常会超过初始的购置或建设成本,成为系统总成本的主要组成部分。因此,在设计和规划系统时,需要充分考虑如何降低长期的运营成本,以确保系统的经济性和可持续性,至少实现以下目标:
系统在长期运行过程中需要保持连续性和稳定性,同时尽量减少人工干预。由于大型部署中硬件故障是不可避免的(固态硬盘的年平均故障率(AFR)约为 0.44%),因此需要持续进行维护活动来确保系统的正常运行,包括升级操作系统和依赖项、扩展集群容量、升级硬件以及部署新的软件版本等。通过这些措施,可以确保系统在长期运行过程中保持高效和稳定。
系统在面对各种干扰时,需要保持其关键特性和不变性。系统必须确保数据的完整性,不允许出现任何数据损坏或丢失的情况。对于计划内的干扰(如系统升级、维护等),系统应该能够确保用户的性能不会受到任何可见的影响。最后,对于计划外的干扰(如硬件故障、网络问题等),系统应该能够优雅地降级其功能,并在可能的情况下自我修复,以最小化对用户的影响。
LinkedIn 为何使用 TiDB 在大规模服务系统
LinkedIn 在应对海量数据带来的业务挑战过程中,采取了多种策略和技术手段来确保数据的有效管理、高效处理和业务价值的最大化。考虑到 TiDB 在大规模服务系统中的广泛适用性,以及 LinkedIn 对高性能、高可用性和可扩展性的需求,LinkedIn 在大规模服务系统中开始大面积的使用 TiDB。具体而言,LinkedIn 利用 TiDB 以下多方面的能力来解决现有业务中的挑战:
高可扩展性
分布式架构:TiDB 采用分布式架构,能够轻松地将数据分布在多个节点上,实现水平扩展。这种能力对于 LinkedIn 这样需要处理海量数据的公司来说至关重要,因为它可以随着业务增长而平滑地增加存储和处理能力。
弹性扩容:TiDB 支持对不同组件进行弹性扩容,如计算能力不足时可以扩容 TiDB Server,存储能力不足时可以扩容 TiKV 节点。这种灵活性使得 LinkedIn 能够根据需要快速调整资源分配,以应对负载变化。
高可用性
多副本机制:TiDB 采用多副本机制,确保数据备份到多个节点,从而提高系统的可用性。在硬件故障或单点故障发生时,系统能够自动切换到其他节点上,保持服务的连续性。
跨区域部署:TiDB 支持跨区域部署,可以在多个地理区域进行数据复制和冗余。这对于 LinkedIn 这样的全球化公司来说非常重要,因为它可以实现数据的备份和灾备,提高系统的可靠性和容灾能力。
强一致性
Raft 一致性协议:TiDB 采用 了 Raft 一致性协议,能够保证数据的强一致性。这对于 LinkedIn 这样的服务系统来说至关重要,因为它需要确保用户在任何时间、任何地点都能获取到一致的数据。
多租户能力
资源管控:TiDB 利用资源管控能力能够将一个分布式数据库集群划分成多个逻辑单元,个别应用的负载升高,不会影响其他业务的正常运行。
高并发读写能力
高并发支持:TiDB 适用于高并发读写的场景,如在线交易系统、电商网站等。LinkedIn 作为一个社交和招聘平台,需要处理大量的用户请求和数据交互,TiDB 的高并发能力可以满足其业务需求。
HTAP 能力
HTAP:TiDB 支持列存储引擎 TiFlash,结合行存储引擎 TiKV 构建真正的 HTAP 数据库,在增加少量存储成本的情况下,可以在同一个系统中做联机交易处理、实时数据分析,极大地节省企业的成本。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/bbf6487a36cb9527a75aa289d】。文章转载请联系作者。
评论