01.知乎安全反作弊业务数据特点
知乎作为中文互联网上以高质量内容著称的头部社区,其持续健康发展离不开一套严格的安全反作弊审核机制。为了确保内容的质量和提升用户体验,知乎的安全反作弊系统能够高效检测出自动生成的内容、无意义的评论以及异常账号活动等可疑行为,从而有效保护社区免受垃圾信息和恶意行为的侵害。
面对每天海量且结构复杂多变的数据,知乎安全反作弊系统需要进行实时深入分析。为此,知乎选择了MongoDB数据库来存储这些数据。MongoDB以其灵活的JSON数据结构和强大的分布式扩展能力,能够很好地应对数据结构的变化和存储容量的增长需求。
此外,根据数据的时效性和处理场景的不同,知乎将数据分为“热数据”和“温数据”,并分别存储在不同的MongoDB数据库集群中。通过ETL(提取、转换、加载)流程,实现数据与下游系统的无缝对接。MongoDB集群的稳定性对于整个安全反作弊系统至关重要,是保障知乎社区健康发展的坚实基础。
02.自运维MongoDB集群面临的挑战
随着知乎社区的蓬勃发展,帖子、评论和用户行为等数据量急剧增加,现有的基于服务器自建MongoDB集群的支持能力逐渐遇到瓶颈,给业务发展带来了隐患,其中主要面临以下四个问题:
▶︎ 存储空间快速上涨带来的持续节点扩容问题:业务的持续增长导致安全反作弊系统的存储需求不断增加,单台服务器的磁盘容量很快达到上限。为了应对这一挑战,需要频繁地手动增加集群节点,以扩展存储容量。
▶︎ 数据规则设置不合理导致的热点分片问题:当前集群通过人工打标签的方式,将不同操作类型和时间段的数据分配至相应的集群节点。然而,由于集群性能瓶颈,数据平衡速度较慢,导致实际数据分布与预期严重不均衡。大部分业务请求集中在少数几个分片上,形成了“热点分片”,进一步恶化了集群性能。
▶︎ 备份间隔越来越长,数据丢失风险大:为保障数据安全,知乎定期进行数据备份,以便在出现问题时能够迅速恢复。但随着数据量的增加,备份所需时间也随之延长,迫使知乎不得不减少备份频率,从最初的几天一次延长至几周一次,这大大增加了数据丢失的风险。
▶︎ 运维操作频繁,稳定性风险大:为解决上述数据存储和管理问题,知乎的运维团队每天需执行大量复杂的运维任务,如扩展集群、数据备份和恢复,以及手动调整数据分布等。这些工作不仅耗费了大量的时间和人力资源,还可能对系统的稳定性造成影响。
这些问题不仅制约了知乎安全反作弊系统的稳定,也对整个社区的健康运行构成了威胁。因此,优化现有的数据管理和存储方案,提升系统的稳定性和效率,已成为当务之急。
03.云上MongoDB服务最佳解决方案
为了解决自建MongoDB集群的各种技术痛点,知乎技术团队与阿里云技术专家进行了深入讨论,并提出了以下合理的解决方案:
▶︎ 解耦存储和计算资源,优化数据分布策略:为了更好地适应业务发展中存储和计算需求的不均衡增长,我们需要将存储和计算资源解耦。这样可以独立扩展存储和计算能力,避免因资源不匹配而导致的分片过度增长。针对当前数据分布不均衡的问题,建议从依赖标签规则的被动调度模式转变为高版本基于Chunk的主动预分片模式。在集群数据迁移过程中重新调整规则,以实现更优的数据分布。
▶︎ 快速灵活应对业务请求负载波动,确保实例性能稳定:通过对集群性能瓶颈的分析发现,关键性能指标主要集中在存储的IOPS(每秒输入/输出操作数)上。为了在业务高峰期间保持性能稳定,同时避免集群资源的闲置浪费,建议采用支持存储性能弹性伸缩的方案。这种方案允许我们在业务需求增加时快速提升存储的IOPS上限,而在业务低谷时则可以缩减,从而实现成本效益最大化。
▶︎ 基于快照备份保证备份恢复效率和数据的可靠性:目前自建集群采用的传统物理备份方法由于数据量和增量数据恢复速度的限制,已经无法满足知乎大规模数据体量的快速备份和恢复需求。建议转向基于云盘架构的快照备份模式来解决这个问题。此外,阿里云MongoDB数据库提供的高频备份能力,可以将备份频率从每日一次提升至每15分钟一次。结合实例、库、表、行等更细粒度的恢复能力,最大限度地保障了数据的安全性和备份恢复的性能。
综合上述讨论的升级方向,最终选择阿里云瑶池旗下的云数据库MongoDB的云盘版本(ESSD云盘+AutoPL弹性性能)和快照备份方案,替换现有的自建MongoDB集群。这一方案能够有效解决当前集群面临的各类技术痛点和风险问题,确保系统的稳定性和高效运行。
04.MongoDB迁移方案技术挑战
方案看起来很美,但如此大规模的集群平滑迁移并非易事。本次MongoDB集群上云的数据总容量达数百TB,并且支撑的安全反作弊业务对社区平台至关重要。在割接迁移环节,我们仅有分钟级的时间窗口,不容有失。针对这些挑战,项目团队基于以下几大迁移原则,制定了详细的迁移计划,确保迁移过程平稳可控:
迁移过程减少外部变量:安全反作弊数据库架构现有的上下游数据链路非常复杂。在迁移过程中引入新MongoDB集群和数据传输服务DTS时,如果割接顺序稍有不慎,可能会导致上下游数据不一致。因此,在迁移方案设计中,项目组将MongoDB集群迁移和ETL上下游链路切换分开到不同的割接窗口期,避免集中割接带来的复杂性和风险。
迁移同步速率灵活可控:由于集群数据规模庞大,对迁移速率的要求非常高。同时,需要时刻关注迁移速率对源库引入的额外负载压力,以避免生产问题。因此,迁移过程中的速率动态可调显得尤为重要。阿里云DTS数据同步工具支持无感升降配,实现了在保障源库不受影响的情况下最高数据同步速率。
迁移执行流程脚本化:割接操作不仅流程多,而且需要批量启停DTS数据同步任务。为了确保在分钟级的时间窗口内完成割接,项目组将关键操作全部脚本化。这样不仅大幅缩短了割接操作时间,将原本需要10~20分钟的人工操作提升到秒级自动操作,还能确保割接演练的所有动作可以在正式割接中1:1复现,避免人为事故的发生。
提前预演并做好紧急预案:稳定割接的前提是提前识别可预见的问题,并为不可预见的问题准备预案。我们在割接前对割接脚本进行了多次预演,事实证明预演是有效的。通过预演,我们识别了诸如MongoDB Driver连接串更新不生效等诸多潜在问题,避免了正式割接中的意外发生。此外,还准备了完善的回滚计划,以应对无法预知的突发事件。
05.迁移上云后的收益
整体迁移工作从启动到全部集群迁移完成耗时一个半月,历经四次关键割接,最终实现了全程业务0故障的平滑迁移。特别值得一提的是,对于这个拥有数十个分片、数据总量达数十TB、单表最大行数超过百亿的超大规模MongoDB集群,借助阿里云DTS数据传输服务,仅用2天时间就完成了全量数据的同步任务。这一成就离不开知乎和阿里云双方技术团队的紧密配合,严谨地做好每一次方案设计和迁移验证工作。
资源成本节省:采用基于云原生架构搭建的阿里云MongoDB数据库分片集群架构,相比本地盘可以更灵活地进行计算资源和存储空间的配比,实现投入产出显著提升。
运维工作提效:通过一站式的云数据库管理平台,大大减少了运维人员的工作量。运维人员不再需要关注底层操作系统、基础软件等部署和基础维护工作,从而能够更加专注于核心业务。
技术难题解决:使用阿里云MongoDB数据库服务获得了阿里云数据库团队和MongoDB原厂联合的技术支持。不仅通过本次迁移解决了数据分布不均等历史难题,还为快速应对未来业务变化可能带来的新问题提供了新的技术保障能力。
高可用性提升:从自建单机房迁移到阿里云MongoDB数据库三可用区部署架构上,大幅提升了集群的容灾能力。同时,利用云数据库MongoDB的数据备份和恢复功能,进一步保障了数据的可靠性。
06.客户原声
知乎技术团队作为互联网行业内顶尖的技术团队,一直以来在开源技术圈内享有很高的技术口碑。本次项目是知乎多年来第一次将自己的核心业务系统,构建在公共云的云原生技术产品之上。
在MongoDB上云项目结束后,知乎数据库负责人代晓磊有感而发:“本次迁移上云的是公司最核心的业务之一,从第一次接触阿里云团队开始,整个项目过程中阿里云所展现的专业能力和负责态度,让我们非常放心。”这是对以稳定、高效、性能为核心指标的阿里云数据库产品,给予高度的肯定和鼓励。
👉点击了解 云数据库MongoDB 更多内容