为海量文档自建专用 “网盘”,试过都说 “真香”​
创始人
2025-06-29 19:50:57
0

很多人的日常工作中,都会使用在线协作平台或云存储服务来存储自己的各类文档。然而当需要通过应用程序来处理、存储和检索大量文档数据时,这种做法往往会造成不小的挑战。此时,电子文档管理系统(Electronic Document Management System,EDMS)就成了一种更好的解决方案,因为它们在设计上就能以极高的性能和可用性来存储、索引和检索不同类型的文档,甚至能提供可定制的元数据和版本控制等功能。

目前市面上有很多基于 SaaS 的 EDMS 解决方案,但为了完全控制自己的数据,我们也可以借助开源 EDMS 软件部署自己专用的文档管理系统。本文将介绍如何在 Linode 平台上,借助 PostgreSQL 数据库部署高可用的 Mayan EDMS。

延伸阅读,了解Akamai cloud-computing

出海云服务,选择Akamai Linode!

EDMS 带来的好处

如果希望使用基于 Web 应用程序的 EDMS 来存储和处理海量文档,并且不希望客户端安装任何应用程序,那么这种方式将会是一种理想的选择。这种中心化运行的 EDMS 能更好地保证:

  1. 自己数据的安全性、隐私性以及完全的控制能力
  2. 与第三方软件实现更轻松的集成
  3. 围绕业务流程打造自动化的文档工作流

为何使用 PostgreSQL?

PostgreSQL 是一个强大且开源的对象关系型数据库管理系统,因其可扩展性、安全性和性能而广受赞誉。为了支持应用程序的端到端扩展,数据库还需要具备高可用性。因此本架构包含了专门用于 PostgreSQL 的数据复制工具。

Mayan EDMS 上手

Mayan 是一款使用 Python 开发,基于 Web 的开源 EDMS。按照设计,Mayan 默认可在一台服务器上安装和运行,此时应用程序和数据库组件可以位于同一台服务器或多个 Docker 容器中。这种配置很适合开发、测试环境,但在生产环境中,我们需要更高可用性,并实现 SoC(Separation of Concern,关注点分离)这种已经广为人知的概念。这是构建分层、可扩展应用程序时很重要的一个最佳实践。我们的参考架构将介绍如何用 Mayan 实现该目标。

1. 优势

  1. 开源,无需购买许可
  2. 可轻松存储、查看和检索文档的不同版本
  3. 使用可定制的“用户定义的元数据” 对文档进行全文搜索
  4. 灵活的访问控制,借此设计有效的用户角色和权限
  5. 可定制的工作流,通过事件触发器保持文档处于最新状态

2. 不足

  1. 对于较小的用例来说略显复杂
  2. 相比其他解决方案,用户界面不够直观
  3. 光学字符识别(OCR)功能需要耗费大量 CPU 资源

应用程序参考架构

为了在现实用例中充分优化 Mayan 的能力,我们的参考架构使用了下列组件:

  1. NGINX:Web 服务器
  2. Prometheus 和 Grafana:监控和可观测性工具
  3. PostgreSQL:数据库
  4. Bucardo:PostgreSQL 双向数据库复制
  5. Linode Object Storage:兼容 S3 的高可用存储服务
  6. keepalived:IP 故障转移

NodeBalancer 可将流量分配给不同的应用程序节点。如果一台应用服务器停机,负载均衡服务即可开始将流量分配到正常运行的节点。一旦故障节点恢复正常,负载均衡服务将像故障前那样分配流量。借此我们可以轻松添加、删除或更新应用程序服务器,而无需担心可能导致停机,并且始终维持与 PostgreSQL 数据库节点的连接。

作为该应用的“大脑”,Mayan 和 NGINX 被部署在同一台虚拟机中,我们可以借助 Mayan 对 s3boto3 的支持获得存储后端,借此将文档上传至 Linode 可兼容 S3 的对象存储服务中。

如果应用程序非常关键,并使用 PostgreSQL 作为主后端数据库,那么可以加入 Bucardo 以更好地保障持续运行时间,并为数据库提供容错性。

我们还可以借助支持 PostgreSQL 的托管数据库服务来获得高可用性和复制能力,但是需要注意,大部分 DBaaS 服务的重点都是更新 PostgreSQL 版本并确保数据库集群始终联机和可用。因此实施 Bucardo 可以让我们的 PostgreSQL 数据库在两个或更多数据库节点之间进行双向复制,从而保证数据库的高可用性。

本例中,所有节点都使用 Cloud Firewalls 进行保护,防范来自公共互联网的威胁,这些节点通过私有 VLAN 实现内部通信。应用程序服务器通过一个共享的浮动 VLAN IP 地址连接到数据库,并通过 Keepalived 实现故障转移。

Keepalived(或其他 IP 故障转移系统,如 FRRouting (FRR))是在数据库层面上实现的,因此正常运行的数据库节点将能顺利连接至应用程序节点集群中。

为重要文件实现容错

EDMS 通常会充当日常工作的中心,其中可能存储了企业中最重要的文件。本例介绍的应用程序在每个层面上都建立了冗余,不仅可以容错,也能进一步优化性能:

  1. 文档存储在 Linode 的高可用 Object Storage 服务中
  2. 数据库位于单独的节点上,不仅可以改善性能,而且有助于防止单点故障
  3. Bucardo 可以在 Postgres 节点之间自动执行数据库复制

探索更多技术内容和架构

Akamai 和 Linode 的解决方案工程团队会定期分享类似这样的框架、指南和工具,从而帮助开发者更轻松地遵循最佳实践来构建应用程序的软件架构。

这篇文章的内容感觉还行吧?有没有想要立即在 Linode 平台上亲自尝试一下?别忘了,现在注册可以免费获得价值 100 美元的使用额度,快点自己动手体验本文介绍的功能和服务吧↓↓↓

出海云服务,选择Akamai Linode!

欢迎关注 Akamai ,第一时间了解高可用的 MySQL/MariaDB 参考架构,以及丰富的应用程序示例。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...