2009-06-12 15 views
6

は、私は我々の組織でステートフルWebサービスを必要としている
stateful webservicesステートフルWebサービスの可能性

を複製します。しかし、私がオンラインで読んだところでは、ステートフルなWebサービスを構築することは悪いプログラミングだと言われています。私はそれについて何が悪いのか分かりません。また、なぜあなたがウェブサービスに州を持つことができるようにするための回避策を出すのか、私は理解していません。

私は、なぜ、ステートフルなWebサービスを使用するのが悪いプログラミングなのですが、なぜそれが許可されるのでしょうかと思います。

+2

私はこれを別のやり方で見ています。このサービスはステートフルで何をする必要がありますか?それは創造的に煙と鏡でできますか? –

答えて

16

Webサービスの目的は、スケーラビリティの高い方法で、あるトランザクションで機能を提供することです。これは物事を単純かつ原子的に保つことを意味します。

操作を実行するために複数の呼び出しを行う必要がある場合、トランザクションをハングアップ状態にする可能性が高くなります。クライアントは戻ってくるのですか?彼らは終わったのですか?取引はどのくらいの期間オープンしていますか?彼らはクラッシュしましたか?ロールバックはどのように処理するべきですか?

これらの質問に対する回答は、サービスを実行するために必要なリソースに大幅な影響を与える可能性があります。だから誰もが一気にすべてのことをすることをお勧めしているのです。

+3

優れた答え!また、操作がステートフルな場合、サーバーに障害が発生した場合はどうなりますか? (それはそうするでしょう。だから私たちはサーバーのクラスタを実行します。)すべての状態が失われます。ステートレスでは、何も起こらないかのように、クラスタ内の次のサーバーに要求を再送信できます。 –

+1

全くありません。 Webサービスは、遠隔アプリケーション間の市場全体にわたる統合技術に関するものです。実際にステートフルなアプローチが、それと継承された非機能的な側面を考慮しても正しいものである場合には、複数のステートレスサービスを使用する際に、答えが誤っている可能性があります。 – BonanzaOne

9

は、ここで私は考えることができるいくつかの理由です:

  1. 必要があります状態を維持するためのコストは、サーバー側のみを負担する - サービス利用者はほとんどのWebブラウザではないので、何のクッキーを持っていません。これにより、サーバーのパフォーマンスが低下し、設計の複雑さが増します。

  2. サービスコンシューマは、ダムブラウザではなくインテリジェントプログラムです。このように、プログラムは(ほとんどの場合)独自の状態を維持します。言い換えれば、サービスを提供すると、消費者は必要とするデータを正確に要求します。サーバー上での状態の維持は廃止され、不要になります。

  3. トランザクション - クライアントがほとんどインテリジェントであり、状態の変更をいつ通知するかを決定するため、サービスはシステムの厄介な点です。これは、状態を維持している場合、トランザクション操作を完了するためにサービスコールの間に待機する必要があることを意味します。クライアントが次のサービスコールを行うことは絶対に保証されません。

あり多くの理由がありますが、これらは私が私の頭の上から考えることができますものです:)

-1

Googleができれば、私はそれが神話

のようなものだと思いますステートフルWebアプリケーションをスケーラブルにすることができます。なぜ、ステートフルなWebサービスをスケールすることができないのですか?それはスケーラビリティを低下させるアプリサーバーに関するものです。

ウェブサイトやWebサービスであっても、より良いサービスを提供することが究極の目的です。あなたのサービスを改善することが "ステートフルな"ものであれば、それに躊躇しないでください。

+2

Googleのどの部分について話しているかを明確にしたい場合があります。メインのgoogle.comは「ステートフル」ではありません。 – NotMe

関連する問題