2009-07-27 10 views
8

Estoy a punto de sumergirme en un proyecto orientado a las reglas (usando las reglas de ILOG para .NET - ahora IBM). Y he leído un par de perspectivas diferentes sobre cómo configurar el procesamiento de reglas y cómo interactuar con el motor de reglas.Métodos preferidos para interactuar con un motor de reglas

Las dos ideas principales que he visto es centralizar el motor de reglas (en su propia granja de servidores) y programar contra la granja mediante una API de servicio web (o en el caso de ILOG mediante WCF). El otro lado es ejecutar una instancia del motor de reglas en cada uno de los servidores de aplicaciones e interactuar con él localmente, y cada instancia tiene su propia copia de las reglas.

La ventaja de la centralización es la facilidad de implementación de las reglas en una ubicación centralizada. Las reglas se escalan según lo necesitan en lugar de escalar cada vez que expandes la configuración de tu servidor de aplicaciones. Esto reduce el desperdicio desde una perspectiva de licencia adquirida. El inconveniente de esta configuración es la sobrecarga adicional de realizar llamadas de servicio, latencia de red, etc.

El lado positivo/negativo para ejecutar localmente el motor de reglas es exactamente lo contrario del lado positivo/negativo de la configuración centralizada. Sin llamadas de servicio lento (llamadas API rápidas), sin problemas de red, cada servidor de aplicaciones se basa en sí mismo. La administración del despliegue de reglas se vuelve más compleja. Cada vez que agregue un nodo a la nube de su aplicación, necesitará más licencias para motores de reglas.

Al leer documentos técnicos, veo que Amazon ejecuta el motor de reglas por configuración de servidor de aplicaciones. Parece que hacen un despliegue lento de las reglas y reconocen que el retraso en la publicación de reglas es "aceptable", aunque la lógica empresarial no esté sincronizada durante un período de tiempo determinado.

Pregunta: Según sus experiencias, ¿cuál es la mejor manera de comenzar a integrar reglas en una aplicación web basada en .NET para una tienda que aún no ha dedicado mucho tiempo a trabajar en un mundo gobernado por reglas?

+0

Los programadores deberían estar * escribiendo * reglas motores. Los analistas de negocios establecen reglas sobre el motor de reglas, y deben tener una interfaz GUI para la creación de reglas y guardarlas en XML o en una base de datos. De hecho, la mayoría de las máquinas de reglas no logran integrar una gestión de flujo de trabajo adecuada y solo manejan las reglas, de ahí las implementaciones de FCRE que comienzan a agregar complejidad excesiva para los analistas de negocios pobres, quienes luego comienzan a exigir que los programadores los ayuden. La implementación lenta de las reglas es inaceptable en un entorno comercial financiero, y, por lo tanto, presumiblemente en otros entornos. – JeeBee

+0

Pero los programadores también necesitan exponer ganchos y puntos de datos a los motores de reglas para que los BA trabajen. Las aplicaciones que escribimos deben vincularse con el motor de reglas de alguna manera. –

+0

Sí, sus aplicaciones colocan datos en el motor de reglas, el motor de reglas ejecuta reglas, cálculos, procesos personalizados (donde entran los programadores, por ejemplo, si necesita agregar una llamada de servicio web a mitad de su ejecución del flujo de trabajo) y contesta respuestas . La interfaz (servicio web, llamada directa al método) debe ser bastante genérica. Los BA definen los nombres de datos con los que trabajan, y eso es lo que se pasa. Por supuesto, estoy seguro de que los flujos de trabajo financieros difieren de otros flujos de trabajo/motores de reglas. Alojamos nuestros motores de reglas en Tomcat, y los llamamos a través de un servicio web (una pequeña sobrecarga sobre las reglas mismas). – JeeBee

Respuesta

2

Estamos utilizando ILOG para DotNet y tenemos un proyecto piloto implementado.

He aquí un resumen de las Reglas inmadura Arquitectura:

  1. Todos los datos de acceso se hayan realizado fuera de las normas.
  2. Las reglas se implementan de la misma manera que el código (control de fuente, proceso de publicación, yada yada).
  3. Los proyectos (servicios) que usan reglas tienen una referencia a ILOG.Rules.dll y RuleEngines nuevos a través de una clase de agrupación personalizada. RuleEngines se agrupan porque es costoso vincular un RuleSet a un RuleEngine.
  4. Casi todas las reglas se escriben para esperar objetos Assert, en lugar de parámetros RuleFlow.
  5. Dado que las reglas se ejecutan en el mismo espacio de memoria, las instancias modificadas por las reglas son mismas instancias en el programa, que es la propagación de estado inmediata.
  6. Casi todas las reglas se ejecutan mediante RuleFlow (incluso si se trata de un solo RuleStep en RuleFlow).

Estamos pensando en RuleExecutionServer como una plataforma de alojamiento, así como RuleTeamServerForSharePoint para ser el anfitrión de fuente de reglas. Finalmente, tendremos las Reglas desplegadas en la producción fuera del proceso de publicación del código.

