Frage

Ich freue mich über Tauchen Sie ein in die Regeln orientierten Projekts (mit ILOGs Regeln für .NETZ - jetzt IBM).Und ich habe ein paar verschiedene Perspektiven in Bezug auf, wie die Regeln der Verarbeitung und den Umgang mit der Regel-engine.

Die zwei wichtigsten Gedanken, die ich gesehen habe, ist das zentralisieren der Regel-engine - (in seinen eigenen Betrieb der Server), und das Programm gegen die farm über eine web-service-API (oder in ILOG Fall über WCF).Die andere Seite ist, zum ausführen einer Instanz der Regel-engine auf jedem app-Server und mit ihm interagieren lokal mit jeder Instanz mit seiner eigenen Kopie der Regeln.

Die Seite bis zu Zentralisierung ist die einfache Implementierung der Regeln zu einem zentralen Standort aus.Die Regeln Skala, wie Sie brauchen, anstatt die Skalierung jedes mal, wenn Sie erweitern Sie Ihre Anwendungs-server-Konfiguration.Dies reduziert die Verschwendung von einem erworbenen Lizenz-Perspektive.Der Nachteil an diesem set-up ist den zusätzlichen Aufwand für service-Anrufe, Netzwerk-Latenz, etc.

Der Vorteil/Nachteil lokal ausgeführt wird die Regel-engine ist das genaue Gegenteil von der zentralisierten Konfiguration upside/downside.Keine langsamen service-Aufrufe (schnell-API-Aufrufe), keine Netzwerk-Problemen, die jeder app-server verlässt sich auf Sie selbst.Verwalten der Bereitstellung von Regeln komplexer wird.Jedes mal, wenn Sie einen Knoten hinzufügen, um Ihre app-cloud-benötigen Sie weitere Lizenzen für Regel-engines.

Im Lesen von Whitepapers ich sehe, dass Amazon mit der Regel-engine-pro-app-server-Konfiguration.Sie erscheinen zu tun, eine langsame Bereitstellung von Regeln und erkennen an, dass die Verzögerung in der Regel publishing "akzeptabel" auch wenn die business-Logik aus eine Synchronisierung für einen bestimmten Zeitraum.

Frage: Aus Ihren Erfahrungen, was ist der beste Weg, um zu starten die Integration von Regeln in einer .net-basierte web-app für ein Geschäft, das noch nicht verbrachte viel Zeit mit der Arbeit in einer von Regeln bestimmten Welt?

War es hilfreich?

Lösung

Wir verwenden ILOG Für DotNet und haben ein Pilotprojekt zum Einsatz.

Hier ist eine Zusammenfassung unserer unreifen Regeln Architektur:

  1. Alle Datenzugriff erfolgt außerhalb von Regeln.
  2. Die Regeln werden auf die gleiche Weise wie Code (Source-Control, Freigabeprozess, Blabla) eingesetzt.
  3. Projekte (Dienstleistungen), dass die Verwendung Regeln haben einen Verweis auf ILOG.Rules.dll und neu-up RuleEngines über eine benutzerdefinierte Pooling-Klasse. RuleEngines gepoolt werden, weil es teuer ist, eine RuleSet zu einem RuleEngine zu binden.
  4. Fast alle Regeln geschrieben erwarten Assert'd Objekte, anstatt Ruleflow Parameter.
  5. Da die Regeln in dem gleichen Speicherbereich ausgeführt, Instanzen, die durch die Regeln geändert werden, sind die gleiche Instanzen im Programm -., Die unmittelbar ist Ausbreitung Zustand
  6. Fast alle Regeln laufen über Ruleflow (auch wenn es sich um eine einzelne RuleStep im Ruleflow ist).

Wir suchen auf RuleExecutionServer als Hosting-Plattform sowie RuleTeamServerForSharePoint der Host für Regeln Quelle. Schließlich werden wir Regeln eingesetzt, um die Produktion außerhalb des Codes Freigabeprozesses.

Das Haupthindernis in allen unserer Regel bestrebt ist Modellierung und Rule Authoring Skillset.

Andere Tipps

Ich mochte nie die Zentralisierung Argument. Es bedeutet, dass alles, was in die Regeln Motor gekoppelt ist, die für alle die Regeln in dem System einen Abladeplatz wird. Schon bald kann man nichts aus Angst vor dem Unbekannten ändern: „Was werden wir brechen“

ich viel lieber nach Amazon Idee von Dienstleistungen wie isoliert, eigenständige Komponenten. Ich interpretiere das bedeutet, dass die Dienste besitzen, ihre Daten und ihre Regeln .

Dies hat den zusätzlichen Vorteil, die Regeln Raum der Partitionierung. Ein Regelsatz wird schwieriger zu pflegen, wie es wächst; besser, um sie auf eine überschaubare Größe.

Wenn Teile des Regelsatzes gemeinsam genutzt werden, würde ich einen datengesteuerten bevorzugen, DI Ansatz, bei dem ein Dienst kann seine eigene Instanz einer Regel-Engine hat und die gemeinsame Regeln aus einer Datenbank beim Start laden. Dies könnte nicht möglich sein, wenn Ihre iLog Lizenz mehrere Instanzen Kosten unerschwinglich macht. Das wäre ein Fall, in dem Produkt, das tatsächlich architektonische Entscheidungen werden könnte, zu helfen, angenommen hat, diktiert die Trauer bringen wird. Es wäre ein gutes Argument für eine preiswertere Alternative sein (zum Beispiel JBoss Rules in Java-Land).

Was ist mit einem datengesteuerten Entscheidungsbaum Ansatz? Ist ein Rete Motor wirklich notwendige Regeln, o die „Enterprise-Tool“ Entscheidung ist Ihre Wahl fahren?

Ich würde versuchen, die Regel-Engine einzurichten, so dass es wie vom Rest des Unternehmens wie möglich entkoppelt wurde. Ich habe es nicht auf Datenbanken oder Dienste zu rufen, wenn ich könnte. Besser zu machen, dass die Verantwortung der Objekte für eine Entscheidung zu fragen. Lassen Sie sie auf die notwendigen Web-Services und Datenbanken aufrufen, um die notwendigen Daten zu montieren, übergeben sie an die Regel-Engine, und lassen Sie es nicht sein Ding. Die Kupplung ist dein Feind: Versuchen Sie Ihr System zu entwerfen, sie zu minimieren. Keeping Regeln Motoren isoliert ist ein guter Weg, es zu tun.

Ich habe nicht viel auf der „Server, die“ Frage zu sagen, aber ich möchte Sie bittet Entscheidung Dienstleistungen zu entwickeln - abrufbare Leistungen, dass die Verwendung Regeln, Entscheidungen zu treffen, sondern dass die Lage des Unternehmens nicht ändern. Lassen die anruf application / service / Prozess entscheiden, welche Daten als Ergebnis zu machen, ändert die Entscheidung Dienst aufrufen und mit dem Aufruf Komponente initiieren tatsächlich die Aktion (en) durch die Entscheidung Dienst vorgeschlagen erleichtert die Entscheidung Service zu nutzen und immer wieder (über alle Kanäle hinweg, Prozesse etc.). Der Reiniger und weniger gebunden an den Rest der Infrastruktur der Entscheidung Dienst desto wiederverwendbar und überschaubar es sein wird. Die Diskussion hier auf ebizQ könnte in dieser Hinsicht lesenswert sein .

Meine Erfahrung mit Regel-engines, die wir angewendet haben, eine ziemlich grundlegende Reihe von übungen, um zu regieren Interaktion mit der Regel-engine.Erste von alle, diese haben immer handelsrechtlichen Vorschriften Motoren (iLog, Corticon) und nicht open source (Drools), daher bereitstellen lokal auf jedem der app-Server hat nie wirklich eine gangbare option aufgrund von Lizenz-Kosten.Daher haben wir immer gegangen, mit der zentralisiertes Modell, wenn auch in zwei primäre Aromen:

  • Remote-Ausführung von Web-Service - In der gleichen Weise, die Sie angegeben haben, in Ihrer Frage, die wir machen, Aufrufe von SOAP-basierten Diensten zur Verfügung gestellt von der Regel-engine-Produkt.Innerhalb der web-service Bereich, wir sind gekommen, bei der mehrere Optionen:(1) "Boxcar" die Anfragen, sodass die Anwendung in die Warteschlange Regeln die Verarbeitung von Anfragen und senden Sie diese in Stücke, im Gegensatz zu one-off-Meldungen;(2) drehen Sie den Gewinde-und Prozess Optionen zur Verfügung gestellt durch die Hersteller.Dies schließt ermöglicht Trennung von Entscheidung, die services von Funktion und Zuordnung jedes eine W3WP und/oder die Verwendung von web-Gärten.Es ist ein schrecklich viel tweaking, die Sie tun können mit boxcars, threads und Prozesse und die richtige Mischung ist mehr ein Prozess von Versuch und Irrtum (und zu wissen, Ihre Regelsätze und Daten) als eine exakte Wissenschaft.
  • Aus der Ferne Rufen Sie die Regel-Engine im Prozess - Eine klassische batch-Stil-trick, um zu vermeiden, den overhead der Serialisierung und de-Serialisierung.Aus der Ferne tätigen Sie einen Anruf, der ausgelöst wird, bis ein in-process-Aufruf an die Regeln Motor.Dies kann getan werden entweder eingeplant (z.B.batch) oder basierend auf die Nachfrage (d.h."boxcars" der Anfragen).Entweder Art und Weise eine Menge der Aufwand für das service-Aufrufe, kann vermieden werden, indem die direkte Interaktion mit dem Prozess und der Datenbank.Nachteil dieses Prozesses ist, dass Sie nicht über IIS oder des EJB/Servlet-container die Verwaltung der threads, die für Sie und Sie haben es selbst zu tun.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top