4

次のセットアップを開発しています。

Rails webapp を使用すると、ユーザーは、完了までに Scala バックエンドに渡されるタスクを要求できます。これには最大で 10 秒以上かかる場合があります。これが発生している間、ユーザーがリクエストを行うために使用したページは、タスクが完了したかどうかを確認するために AJAX を使用してレールを定期的にポーリングし、完了した場合は結果を返します。

ユーザーの観点から見ると、リクエストは同期的ですが、ブラウザーがフリーズせず、素晴らしいスピンが得られる点が異なります。

バックエンドが必要とする入力データは大きく、出力と同様に複雑な構造をしています。私の最初の計画は、単純に 2 つのアプリが同じ DB (MongoDB になります) を共有するようにすることでした。そのため、Rails アプリは、デーモンとして実行されている scala バックエンドによって取得される「jobs」テーブルに ID を書き込むだけで済みました。しかし、考えれば考えるほど、このアプローチには潜在的な落とし穴がたくさんあるのではないかと心配しています。

私が最も心配している 2 つのことは、同期を維持する必要がある 2 つの異なる言語でのモデル コードの重複と、展開時にこれを処理する複雑さが増すことです。このアプローチを評価する際に、他にどのような問題を考慮する必要がありますか?

私が検討している他の可能性としては、1) Scala バックエンドを RESTful サービスにするか、2) メッセージ キューを実装するかです。ただし、どちらのオプションもより多くの開発作業が必要になるため、どちらのオプションについても完全には確信が持てません。どちらの場合も、RESTful API の一部として、またはメッセージのメッセージとして、モデル コードが効果的に複製されるように思われます。キュー - これは間違っていますか? これらのオプションのいずれかが優れている場合、それに近づくための良い方法は何ですか?

4

2 に答える 2

3

私は似たような問題に対して数回resqueを使用しましたが、常に非常に満足しています。ジョブ キューを実装するために必要なものがすべて揃っており、redis に支えられています。ぜひご覧になることを強くお勧めします

于 2012-04-19T09:11:02.940 に答える
0

誤解しないでほしいのですが、このプロジェクトで Rails が提供し、Scala が提供していないものは何でしょうか?

別の言い方をすれば、Scala を完全に使わずにすべてを Rails で行うことができるでしょうか? もちろんそうですが、バックエンドを Scala で開発しているのには理由がありますよね? では、Scala が提供して Rails が提供していないものは何でしょう?

どちらかを行うべきだと言っているわけではありませんが、重複したコードを維持することは、トラブルや複雑さを求めています。

プロジェクトに既に大量の Ruby コードを投資している場合は、Twitter 風の完全なオーバーホールを除いて、Rails に専念していることになります (それがオプションでも望ましいとも思えません)。

とにかく、モデルの重複をどのように回避するかはわかりません。Mongo バックエンドをヒットすると、BSON 結果セットが購入されます。これは、Akka の優れた実装、すぐに使用できる REST、および JSON ユーティリティであるSprayに組み込むことができます。

難しい問題です。2 つのパラダイムの間に挟まれているようですね。

于 2012-04-19T09:54:19.207 に答える