2009-06-12 55 views
6

thể Duplicate
stateful webservicesStateful Webservice

Tôi có một nhu cầu cho một webservice stateful trong tổ chức của chúng tôi. Tuy nhiên, ở khắp mọi nơi tôi đọc trực tuyến nói rằng xây dựng một webservice stateful là chương trình xấu nhưng không có gì bao giờ nói tại sao. Tôi đoán tôi không hiểu những gì là xấu như vậy về nó. Tôi cũng không thực sự hiểu lý do tại sao họ sẽ cung cấp cho một công việc xung quanh để cho phép bạn có nhà nước trong một dịch vụ web.

Vì vậy, tôi đoán rằng câu hỏi của tôi là, tại sao chương trình xấu để sử dụng một dịch vụ web stateful và tại sao nó được phép?

+2

Tôi sẽ xem xét điều này theo một cách khác - dịch vụ này cần làm gì là trạng thái? Điều đó có thể tạo ra khói thuốc và phản chiếu không? –

Trả lời

16

Toàn bộ mục đích của dịch vụ web là phân phối một phần chức năng trong một giao dịch theo cách có khả năng mở rộng cao. Điều này có nghĩa là giữ mọi thứ đơn giản và nguyên tử.

Khi bạn phải thực hiện nhiều cuộc gọi để thực hiện thao tác, bạn có nhiều khả năng để lại giao dịch treo. Khách hàng có quay lại không? Họ đã làm xong chưa? Giao dịch sẽ vẫn mở trong bao lâu? Họ đã sụp đổ? Làm thế nào nên rollbacks được xử lý?

Câu trả lời cho những câu hỏi này có thể có tác động triệt để đến các tài nguyên cần thiết để chạy dịch vụ của bạn. Đó là lý do tại sao tất cả mọi người đề nghị làm tất cả trong một swoop.

+3

Câu trả lời hay! Ngoài ra, nếu hoạt động của bạn là trạng thái, điều gì sẽ xảy ra nếu máy chủ không thành công? (Và nó sẽ.Đó là lý do tại sao chúng tôi chạy các cụm máy chủ.) Tất cả trạng thái sẽ bị mất. Không quốc tịch cho phép bạn gửi lại yêu cầu tới máy chủ tiếp theo trong cụm như thể không có gì xảy ra. –

+1

Không hề đúng. Các dịch vụ Web là về một công nghệ tích hợp toàn thị trường chung giữa các ứng dụng từ xa. Câu trả lời của bạn có thể đánh lừa mọi người trong việc sử dụng nhiều dịch vụ phi trạng thái khi thực sự một cách tiếp cận trạng thái là một cách chính xác ngay cả khi xem xét các khía cạnh phi chức năng được kế thừa với nó. – BonanzaOne

9

Dưới đây là một số lý do tôi có thể nghĩ:

  1. Chi phí duy trì trạng thái sẽ phải chịu máy chủ duy nhất bên - người tiêu dùng dịch vụ hiếm khi các trình duyệt web, do đó không có cookie. Điều này làm giảm hiệu suất máy chủ của bạn và tăng độ phức tạp của thiết kế của bạn.

  2. Một người tiêu dùng dịch vụ là một chương trình thông minh, chứ không phải là một trình duyệt câm. Như vậy chương trình sẽ (hầu như luôn luôn) duy trì trạng thái riêng của nó. Nói cách khác, khi bạn cung cấp một dịch vụ, người tiêu dùng của bạn sẽ yêu cầu chính xác dữ liệu mà họ muốn. Duy trì trạng thái trên máy chủ trở nên lỗi thời và không cần thiết.

  3. Giao dịch - dịch vụ là điểm lơ lửng trong hệ thống của bạn vì khách hàng của họ chủ yếu là thông minh và họ quyết định thời điểm thông báo cho bạn về những thay đổi trong trạng thái của họ. Điều này có nghĩa là nếu bạn duy trì trạng thái, bạn có thể phải chờ giữa các cuộc gọi dịch vụ để hoàn thành một thao tác giao dịch. Và hoàn toàn không đảm bảo khách hàng sẽ thực hiện cuộc gọi dịch vụ tiếp theo đó.

Có rất nhiều lý do, nhưng đó là những cái tôi có thể nghĩ ra khỏi đỉnh đầu của tôi :)

-1

Tôi nghĩ rằng đó là một loại huyền thoại

Nếu Google có thể làm cho ứng dụng web của họ có thể mở rộng được, vậy tại sao chúng ta không thể mở rộng một webservice trạng thái. Đó là tất cả về máy chủ ứng dụng làm giảm khả năng mở rộng.

Ngay cả với trang web hoặc dịch vụ web, mục đích cuối cùng là phục vụ tốt hơn. Nếu một "trạng thái" là cải thiện dịch vụ của bạn, thì đừng ngần ngại đi với điều đó.

+2

Bạn có thể muốn làm rõ phần nào của google mà bạn đang nói đến. Google.com chính không phải là "trạng thái". – NotMe