2012-04-08 35 views
24

Tôi đang tìm một số tài nguyên về việc sử dụng ứng dụng Rails 3.0 nguyên khối hiện có (35K LOC) và tách nó ra thành một thiết kế SOA. Bất kỳ cuốn sách, blog, screencasts, hoặc các ứng dụng ví dụ sẽ là tuyệt vời.Tài nguyên và ví dụ về thiết kế SOA của Ruby on Rails

Các câu hỏi chính tôi đang tìm cách để trả lời là:

  • là SOA ngay cả những thiết kế phải không?
  • Tôi bắt đầu từ đâu?
  • Một số cạm bẫy phổ biến mà tôi có thể tránh là gì?
  • Tôi nên suy nghĩ gì bây giờ và tôi có thể làm gì sau này? (Tức là hiệu suất)

Một số nguồn tôi đã nhìn thấy nhưng không hoàn toàn chắc chắn nếu họ đúng chỗ để bắt đầu:

+0

Bạn cũng có thể muốn kiểm tra bằng cách sử dụng Rails Engines như một cách để mô đun hóa mã hóa. Các dịch vụ là tuyệt vời cho việc phân phối chức năng, nhưng cũng thêm một lớp hướng dẫn vào codebase không thích hợp cho tất cả các dự án. –

+0

@BenTaitelbaum cảm ơn mẹo. Đã không xem xét điều đó, nhưng chắc chắn sẽ làm một số nghiên cứu về nó. –

Trả lời

37

SOA có phải là thiết kế phù hợp không?

Tùy theo. Bạn không ghét những câu trả lời này? Chia nhỏ ứng dụng của bạn thành các dịch vụ được kết hợp lỏng lẻo bằng cách sử dụng tin nhắn hoặc các cuộc gọi API, theo định nghĩa, sẽ triển khai SOA.

Vẻ đẹp của nó là bạn có thể trao đổi việc triển khai dịch vụ mà không thay đổi giao diện của họ và cho phép triển khai độc lập mà không phải gỡ bỏ toàn bộ ứng dụng. Ngoài ra, tôi sẽ triển khai SOA thông qua các bộ điều khiển API chuyên biệt được phiên bản và hiển thị trạng thái tùy chỉnh thay vì toàn bộ trạng thái mà bạn dự trữ cho người dùng được xác thực hoặc phiên dựa trên vai trò.

Tình thế tiến thoái lưỡng nan, theo kinh nghiệm của tôi, là có triển khai các cuộc gọi đồng bộ hay không đồng bộ. Các cuộc gọi đồng bộ rõ ràng là dễ dàng hơn để lập trình, nhưng có thể khiến người dùng của bạn treo trong khi chúng đang được thực hiện và bạn phải xử lý hết thời gian chờ cho các truy vấn chạy dài. Xem ra thời gian chờ của cơ sở dữ liệu và máy chủ web.

Nếu bạn triển khai các cuộc gọi không đồng bộ, giả sử qua ActiveMessaging hoặc giống nhau, bạn phải xử lý cuộc gọi lại hoặc một số loại thông báo để bong bóng đến người dùng của bạn. Nó cũng đòi hỏi phải thiết lập các nhà môi giới thông điệp chính và phụ và có thể một số JavaScript hoặc các pollers để kiểm tra trạng thái. Đó là tất cả niềm vui mặc dù!

Tôi bắt đầu từ đâu?

Trước tiên tôi sẽ xem liệu nó có "đáng giá không": sau cùng, SOA rất tuyệt, nhưng lại giới thiệu nhiều điểm lỗi mà bạn hiện không có. Nếu bạn nghĩ rằng ứng dụng bị hỏng của bạn sẽ dẫn đến các dịch vụ rời rạc là HA và sẽ phục vụ các dự án khác, tôi sẽ bắt đầu với "cuốn sách khó đọc" và "hướng dịch vụ" như bạn đã đề cập.

Một số cạm bẫy phổ biến mà tôi có thể tránh là gì?

Tôi nghĩ rằng mối quan tâm lớn nhất sẽ là giao dịch trên nhiều dịch vụ và khả năng khôi phục toàn bộ hoạt động nếu dịch vụ ở xa không thành công. Các vấn đề bắt đầu nếu bạn đang ở trong một số hoạt động mà bạn gọi A và nó gọi B và B gọi C và C không thành công. Ai biết được rằng C thất bại? Làm thế nào bạn sẽ nói với B và A để quay trở lại? Họ có thể? Họ có lưu trạng thái không? Câu hỏi khó khăn cho thiết kế trả trước.

Một vấn đề khác là cuộc sống trở nên phức tạp khi bạn ném luồng công việc lên trên SOA của mình: ai là người quản lý quy trình nghiệp vụ? Tập trung hoặc phân phối? Đó là tất cả những thứ hoàn toàn mát mẻ một lần nữa, nhưng nặng nề creep trong, không? Nhưng đó là cuộc sống nếu bạn phải chuyển sang SOA.

Tôi nên suy nghĩ gì bây giờ và tôi có thể làm gì sau này? (ví dụ: hiệu suất)

Tôi muốn đưa ra các dịch vụ chung chung rõ ràng có thể được sử dụng trong các ứng dụng khác ngay bây giờ. Tôi sẽ không over-SOA môi trường của bạn để tránh thêm điểm thất bại và giữ cho những SOA giới thiệu ở mức tối thiểu.

2

Đây là một tài nguyên tuyệt vời từ bạn của tôi là CTO tại Crowdtap. Họ đã làm điều tương tự và nó đã thực sự giúp họ ồ ạt cải thiện vận tốc phát triển sản phẩm và cung cấp cho họ phạm vi kiểm tra tốt hơn. Hy vọng nó sẽ giúp https://www.youtube.com/watch?v=KsiQXAXsQDQ

Các vấn đề liên quan