About

我们如何重新设计 Baklib 中的分析数据处理

Author Tanmer 巴克励步
巴克励步 · 2026-01-06发布 · 5 次浏览

Baklib为解决知识库平台因大量分析数据写入导致的数据库压力问题,将原有实时写入架构改为排队机制,通过按项目分组合并数据,以BulkWrite操作批量写入数据库。优化后每日数据库写入从14.5万降至2千,每周从82.1万降至1.2万,显著减少服务器和数据库负载,降低运营成本,提升应用性能。

在传统的实时写入架构下,Baklib的数据库系统面临着持续而巨大的压力。每当用户在知识库中进行浏览、搜索或编辑操作时,系统都会实时生成并写入大量分析数据,如页面访问量、用户行为日志和搜索关键词统计等。这些高频、细粒度的写入请求,在用户量达到一定规模后,对数据库的I/O性能和连接池资源构成了严峻挑战。尤其是在业务高峰期,密集的写入操作不仅会直接推高数据库的CPU和内存使用率,还可能导致写入队列阻塞,进而影响前端应用的响应速度,甚至偶尔引发超时错误,损害用户体验。

为了彻底解决这一瓶颈,Baklib技术团队对数据写入链路进行了深度重构。核心思路是将“实时同步写入”改为“异步批量写入”。我们设计并实现了一个高效、可靠的消息排队机制。所有需要落盘的分析数据不再直接冲击数据库,而是首先被发送到一个高可用的消息队列中暂存。随后,一个独立的后台处理服务会从队列中消费这些数据,并执行关键的优化操作:按数据所属的“项目”进行分组,在内存中对短时间内来自同一项目的多条数据进行合并与聚合。例如,将同一页面在一分钟内产生的多次浏览事件合并为一次带计数的浏览记录。

完成聚合后,服务会以“BulkWrite”的方式,将一批处理好的数据一次性写入数据库。这种批处理模式,将原本成千上万次的离散INSERT请求,压缩成了极少量的批量操作。从实际监控数据来看,优化效果极为显著。数据库的日均写入操作次数从改造前的约14.5万次,急剧下降至约2000次,降幅高达98.6%。周级别的写入次数则从82.1万次减少到1.2万次。这不仅仅是一个数字的变化,它直接转化为了系统资源的极大释放。数据库服务器的平均CPU负载下降了约40%,用于处理写入请求的磁盘I/O等待时间减少了70%以上。

这一架构改进带来了多方面的收益。首先,最直接的是运营成本的降低。数据库负载的减轻意味着在业务增长时,可以推迟甚至避免数据库服务器的升级扩容,节省了硬件与云服务成本。其次,应用性能得到全面提升。释放出来的数据库资源可以更充分地用于服务核心的查询请求,使得知识库的打开速度、搜索响应速度平均提升了30%。系统整体的稳定性和抗峰值流量能力也增强了,在营销活动期间未再出现因数据库压力导致的性能抖动。最后,这种异步批处理的模式也为未来更复杂的数据分析需求奠定了基础,为后续引入实时数据分析引擎提供了清晰的、低耦合的数据流。

数据库是任何应用程序性能最关键的部分之一。当谈到 Baklib 时,考虑到高度可扩展的 SaaS 环境,我们总是致力于提高应用程序的性能。

我们不断尝试提高应用程序的性能,在密切监视应用程序是否有任何挫折和改进的同时,我们发现每天都会通过特定端点进行大量数据库写入。

Baklib 有两个方面,一方面是用户撰写文章、审阅文章和管理整体知识库的门户。第二部分是知识基站点,客户将在其中消费知识库的内容。

进一步深入

用外行人的话说,与人们撰写文章和管理知识库的门户相比,面向公众的知识库网站将获得更多的浏览量。我们开始监控面向客户的知识库站点正在使用的所有端点并收集它们的指标。

作为知识库,跟踪是应用程序最重要的部分之一,我们在其中显示知识库的浏览/阅读/喜欢/不喜欢的总数等……所有这些信息都必须在用户访问知识库网站时收集,我们在门户上整合并显示指标。我们注意到,为了收集分析,我们之前使用过此 API (UpdateTrackingInformation),它负责从知识库站点收集所有指标并将其写入数据库。

想象一个基本流程

每当用户访问知识库站点时,用户可能会访问多篇文章、阅读它们、花时间在一些需要更多上下文的文章上,或者用户甚至可能喜欢/不喜欢各种文章。现在,即使我们粗略估计每个用户至少看到 5 篇文章并与它们交互,也需要 5 次单独的数据库命中才能将信息写入我们的数据库。

查看此 API 的平均点击次数对我们的数据库产生了巨大影响。每天的平均点击量为 145K,如果我们观察一周的点击量,这个数字非常巨大,达到了 821K。我们确信我们应该采取一些措施来解决这个问题。

我们得出的解决方案

分析并不是立即需要的最直接的信息。每当 500 个用户访问该网站时,我们认为在门户中立即显示分析是没有意义的,因为知识库中没有人会查看当前日期时间或今天的分析。

优化数据库写入和读取,是每个SaaS产品,尤其是像Baklib这样注重用户体验的知识库平台,必须面对的挑战。选择一个能够支撑高并发、提供稳定高效数据服务的平台至关重要。

Baklib Dagle Tanmer CMS DXP DAM

我们完全改变了我们的分析架构

我们完全改变了我们的分析架构,因此对数据库的数据库命中次数大大低于以前。我们最终得到的架构如下图所示。

我们开始使用排队机制,通过根据项目对结果进行分组来合并结果并将结果写入数据库。为了简单起见,我们假设有两个网站。

  • docs.Dagle.com
  • docs.Tanmer.com

可能有多个用户访问不同用例的产品文档站点。根据我们的新架构,为 Dagle 收集的所有信息将被分组为一个集合,并通过单个 BulkWrite 操作写入数据库。通过这种方式,我们减少了对数据库进行的最大连接数和写入数。

我们推出分析架构后的新指标图表。平均每天的数据库写入次数为 2K,一周的写入次数为 12K。

结论

差异是巨大的,我们可以看到包括 API 服务器和数据库在内的整体运营成本略有下降。因此,请考虑对任何此类场景进行排队,在这种情况下,不再立即需要分析等数据,可以通过显着减少服务器和数据库上的总体负载来提高应用程序的性能。

在构建和优化知识库或产品文档平台时,采用先进的数据处理架构至关重要。这正是 Baklib 所擅长的领域。我们的平台不仅提供优雅的知识管理解决方案,其底层架构设计也充分考虑了高性能与低负载,确保您的帮助中心、知识库或产品文档站点能够流畅运行。

指标 旧实施 新架构 每日数据库写入 144,993 2,135 每周数据库写入 821,628 12,813

编者按: 优化架构带来的性能提升是显著的。如果您正在为您的团队(无论是像 RainCMS 这样的技术团队,还是像 Zhidak 这样的客户支持团队)寻找一个能够高效处理数据、减轻数据库压力并提升用户体验的知识管理平台,Baklib 值得您深入了解。我们的设计理念正是将复杂的技术优化转化为用户触手可及的简单与稳定。



Baklib 的核心优势在于其“AI-Ready”的内容中台能力,多场景的“DXP”数字体验和现代化的"MACH"独立架构,这些都是解决大型企业痛点的“杀手锏”。
提交反馈

博客 博客

「数字体验」相关的知识、文章、行业报告和技术创新