次のセットアップを開発しています。
Rails webapp を使用すると、ユーザーは、完了までに Scala バックエンドに渡されるタスクを要求できます。これには最大で 10 秒以上かかる場合があります。これが発生している間、ユーザーがリクエストを行うために使用したページは、タスクが完了したかどうかを確認するために AJAX を使用してレールを定期的にポーリングし、完了した場合は結果を返します。
ユーザーの観点から見ると、リクエストは同期的ですが、ブラウザーがフリーズせず、素晴らしいスピンが得られる点が異なります。
バックエンドが必要とする入力データは大きく、出力と同様に複雑な構造をしています。私の最初の計画は、単純に 2 つのアプリが同じ DB (MongoDB になります) を共有するようにすることでした。そのため、Rails アプリは、デーモンとして実行されている scala バックエンドによって取得される「jobs」テーブルに ID を書き込むだけで済みました。しかし、考えれば考えるほど、このアプローチには潜在的な落とし穴がたくさんあるのではないかと心配しています。
私が最も心配している 2 つのことは、同期を維持する必要がある 2 つの異なる言語でのモデル コードの重複と、展開時にこれを処理する複雑さが増すことです。このアプローチを評価する際に、他にどのような問題を考慮する必要がありますか?
私が検討している他の可能性としては、1) Scala バックエンドを RESTful サービスにするか、2) メッセージ キューを実装するかです。ただし、どちらのオプションもより多くの開発作業が必要になるため、どちらのオプションについても完全には確信が持てません。どちらの場合も、RESTful API の一部として、またはメッセージのメッセージとして、モデル コードが効果的に複製されるように思われます。キュー - これは間違っていますか? これらのオプションのいずれかが優れている場合、それに近づくための良い方法は何ですか?