現在、ユーザーが1つ以上のメールアカウントに登録して、メールを自動的に分類できるようにするアプリケーションに取り組んでいます。フロントエンドはRubyを使用して実装されていますが、バックエンド(メール分類子)はJavaで記述されており、WEKAAPIを使用しています。問題は、フロントエンド(Rubyで記述されたWebインターフェイス)とバックエンド(Javaで記述された電子メール分類子)をスケーラブルな方法(多数のユーザーを同時に処理する)で統合するにはどうすればよいかということです。
3 に答える
メール分類子とは何かわかりません。しかし、同様の問題では、Java サービス用の RESTful API を作成することをお勧めします。これは、適切なツールを使用して非常にエレガントに行うことができます。API は、JSON を返す HTTP 経由である必要があります。JSON にシリアル化するJacksonのようなライブラリを使用します。
Ruby 側では、その JSON を簡単に解析して逆シリアル化できます。
HTTP 呼び出しはステートレスであり、すでにスケーラブルであるため、これは非常にスケーラブルなソリューションです。糸は使って捨てる。さらにパワーが必要な場合は、マシンを追加してください。
Rails アプリは、一部の呼び出しのキャッシュを開始することもできます。しかし、それは時期尚早の最適化です。
ロジックがなく、共通のデータベースしかない場合は、その共通のデータベースを 2 つのアプリ間で共有します。しかし、Java アプリは何らかの作業を行う必要があるようです。これは、API の一般的なアプローチです。また、Ruby に限定されません。AJAX または JSON を理解できるその他のクライアント用の JSONP サービスを作成できます。
分類器のトレーニングに使用するデータの量が増えるにつれて、アンサンブルアルゴリズム(n個のノードのグループがアンサンブルを形成する)を使用して、トレーニングデータをn個のノードのそれぞれに分割したい場合があります。 。
新しいデータポイントを分類するには、投票システムを使用して、n個のノードのそれぞれが新しいデータポイントを分類する対象に「投票」することができます。投票数が最も多い分類が優先されます。
新しい電子メール アラートが必要な場合は、公開している RESTful API を逆にするだけです。Java アプリを RESTful API として公開する代わりに、Rails アプリ API を公開します。たとえば/user/ID/newmail
。
Java アプリは、新しいメールが届くと Rails アプリを呼び出します。
ところで:
何千ものメール アカウントをチェックするためのスケーラブルなシステムを Java でどのように実装しましたか?