2009-07-27 14 views
8

Tôi sắp đi sâu vào một dự án định hướng quy tắc (sử dụng các Quy tắc của ILOG cho .NET - bây giờ là IBM). Và tôi đã đọc một vài quan điểm khác nhau về cách thiết lập quy trình xử lý và cách tương tác với công cụ quy tắc. Hai quan điểm chính tôi đã thấy là tập trung công cụ quy tắc (vào trang trại máy chủ riêng) và chương trình chống lại trang trại thông qua API dịch vụ web (hoặc trong trường hợp ILOG qua WCF). Mặt khác là chạy một thể hiện của công cụ quy tắc trên mỗi máy chủ ứng dụng của bạn và tương tác với nó một cách cục bộ với mỗi cá thể có bản sao quy tắc riêng.Các phương pháp thích hợp để tương tác với một công cụ quy tắc

Phía lên để tập trung là dễ triển khai các quy tắc đến một vị trí tập trung. Quy mô quy mô như họ cần phải thay vì mở rộng quy mô mỗi khi bạn mở rộng cấu hình máy chủ ứng dụng của bạn. Điều này làm giảm chất thải từ góc độ giấy phép đã mua. Mặt trái của thiết lập này là phí bổ sung khi thực hiện cuộc gọi dịch vụ, thời gian chờ của mạng, v.v.

Ngược lại/ngược với động cơ quy tắc cục bộ ngược lại với hướng ngược/xuống của cấu hình tập trung. Không có cuộc gọi dịch vụ chậm (gọi API nhanh), không có vấn đề về mạng, mỗi máy chủ ứng dụng dựa vào chính nó. Việc quản lý việc triển khai các quy tắc trở nên phức tạp hơn. Mỗi khi bạn thêm một nút vào đám mây ứng dụng của mình, bạn sẽ cần thêm giấy phép cho các công cụ quy tắc.

Khi đọc báo trắng, tôi thấy rằng Amazon đang chạy công cụ quy tắc cho mỗi cấu hình máy chủ ứng dụng. Chúng xuất hiện để triển khai chậm các quy tắc và nhận ra rằng độ trễ trong xuất bản quy tắc là "có thể chấp nhận" mặc dù logic nghiệp vụ không đồng bộ trong một khoảng thời gian nhất định.

Câu hỏi: Từ kinh nghiệm của bạn, cách tốt nhất để bắt đầu tích hợp quy tắc vào ứng dụng web dựa trên .net cho cửa hàng chưa dành nhiều thời gian làm việc trong thế giới hướng quy tắc là gì?

+0

Các lập trình viên phải là công cụ * viết * quy tắc. Các nhà phân tích nghiệp vụ thiết lập các quy tắc trên công cụ quy tắc và phải có giao diện GUI để tạo quy tắc và lưu vào XML hoặc cơ sở dữ liệu. Thật vậy, hầu hết các công cụ quy tắc đều không tích hợp được quy trình quản lý luồng công việc phù hợp và chỉ xử lý các quy tắc, do đó việc triển khai FCRE bắt đầu thêm quá phức tạp cho các nhà phân tích nghiệp vụ nghèo, người bắt đầu yêu cầu các lập trình viên trợ giúp họ. Việc triển khai chậm các quy tắc là không thể chấp nhận được trong một môi trường kinh doanh tài chính, và do đó có lẽ như vậy trong các môi trường khác. – JeeBee

+0

Nhưng các lập trình viên cũng cần phải trưng ra các móc nối và các điểm dữ liệu cho các công cụ quy tắc để BA làm việc với. Các ứng dụng mà chúng tôi viết phải gắn vào công cụ quy tắc bằng cách nào đó. –

+0

Vâng, ứng dụng của bạn đưa dữ liệu vào công cụ quy tắc, công cụ quy tắc chạy quy tắc, tính toán, quy trình tùy chỉnh (nơi các lập trình viên đến, ví dụ: nếu bạn cần thêm cuộc gọi webservice nửa chừng trong quá trình thực hiện quy trình công việc của mình) . Giao diện (dịch vụ web, gọi phương thức trực tiếp) phải khá chung chung. Các BA xác định tên dữ liệu mà chúng làm việc với, và đó là những gì bạn vượt qua. Dĩ nhiên tôi chắc chắn rằng các luồng công việc tài chính khác với các quy trình công việc/quy tắc khác. Chúng tôi lưu trữ các công cụ quy tắc của chúng tôi trong Tomcat và gọi cho chúng thông qua dịch vụ web (chi phí nhỏ trên chính các quy tắc). – JeeBee

