数人の開発者の間で議論がかなり白熱したアプリケーションがあります。
基本的に、Webレイヤーとバックエンドレイヤーに分割されます。Webレイヤーは単純なWebフォームによって情報を収集し、このデータをJSONドキュメント(文字列は.jsonファイル)としてバックエンドが使用する監視フォルダーに格納します。バックエンドは数秒ごとにこのフォルダーをポーリングし、ファイルを取得して、その機能を実行します。
ファイル自体は非常にシンプル(つまり、すべての文字列データ、ネストなし)で、最大で1〜2kで、システムはほとんどの時間をアイドル状態にします(ただし、最大100メッセージまでバーストします)。バックエンド処理ステップは、メッセージごとに約10分かかります。
議論は、ある開発者がファイルシステムをメッセージングレイヤーとして使用することは悪いソリューションであると示唆した場合、リレーショナルデータベース(MySQL)、noSQLデータベース(Redis)、またはプレーンREST APIコールなどを代わりに使用する必要がある場合に出てきます。
Redisは、キュー内のメッセージ処理のために組織内の他の場所で使用されることに注意してください。
私が聞いた議論は次のように分類されます
フラットファイルを支持して:
フラットファイルは、他のソリューションよりも信頼性が高くなります。ファイルは、「監視」フォルダーから、取得後に「処理」フォルダーに、最後に「完了」フォルダーに移動するためです。とにかく他のものを壊すような非常に低レベルのバグがない限り、メッセージが消えるリスクはありません。
フラットファイルを理解するには、それほど高度な技術は必要ありません-
cat
それだけです。書き込むクエリはありません。誤ってメッセージをキューからポップして、メッセージが永遠に消えてしまうリスクはありません。ファイル管理コードは、すべての言語の標準ライブラリの一部であるため、プログラミングの観点からデータベースAPIよりも簡単です。これにより、コードベースの全体的な複雑さと、導入する必要のあるサードパーティコードの量が削減されます。
YAGNI原則州フラットファイルが今うまく動作することを、それを残して、より複雑なソリューションに変更するための実証され必要はありません。
データベースを支持して:
ファイルがいっぱいのディレクトリよりもデータベースを拡張する方が簡単です
フラットファイルには、誰かが「完了」ファイルを「監視」ディレクトリにコピーして戻すリスクがあります。このアプリケーションの性質(仮想マシン管理)により、これにより壊滅的なデータ損失が発生する可能性があります。
T / Sにより高度な技術を必要とするアプリは、教育を受けていないスタッフが物事を突くだけで何かを台無しにする可能性が低いことを意味します。
特にRedisなどのDB接続コードは、少なくとも標準ライブラリファイル管理機能と同じくらい堅牢です。
DB接続コードは、ファイル操作よりもレベルが高いため、開発者の観点からは(機能的にではないにしても)明らかに単純です。
私が見ることができることから、両方の開発者は多くの有効なポイントを持っています。
これら2人のプロファイル開発者、またはプロデータベース開発者のうち、どちらがソフトウェアエンジニアリングのベストプラクティスに沿っているのでしょうか?