2012-04-08 5 views
24

既存のモノリシックなRails 3.0アプリケーション(35K LOC)を取り上げてSOAデザインに分解する方法について、いくつかのリソースを探しています。すべての書籍、ブログ、スクリーンキャスト、またはサンプルアプリケーションはすばらしいでしょう。私は答えることを探していますRuby on Rails SOA設計のリソースと例

主な質問は以下のとおりです。

  • はSOAにも右のデザインですか?
  • どこから始めますか?
  • 避けることができる一般的な落とし穴は何ですか?
  • 私は今何を考えていますか?後で何ができますか?この本は、もし

    私が見てきた一部のリソースではなく、完全に確認してください(すなわち、性能)依然として関連性がある)

  • SOA Design Patterns
+0

また、コードベースをモジュール化する方法として、Railsエンジンを使用してチェックアウトすることもできます。サービスは機能を配布するのに最適ですが、すべてのプロジェクトに適していないコードベースに間接的なレイヤーを追加することもできます。 –

+0

@BenTaitelbaumはチップのおかげです。それを考慮していなかったが、確かにそれについていくつかの研究を行うだろう。 –

答えて

37

SOAは正しいデザインですか?

によって異なります。あなたはこれらの種類の答えを嫌いませんか? メッセージングやAPI呼び出しを使用して疎結合サービスにアプリケーションを分割することは、定義上SOAを実装することになります。

サービスの実装をインターフェイスを変更せずに交換でき、アプリケーション全体を停止させることなく独立した展開が可能です。また、バージョン管理された特殊なAPIコントローラを介してSOAを実装し、認証されたユーザーまたは役割ベースのセッション用に予約する状態全体ではなく、カスタム状態を公開します。

私の経験から言うジレンマは、同期呼び出しと非同期呼び出しのどちらを実装するかです。同期呼び出しは明らかにプログラムするのが簡単ですが、実行中にユーザーがハングする可能性があり、長期実行クエリのタイムアウトを処理する必要があります。データベースとWebサーバーのタイムアウトに注意してください。

非同期呼び出しを実装する場合は、ActiveMessagingなどを使用して、コールバックや何らかの種類の通知を処理してユーザーにバブルアップする必要があるとします。また、プライマリとセカンダリのメッセージブローカと、ステータスを確認するためのJavaScriptやポーラーを設定する必要があります。しかし、それはすべての楽しみです!

どこから始めますか?

「価値がある」かどうかは、結局のところ、SOAはクールですが、現在持っていない複数の障害点が導入されています。 あなたが分割されたアプリケーションがHAであり、他のプロジェクトに役立つ別々のサービスになると思うなら、私はあなたが言及したように "druby book"と "service oriented"から始めるでしょう。

避けることができる一般的な落とし穴は何ですか?

遠くのサービスが失敗した場合、複数のサービス全体にわたるトランザクションと全体の処理をロールバックできることが最大の懸念事項だと思います。問題は、Aを呼び出す操作の一部で、BとBの呼び出しを呼び出すと、CとCの呼び出しが失敗した場合に始まります。 Cが失敗したことを誰が知っていますか? BとAにロールバックをどのように伝えますか?彼らはできますか?彼らは国家を救うのか?先駆的な設計のための厳しい質問。

もう1つの問題は、SOAの上にワークフローを投げたときに人生が複雑になることです。ビジネスプロセスの主役は誰ですか?集中化または分散化?それはまったく絶対にクールなものですが、重さはひっくり返ります。しかし、SOAに移行する必要がある場合、それは人生です。

私は今何について考えていますか、後で何ができるのですか? (すなわちパフォーマンス)

私は他のアプリケーションですぐに使用できる明白な汎用サービスを除外したいと思います。私はあなたの環境を超えてSOAの導入を最小限に抑えるために、あなたの環境を失敗のポイントを避けて避けていきたいと思います。

2

これは、CrowdtapのCTOである友人からの優れたリソースです。彼らは同じことをして、製品開発のスピードを大幅に向上させ、テストのカバレッジを向上させるのに本当に役立っています。役に立つと思っていますhttps://www.youtube.com/watch?v=KsiQXAXsQDQ