3

为海量文档自建专用“网盘”,试过都说“真香”​

 8 months ago
source link: https://www.51cto.com/article/777123.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

延伸阅读,了解 Akamai cloud-computing

更多强大工具,选择Akamai cloud-computing!

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

EDMS带来的好处

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

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

为何使用PostgreSQL?

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

Mayan EDMS上手

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

  • 开源,无需购买许可
  • 可轻松存储、查看和检索文档的不同版本
  • 使用可定制的“用户定义的元数据”对文档进行全文搜索
  • 灵活的访问控制,借此设计有效的用户角色和权限
  • 可定制的工作流,通过事件触发器保持文档处于最新状态
  • 对于较小的用例来说略显复杂
  • 相比其他解决方案,用户界面不够直观
  • 光学字符识别(OCR)功能需要耗费大量CPU资源

应用程序参考架构

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

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

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

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

强大开发工具,Akamai是您的不二之选!

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK