日常業務におけるドキュメントの保存は、通常、オンライン生産性ソフトウェアやクラウドストレージを利用して行われます。しかし、大量の文書を処理、保存、検索する必要があるアプリケーションでは、より困難な作業となります。電子文書管理システム(EDMS)は、文書の保存、索引付け、検索を高いパフォーマンスと可用性で行うように設計されており、カスタマイズ可能なメタデータやバージョン管理などの機能を備えているため、より良いソリューションとなります。
SaaSベースのEDMSソリューションは数多くありますが、独自のオープンソースEDMSを導入して、データを完全に管理することも可能です。この記事では、PostgreSQLデータベースに支えられた高可用性のMayan EDMSをセットアップする方法について説明します。
EDMSのメリット
この設定は、大量の文書を保管・処理し、クライアント側のインストールを必要としないWebベースのアプリケーションに接続されたEDMSを必要とする場合に最適です。EDMSをセントラルハブとして運用することで、以下のことが可能になります。
- セキュリティ、プライバシー、そしてデータの完全なコントロールを実現します。
- サードパーティ製ソフトウェアとの統合が容易であること
- ビジネスプロセスにおけるドキュメントワークフローの自動化。
なぜPostgreSQLなのか?
PostgreSQLは強力なオープンソースのオブジェクトリレーショナルデータベース管理システムであり、その拡張性、セキュリティ、性能は高く評価されています。アプリケーションのエンドツーエンドのスケーリングをサポートするために、データベースも高可用性である必要があります。そこで、このアーキテクチャ例では、PostgreSQL専用のレプリケーションツールを組み込んでいます。
メイアンEDMSを始めるにあたって
Mayanは、Python で書かれたウェブベースのオープンソースEDMSです。Mayanはデフォルトで(設計上)単一のシステムにインストールして実行します。アプリケーションとデータベースのコンポーネントはすべて、単一のサーバーまたは複数のDockerコンテナに格納することができます。これはテストや些細な環境には最適ですが、本番環境では高可用性と、SoC(Separation of Concern)原則と呼ばれる広く知られ、採用されているコンセプトが必要です。これは、階層化されたスケーラブルなアプリケーションを構築するための重要なベストプラクティスです。このリファレンス アーキテクチャは、Mayanでそれを実現する方法を示しています。
長所
- オープンソースのため、ライセンス料が不要
- ドキュメントのバージョンを簡単に保存、表示、元に戻すことができます。
- カスタマイズ可能なユーザー定義メタデータを用いたドキュメントの全文検索
- 柔軟なアクセスコントロールにより、効果的なユーザーの役割と権限を設計することができます。
- カスタマイズ可能なワークフローとイベントトリガーにより、ドキュメントを常に最新の状態に保つことが可能
短所
- 小規模なユースケースには複雑
- 他のソリューションに比べ、ユーザーインターフェースが直感的でない
- 光学式文字認識(OCR)が動作するCPUではリソースが重い
アプリケーションリファレンスアーキテクチャ
実世界のアプリケーションでMayanの能力を最適化するために、私たちのアーキテクチャは利用されています。
- NGINX:ウェブサーバー
- Prometheus& Grafana:モニタリング・観測可能なツール
- PostgreSQLです。データベース
- Bucardo: PostgreSQLの双方向データベースレプリケーション
- Linode Object Storage:S3-互換性のある高可用性ストレージ
- keepalivedIPフェイルオーバー
NodeBalancerは、アプリケーション・ノードにトラフィックを分散させます。もしあるアプリケーションサーバーがダウンした場合、負荷分散サービスは健全なノードにのみトラフィックを誘導するようになります。負荷分散サービスは、アプリケーションサーバーが停止した場合、正常なノードにのみトラフィックを誘導し、正常でないノードが回復するとすぐに、以前のように接続の分散を再開します。これにより、PostgreSQLデータベースノードへの接続を維持したまま、ダウンタイムなしにアプリケーションサーバの追加、削除、更新を簡単に行うことができます。
アプリケーションの「頭脳」としては、Mayan とNGINX が同じ仮想マシンにデプロイされており、Mayan のs3boto3 のサポートをストレージ バックエンドとして活用して、Linode のS3-compatible Object Storage にドキュメントをアップロードすることが可能です。
アプリケーションがミッションクリティカルで、プライマリバックエンドデータベースとしてPostgreSQLを使用している場合、Bucardoを組み込むことで、より優れたアップタイム保証とフォールトトレラントなデータベースを実現することができます。
PostgreSQLをサポートするマネージドデータベースサービスでも高可用性とレプリケーションを実現できますが、ほとんどのDBaaSサービスはPostgreSQLバージョンの更新とデータベースクラスタのオンライン化と利用可能性の維持に焦点を当てていることに留意してください。Bucardoを実装することで、PostgreSQLデータベースは2つ以上のデータベースノード間で双方向のレプリケーションを行うことができ、データベースの高可用性を確保することができます。
この例では、すべてのノードがパブリックインターネットから保護するためにクラウドファイアウォールで保護され、内部ではプライベートVLANで通信しています。アプリケーションサーバーは、フェイルオーバーを容易にするためにkeepalivedを使用した共有フローティングVLAN IPアドレスでデータベースに接続します。
Keepalived、またはFRR(FRouting)のような他のIPフェイルオーバーシステムは、健全なデータベースノードがアプリケーションノードのクラスタに接続されるように、データベースレベルで実装されています。
重要ファイルのフォールトトレランスの実現
EDMSは、多くの場合、日々の業務の中心的なハブとして機能し、お客様の組織の最も重要なファイルのいくつかをホストしています。私たちのアプリケーションは、フォールトトレランスのベースラインとパフォーマンスを最適化するために、あらゆるレベルで冗長性を持って構築されています。
- ドキュメントは、Linodeの高可用性オブジェクトストレージに保存されます。
- データベースは別のノードに設置し、パフォーマンスを向上させ、 単一障害点を持つことを防いでいます。
- Bucardoは、Postgresのノード間で自動的にデータベースのレプリケーションを実行します。
技術コンテンツとアーキテクチャーをもっと見る
私たちのソリューションエンジニアリングチームは、開発者がソフトウェアアーキテクチャのベストプラクティスに従ったアプリケーションを簡単に構築できるように、このようなフレームワーク、ガイド、ツールを共有しています。高可用性MySQL/MariaDBアーキテクチャのGaleraクラスタリファレンスアーキテクチャをチェックしたり、Linode Docsで利用可能なリファレンスアーキテクチャの例を参照したりすることができます。
コメント