El principal obstáculo en todos nuestros empeños de Regla es el Modelado y la Autoría de Regla.

3

Nunca me gustó el argumento de centralización. Significa que todo está acoplado al motor de reglas, que se convierte en un vertedero para todas las reglas del sistema. Muy pronto no puedes cambiar nada por miedo a lo desconocido: "¿Qué vamos a romper?"

Prefiero seguir la idea de Amazon de los servicios como componentes aislados y autónomos. Interpreto eso para indicar que los servicios poseen sus datos y sus reglas.

Esto tiene el beneficio adicional de dividir el espacio de reglas. Un conjunto de reglas se vuelve más difícil de mantener a medida que crece; mejor para mantenerlos a un tamaño manejable.

Si se comparten partes del conjunto de reglas, preferiría un enfoque DI orientado a datos, donde un servicio puede tener su propia instancia de motor de reglas y cargar las reglas comunes desde una base de datos al inicio. Esto podría no ser posible si su licencia de iLog hace que el costo de las instancias múltiples sea prohibitivo. Ese sería un caso en el que el producto que supuestamente ayudaría en realidad podría estar dictando decisiones arquitectónicas que traerán dolor. Sería un buen argumento para una alternativa menos costosa (por ejemplo, reglas de JBoss en Java-land).

¿Qué tal un enfoque de árbol de decisión basado en datos? ¿Es realmente necesario un motor de reglas Rete, o es la decisión de la "herramienta empresarial" la que impulsa su elección?

Intentaría configurar el motor de reglas para que estuviera lo más desacoplado posible del resto de la empresa. Yo no lo haría llamando a bases de datos o servicios si pudiera. Es mejor hacer que eso sea responsabilidad de los objetos que piden una decisión. Déjelos llamar a los servicios web y bases de datos necesarios para reunir los datos necesarios, pasarlos al motor de reglas y dejar que hagan su trabajo.El acoplamiento es tu enemigo: intenta diseñar tu sistema para minimizarlo. Mantener las reglas de motores aisladas es una buena manera de hacerlo.

0

En mi experiencia con los motores de reglas, hemos aplicado un conjunto bastante básico de prácticas para gobernar la interacción con el motor de reglas. En primer lugar, estos siempre han sido motores de reglas comerciales (iLog, Corticon) y no de código abierto (Drools), por lo tanto, implementar localmente en cada uno de los servidores de aplicaciones nunca ha sido realmente una opción viable debido a los costos de licencia. Por lo tanto, siempre hemos ido con el modelo centralizado, aunque en dos sabores primarios:

  • la ejecución remota de servicio Web - De la misma manera que ha especificado en su pregunta, hacemos llamadas a los servicios basados ​​en SOAP provisto por el producto de motor de reglas. Dentro del ámbito del servicio web, hemos encontrado varias opciones: (1) "Boxcar" las solicitudes, lo que permite a la aplicación poner en cola las solicitudes de procesamiento de reglas y enviarlas en fragmentos en lugar de mensajes únicos; (2) Ajuste las opciones de subprocesamiento y proceso proporcionadas por el proveedor. Esto incluye permitir separar los servicios de decisión por función y asignar cada uno un W3WP y/o usar jardines virtuales. Hay una gran cantidad de ajustes que puede hacer con los vagones de caja, los hilos y los procesos, y obtener la mezcla correcta es más un proceso de prueba y error (y conocer los conjuntos de reglas y los datos) que una ciencia exacta.
  • Llamar de forma remota al motor de reglas en proceso - Un truco de estilo de lote clásico para evitar la sobrecarga de serialización y deserialización. Haga una llamada de forma remota que active una llamada en proceso al motor de reglas. Esto se puede hacer ya sea programado (por ejemplo, lote) o en función de la demanda (es decir, "vagones" de solicitudes). De cualquier manera, muchas de las tareas generales de las llamadas de servicio pueden evitarse al interactuar directamente con el proceso y la base de datos. Lo malo de este proceso es que no tiene IIS ni su contenedor EJB/Servlet administrando los hilos por usted y debe hacerlo usted mismo.
2

No tengo mucho que decir sobre la pregunta "¿Qué servidor? Pero lo instaría a desarrollar servicios de decisión: servicios invocables que usan reglas para tomar decisiones pero que no cambian el estado de la empresa. Dejar que la aplicación/servicio/proceso de llamada decida qué cambios de datos debe realizar al llamar al servicio de decisión y hacer que el componente llamante inicie realmente la (s) acción (es) sugerida (s) por el servicio de decisión facilita el uso del servicio de decisión una y otra vez de nuevo (a través de canales, procesos, etc.). Más limpio y menos vinculado al resto de la infraestructura, el servicio de decisiones será más reutilizable y manejable. Puede valer la pena leer la discusión here on ebizQ al respecto.

Cuestiones relacionadas