Trả lời

2

Chúng tôi đang sử dụng ILOG cho DotNet và có dự án thí điểm được triển khai.

Dưới đây là một bản tóm tắt của Kiến trúc Quy định non nớt của chúng tôi:

  1. Tất cả các dữ liệu truy cập thực hiện bên ngoài các quy tắc.
  2. Quy tắc được triển khai giống như mã (kiểm soát nguồn, quá trình phát hành, yada yada).
  3. Các dự án (dịch vụ) sử dụng Quy tắc có tham chiếu đến ILOG.Rules.dll và RuleEngines mới lên thông qua lớp tổng hợp tùy chỉnh. RuleEngines được gộp lại bởi vì tốn kém để ràng buộc một RuleSet với một RuleEngine.
  4. Hầu hết các quy tắc được viết để mong đợi các đối tượng Assert'd, thay vì các tham số RuleFlow.
  5. Vì quy tắc chạy trong cùng một không gian bộ nhớ, các trường hợp được sửa đổi theo các quy tắc là cùng một trường hợp trong chương trình - tức là tuyên truyền của tiểu bang.
  6. Hầu như tất cả các quy tắc đều được chạy qua RuleFlow (ngay cả khi nó là một RuleStep duy nhất trong RuleFlow).

Chúng tôi đang xem RuleExecutionServer làm nền tảng lưu trữ cũng như RuleTeamServerForSharePoint làm máy chủ lưu trữ cho nguồn quy tắc. Cuối cùng, chúng tôi sẽ có Quy tắc được triển khai để sản xuất bên ngoài quy trình phát hành mã.

Trở ngại chính trong tất cả các nỗ lực Quy tắc của chúng tôi là Kỹ năng lập mô hình và quy tắc.

3

Tôi chưa bao giờ thích đối số tập trung. Nó có nghĩa là tất cả mọi thứ được kết hợp vào các công cụ quy tắc, mà trở thành một bãi rác cho tất cả các quy tắc trong hệ thống. Khá sớm bạn không thể thay đổi bất cứ điều gì vì sợ cái chưa biết: "Chúng ta sẽ phá vỡ cái gì?"

Tôi rất thích theo ý tưởng của Amazon về dịch vụ như các thành phần độc lập, tự trị. Tôi hiểu rằng điều đó có nghĩa là các dịch vụ sở hữu dữ liệu của họ và các quy tắc của họ.

Điều này có thêm lợi ích khi phân vùng không gian quy tắc. Một bộ quy tắc trở nên khó duy trì hơn khi nó phát triển; tốt hơn để giữ chúng ở kích thước có thể quản lý.

Nếu các phần của tập hợp quy tắc được chia sẻ, tôi thích phương pháp DI theo hướng dữ liệu, nơi dịch vụ có thể có thể hiện riêng của công cụ quy tắc và tải các quy tắc chung từ cơ sở dữ liệu khi khởi động. Điều này có thể không khả thi nếu giấy phép iLog của bạn làm cho nhiều trường hợp bị cấm. Đó sẽ là một trường hợp mà sản phẩm được cho là đang giúp đỡ thực sự có thể quyết định lựa chọn kiến ​​trúc sẽ mang lại đau buồn. Nó sẽ là một lý lẽ tốt cho một giải pháp thay thế ít tốn kém hơn (ví dụ: Các quy tắc JBoss trong vùng đất Java).

Còn cách tiếp cận cây quyết định theo hướng dữ liệu thì sao? Là một động cơ quy tắc Rete thực sự cần thiết, o là quyết định "công cụ doanh nghiệp" lái xe lựa chọn của bạn?

