1

モバイル Web アプリとバックエンド システムの Web サービスの間に配置されるゲートウェイを開発しています。このゲートウェイの目的は、バックエンド Web サービス API の変更から Web アプリを保護し、同時実行の導入、メッセージの変換、バッファリングなどを行うことです。

私の提案するアーキテクチャは次のとおりです。

  • PhoneGap を使用したプラットフォームに依存しないモバイル Web アプリ (完了)
  • Gateway は、ビジネス ロジックに Scala を使用し、メッセージ パッシングに ZeroMQ を使用する Web サービスです (新規)。
  • バックエンドは既存の Web サービス (既存)

ゲートウェイは、メッセージの受け渡し、変換、集約などを純粋に担当し、この時点で状態を保持したり、ユーザー認証を行ったりする必要はありません。一方の側でモバイル アプリと通信する方法を知っている単一のインターフェイスであることを単に担当します。反対側の 1 つまたは複数のサービス。

Scala はこのタイプのアプリケーションに適していると思われるため、開発言語として使用することを強く検討していますが、そのような Scala サービスの正しいアーキテクチャは何でしょうか? Lift や Play などのフレームワークを検討し、単純な「Java」ベースの Web サービスを実行して、Scala を使用してビジネス ロジックを実装することも検討しました。私は物事を可能な限りシンプルに保つことを強く信じています。私は、複雑なセットアップと、決して使用されない可能性のあるフレームワーク内の何千行ものデッド コードを警戒しています。一方で、自分自身を「自分のロール」ソリューションに制限し、多くの作業を作成し、既存のソリューションの一部であった可能性のあるコードを維持する必要があることも理想的ではありません.

考慮すべき点: 私はアーキテクト兼開発者ですが、私の Scala に関する知識は「Programming in Scala, Second Edition」の前半に限られています。また、私の時間は非常に限られています。それでも、私はこれを最初に正しくしたいと思っています。

賢明な紳士や貴婦人が、この種の解決策への洞察と、おそらくすぐに始めるためのリンクを提供してくれることを願っています. 私は本当に早く始める必要がありますが、他の専門家の経験や洞察が、途中で落とし穴を避けるのに役立つことを願っています. 開発環境とツールに関する洞察も役立ちます。私はMacで開発する必要があります(会社のルール)が、Ubuntuサーバーにデプロイします。私は現在、IDE としての Eclipse または Idea のインストールと、ビルド用の scala コンパイラまたは sbt の間でジャグリングを行っています。

アップデート

以下のすべての潜在的な回答に感謝します。私はすべての提案を見て、それらすべてにメリットがあります。問題は、正しい馬に賭けることです。スプレーはおそらく問題に対する最も簡単な解決策ですが、 Finagleも見つけました。それは私の問題に対する素晴らしい解決策のようです。Akka ではなく Netty の上に構築されていることが少し心配です。誰もがそれに問題があると思いますか。ソリューションをできるだけ純粋な Scala のままにしておきたいと思っていましたが、Finagle が最も成熟しているようです。何か案は?

4

5 に答える 5

3

Akkaを確認する価値があるかもしれません。これは、JVMで並行してフォールトトレラントなアプリケーションを作成するための軽量フレームワークと、Webサービスを作成するための便利な組み込みの抽象化を提供します。さらに、Sprayプロジェクトは、Akka上にHTTPサーバーとクライアントライブラリを提供するという目的に役立つ可能性があるようです(ただし、Akka自体とは異なり、私はこれを使用していないため、保証できません)。

于 2012-01-04T10:01:46.557 に答える
2

他のサービス専用の Web サービスを使用している場合は、Spray や Blueeyes などの Akka ベースのサービスがおそらく最善の策です。Jerkson を使用してケース クラスとの間で JSON マッピングを行い、Akka-Camel を使用して ZeroMQ にリンクできます。

于 2012-01-05T01:58:24.010 に答える
2

mistertim が言うように、Akka は良い選択肢です。私には偏見がありますが、Lift とそのRestHelperも素晴らしい方法だと思います (Lift を使用して iPhone アプリ用の API をいくつか作成しました)。それ以外にも、 Unfilteredに非常に満足している人を何人か知っています。

于 2012-01-04T10:16:08.117 に答える
0

本格的なWebフレームワークではないため、軽量に保ちたい場合は、フィルタリングされていないオプションが非常に興味深いオプションです。

正直なところ、ドキュメントではより詳細な情報を使用できますが、Webサービスを提供するには次のように記述します。

object MyService extends unfiltered.filter.Plan {
    def intent = {
            case req @ GET(Path ("/myendpoint")& Params(params)) => 
                                 for { 
                                    param1<-params("param1")
                                    param2<-params("param2") 
                                 } yield ResponseString(yourMethod(param1,param2))
          }

override def main(args:Array[String]) = unfiltered.jetty.Http.anylocal.filter(MyService).run(); 
}

フレームワークを使用したくない場合や、java / javaアノテーションをScalaと混合したくない場合に非常に便利です(それ以外の場合は、通常のJavaソリューションがあります)

それでも、俳優があなたの問題に合うと思うなら、私はアッカを調べることをお勧めします

于 2012-01-04T17:10:12.577 に答える
0

あなたのシステムがミドルウェアで、物事を素早く終わらせるなら、 Sprayが最適です。スプレーはAkkaの上に開発されました。Akka は ZeroMQ をサポートしています。

将来、ミドルウェアと一緒に他の Web ライク モジュールを追加する場合は、Lift + Akka を選択することをお勧めします。Lift は、Spray ライク Web サービスも提供し、他のモジュールの開発を簡単に開始できるからです。

ビルドとして SBT を選択できます。いくつかのプロジェクト テンプレート、テンプレート生成ツールが利用可能であるため、プロジェクト ビルドを非常に迅速に取得できます。

私の経験では、SBT + InteliJ Idea はうまく機能します。sbt -idea プラグインを見てください。

スプレー プロジェクト テンプレート
リフト プロジェクト テンプレート ジェネレーター

于 2012-01-08T06:51:52.603 に答える