对于日常工作,文件存储通常是通过在线生产力软件和云存储完成的。当一个应用程序需要处理、存储和检索更大量的文件时,它变得更具挑战性。使用电子文件管理系统(EDMS)是一个更好的解决方案,因为它们被设计用来存储、索引和检索具有高性能和可用性的文件,有些还包括可定制元数据和版本控制等功能。
虽然有许多基于SaaS的EDMS解决方案,但你可以部署你自己的开源EDMS来保持对数据的完全控制。在这篇文章中,你将学习如何建立一个由PostgreSQL数据库支持的高可用性的Mayan EDMS。
EDMS的好处
如果你存储和处理大量的文件,并且需要一个附属于基于网络的应用程序的EDMS,这种设置是理想的,因为它不需要任何客户端安装。将EDMS作为一个中央枢纽来运行,可以确保:
- 安全、隐私和对你的数据的完全控制;
- 易于与第三方软件整合;以及
- 业务流程的文件工作流程的自动化。
为什么是PostgreSQL?
PostgreSQL是一个强大的、开源的对象关系型数据库管理系统,因其可扩展性、安全性和性能而受到高度重视。为了支持你的应用程序的端到端扩展,你的数据库也需要高度可用,所以这个架构实例包含了一个专门用于PostgreSQL的复制工具。
开始使用Mayan EDMS
Mayan是一个基于网络的开源EDMS,用Python 。Mayan默认(在设计上)在一个系统上安装和运行;所有的应用程序和数据库组件都可以在一个服务器上或在几个Docker容器中。虽然这对于测试或琐碎的环境来说是很好的,但对于生产环境来说,我们需要高可用性和一个广为人知的概念,即SoC(Separation of Concern)原则。这是构建分层和可扩展应用程序的关键最佳实践。这个参考架构展示了如何用Mayan做到这一点。
优点
- 开源意味着没有许可费
- 轻松地存储、查看和恢复文件版本
- 使用可定制的用户定义的元数据对文件进行全文搜索
- 灵活的访问控制,设计有效的用户角色和权限
- 带有事件触发器的可定制的工作流程,以保持文件的最新状态
弊端
- 对较小的用例来说很复杂
- 用户界面不如其他解决方案直观
- 对运行光学字符识别(OCR)的CPU来说,资源很重
应用参考架构
为了优化玛雅人在现实世界中的应用能力,我们的架构利用了:
- NGINX:网络服务器
- Prometheus& Grafana:Monitoring 和可观测性工具
- PostgreSQL:数据库
- Bucardo: PostgreSQL的双向数据库复制
- LinodeObject Storage :S3-兼容的高可用存储
- keepalived:IP故障转移
NodeBalancer将流量分配给我们的应用节点。如果一个应用服务器发生故障,负载平衡服务将开始只引导流量到健康节点。一旦不健康的节点恢复,它将像以前一样恢复平衡连接。这使得添加、删除或更新应用服务器变得很容易,而不需要停机,同时保持与PostgreSQL数据库节点的连接。
对于应用程序的 "大脑",Mayan 和NGINX 部署在相同的虚拟机上,我们可以利用 Mayan 对 s3boto3 的支持作为存储后端,将我们的文档上传到 Linode 的S3 兼容Object Storage 。
如果你的应用程序是关键任务,并使用PostgreSQL作为主要的后台数据库,加入Bucardo可以提供更好的正常运行时间保证,并使你的数据库具有容错性。
你也可以通过支持PostgreSQL的管理数据库服务来实现高可用性和复制,但请记住,大多数DBaaS产品的重点是更新PostgreSQL版本并保持你的数据库集群在线和可用。实施Bucardo让你的PostgreSQL数据库在两个或多个数据库节点之间进行双向复制,确保你的数据库是高可用的。
在此示例中,所有节点都使用云防火墙进行安全保护,以防公共互联网入侵,并通过专用VLAN 进行内部通信。应用服务器通过带有 keepalived 的共享浮动VLAN IP 地址连接数据库,以方便故障切换。
Keepalived或另一个IP故障转移系统,如FRRouting(FRR),在数据库层面上实现,这样一个健康的数据库节点将连接到你的应用节点的集群。
实现关键文件的容错性
一个EDMS通常会作为日常运作的中心枢纽,托管贵组织的一些最关键的文件。我们的应用程序在每个层面上都建立了冗余,以实现基线容错和优化性能:
- 文件存储在 Linode 的高可用Object Storage 上。
- 数据库是在一个单独的节点上,以提高性能, 防止出现单点故障。
- Bucardo在Postgres节点之间执行自动数据库复制。
探索更多的技术内容和架构
我们的解决方案工程团队分享框架、指南和工具,像这样的框架、指南和工具使开发人员更容易建立遵循软件架构最佳实践的应用程序。查看我们的Galera集群参考架构,了解高可用的MySQL/MariaDB架构,或浏览Linode Docs上的可用参考架构范例。
评论 (2)
How much those it cost to implement the mayan edms in a month and in a year.
Your swift response is best appreciated
If you’re using the Terraform script in our guide , you will deploy four 2GB compute instances ($48.00) and an Object Storage Bucket ($5.00). Additionally, as mentioned in the guide, you will want to deploy an additional node for Prometheus and Grafana ($5.00) as well as a NodeBalancer ($10.00). These services together would be roughly $68.00/month before taxes. This is assuming the amount of data your Object Storage was not more than 250GB and you stayed within your Network Transfer Allowance. Again, based on these assumptions, your yearly cost would be roughly $812.00.
You have the option to edit the Terraform script and change the default compute instance to a Nanode, however, I can’t guarantee the performance of the deployment with that plan.