Tôi cố gắng thiết lập công cụ quy tắc để nó được tách ra khỏi phần còn lại của doanh nghiệp nhất có thể. Tôi sẽ không có nó gọi ra cơ sở dữ liệu hoặc dịch vụ nếu tôi có thể. Tốt hơn để làm cho rằng trách nhiệm của các đối tượng yêu cầu một quyết định. Hãy để họ gọi đến các dịch vụ web và cơ sở dữ liệu cần thiết để lắp ráp các dữ liệu cần thiết, chuyển nó đến công cụ quy tắc và để nó thực hiện điều đó.Khớp nối là kẻ thù của bạn: Hãy thử thiết kế hệ thống của bạn để giảm thiểu nó. Việc giữ các công cụ quy tắc được phân lập là một cách hay để thực hiện.

0

Theo kinh nghiệm của tôi về các công cụ quy tắc, chúng tôi đã áp dụng một bộ thực hành khá cơ bản để điều chỉnh tương tác với công cụ quy tắc. Trước hết, chúng luôn là các công cụ quy tắc thương mại (iLog, Corticon) và không phải mã nguồn mở (Drools), do đó triển khai cục bộ cho mỗi máy chủ ứng dụng chưa bao giờ thực sự là một lựa chọn khả thi do chi phí cấp phép. Do đó, chúng tôi đã luôn luôn đi với mô hình tập trung, mặc dù trong hai hương vị chính:

  • Thực hiện từ xa của Web Service - Trong cùng một cách mà bạn chỉ định trong câu hỏi của bạn, chúng tôi thực hiện cuộc gọi đến các dịch vụ dựa trên SOAP được cung cấp bởi sản phẩm động cơ quy tắc. Trong lĩnh vực dịch vụ web, chúng tôi đã đưa ra một số tùy chọn: (1) "Boxcar" các yêu cầu, cho phép ứng dụng xếp hàng các yêu cầu xử lý quy tắc và gửi chúng qua các phần khác với các thông báo một lần; (2) Điều chỉnh các tùy chọn luồng và quy trình do nhà cung cấp cung cấp. Điều này bao gồm việc cho phép tách các dịch vụ ra quyết định theo chức năng và phân bổ từng W3WP và/hoặc sử dụng các khu vườn trên web. Có rất nhiều điều chỉnh bạn có thể thực hiện với các boxcars, threads, và process và nhận được sự pha trộn đúng là một quá trình thử và sai (và biết các ruleset và dữ liệu của bạn) hơn là một khoa học chính xác.
  • Gọi từ xa Công cụ quy tắc trong quy trình - Bí quyết kiểu hàng loạt cổ điển để tránh chi phí quá trình serialization và de-serialization. Thực hiện cuộc gọi từ xa để kích hoạt cuộc gọi trong quá trình tới công cụ quy tắc. Điều này có thể được thực hiện theo lịch biểu (ví dụ: hàng loạt) hoặc dựa trên nhu cầu (tức là "hộp" yêu cầu). Dù bằng cách nào, rất nhiều chi phí của các cuộc gọi dịch vụ có thể tránh được bằng cách tương tác trực tiếp với quy trình và cơ sở dữ liệu. Nhược điểm của quá trình này là bạn không có IIS hoặc EJB/Servlet container của bạn quản lý các chủ đề cho bạn và bạn phải tự mình làm điều đó.
2

Tôi không có nhiều điều để nói về câu hỏi "máy chủ nào" nhưng tôi muốn bạn phát triển các dịch vụ quyết định - dịch vụ có thể gọi sử dụng quy tắc để đưa ra quyết định nhưng không thay đổi trạng thái của doanh nghiệp. Để ứng dụng/dịch vụ/quy trình gọi quyết định dữ liệu nào thay đổi để thực hiện dịch vụ quyết định và yêu cầu thành phần gọi thực sự khởi động (các) hành động được đề xuất bởi dịch vụ quyết định giúp sử dụng dịch vụ quyết định dễ dàng hơn một lần nữa (trên các kênh, quy trình, v.v.). Các sạch hơn và ít gắn liền với phần còn lại của cơ sở hạ tầng các dịch vụ quyết định càng tái sử dụng và quản lý nó sẽ được. Cuộc thảo luận here on ebizQ có thể đáng đọc trong vấn đề này.