头图

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

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

EDMS 带来的好处

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

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

为何使用 PostgreSQL?

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

Mayan EDMS 上手

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

1. 优势

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

2. 不足

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

应用程序参考架构

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

  • NGINX:Web 服务器
  • Prometheus 和 Grafana:监控和可观测性工具
  • PostgreSQL:数据库
  • Bucardo:PostgreSQL 双向数据库复制
  • Linode Object Storage:兼容 S3 的高可用存储服务
  • 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 通常会充当日常工作的中心,其中可能存储了企业中最重要的文件。本例介绍的应用程序在每个层面上都建立了冗余,不仅可以容错,也能进一步优化性能:

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

探索更多技术内容和架构

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


Akamai
1 声望1 粉丝

Akamai 支持并保护网络生活。全球各大优秀公司纷纷选择 Akamai 来打造并提供安全的数字化体验,为数十亿人每天的生活、工作和娱乐提供助力。 我们横跨云端和边缘的计算平台在全球广泛分布,不仅能让客户轻松开发...