문제

규칙 지향적 프로젝트 (.NET -IBM에 ILOGS 규칙 사용)로 뛰어 들려고합니다. 그리고 규칙 처리를 설정하는 방법과 규칙 엔진과 상호 작용하는 방법에 대한 몇 가지 다른 관점을 읽었습니다.

내가 본 두 가지 주요 생각은 규칙 엔진 (자체 서버 농장)을 중앙 집중화하고 웹 서비스 API (또는 WCF를 통한 ILOG의 경우)를 통해 농장에 대한 프로그램을하는 것입니다. 다른 쪽은 각 앱 서버에서 규칙 엔진 인스턴스를 실행하고 자체 규칙 사본을 갖는 각 인스턴스와 로컬로 상호 작용하는 것입니다.

중앙 집중화의 중앙 집중화는 규칙을 중앙 집중식 위치로 쉽게 배치하는 것입니다. 애플리케이션 서버 구성을 확장 할 때마다 스케일링하기보다는 규칙 규모가 규모입니다. 이것은 구매 한 라이센스 관점에서 폐기물을 줄입니다. 이 설정의 아래쪽은 서비스 호출, 네트워크 대기 시간 등의 추가 오버 헤드입니다.

규칙 엔진을 로컬로 작동하는 상향/단점은 중앙 집중식 구성의 상승/하부와 정반대입니다. 느린 서비스 호출 (빠른 API 호출), 네트워크 문제 없음, 각 앱 서버는 자체적으로 의존합니다. 규칙 배포 관리가 더욱 복잡해집니다. 앱 클라우드에 노드를 추가 할 때마다 룰 엔진에 대한 더 많은 라이센스가 필요합니다.

백서를 읽을 때 Amazon이 앱 서버 구성 별 규칙 엔진을 실행하고 있음을 알 수 있습니다. 그들은 규칙을 느리게 배치하는 것으로 보이며 비즈니스 논리가 주어진 기간 동안 동기화되지 않더라도 규칙 게시의 지연이 "허용 가능"임을 인식합니다.

의문: 경험을 통해 규칙을 중심으로 일하는 데 많은 시간을 소비하지 않은 상점을 위해 규칙을 .NET 기반 웹 앱에 통합하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

우리는 DotNet 용 Ilog를 사용하고 있습니다 배포 된 파일럿 프로젝트가 있습니다.

미성숙 규칙 아키텍처에 대한 요약은 다음과 같습니다.

  1. 규칙 이외의 모든 데이터 액세스.
  2. 규칙은 코드 (소스 제어, 릴리스 프로세스, Yada Yada)와 동일한 방식으로 배포됩니다.
  3. 규칙을 사용하는 프로젝트 (서비스)는 ILOG.Rules.dll 사용자 정의 풀링 클래스를 통한 새로운 규칙자. 규칙 세트를 규칙 세트에 바인딩하는 데 비싸기 때문에 규칙자는 풀링됩니다.
  4. 거의 모든 규칙은 규칙 흐름 매개 변수보다는 Assert'd 객체를 기대하도록 작성됩니다.
  5. 규칙은 동일한 메모리 공간에서 실행되므로 규칙에 의해 수정 된 인스턴스는 동일한 인스턴스 프로그램에서 - 국가의 즉각적인 전파입니다.
  6. 거의 모든 규칙은 RuleFlow를 통해 실행됩니다 (RuleFlow의 단일 규칙이더라도).

우리는 규칙 소스의 호스트가되기 위해 ruleteamserverforsharepoint뿐만 아니라 호스팅 플랫폼으로 inribeexecutionserver를보고 있습니다. 결국, 우리는 코드 릴리스 프로세스 이외의 생산에 규칙을 배치 할 것입니다.

우리의 모든 규칙 노력의 주요 장애물은 모델링 및 규칙 제작 기술입니다.

다른 팁

나는 중앙 집중식 논쟁을 좋아하지 않았다. 이는 모든 것이 규칙 엔진에 결합되어 시스템의 모든 규칙에 대한 덤핑 접지가된다는 것을 의미합니다. 곧 당신은 미지의 것에 대한 두려움 때문에 아무것도 바꿀 수 없습니다 : "우리는 무엇을 깨뜨릴 것인가?"

나는 Amazon의 서비스에 대한 아이디어를 고립되고 자율적 인 구성 요소로 선호합니다. 나는 서비스가 그들의 데이터를 소유한다는 것을 의미한다고 해석합니다. 그리고 그들의 규칙.

이것은 규칙 공간을 분할 할 수있는 이점이 추가되었습니다. 규칙 세트는 성장함에 따라 유지하기가 더 어려워집니다. 관리 가능한 크기로 유지하는 것이 좋습니다.

규칙 세트의 일부가 공유되면 서비스가 자체 규칙 엔진 인스턴스를 갖고 시작시 데이터베이스에서 공통 규칙을로드 할 수있는 데이터 중심의 DI 접근 방식을 선호합니다. ILOG 라이센스로 인해 여러 인스턴스 비용이 엄청난 비용을 지불하는 경우에는 실현할 수 없습니다. 도움이되는 제품이 실제로 슬픔을 가져다 줄 건축 적 선택을 지시하는 경우가 될 것입니다. 저렴한 대안 (예 : Java-Land의 Jboss 규칙)에 대한 좋은 주장이 될 것입니다.

데이터 중심 의사 결정 트리 접근 방식은 어떻습니까? RETE Rules Engine이 정말로 필요한가?

규칙 엔진을 설정하려고 노력하여 가능한 한 다른 기업에서 분리되었습니다. 가능하다면 데이터베이스 나 서비스에 전화하지 않을 것입니다. 결정을 요구하는 물건의 책임을 더 잘하는 것이 좋습니다. 필요한 웹 서비스 및 데이터베이스를 호출하여 필요한 데이터를 조립하고 규칙 엔진으로 전달한 다음 작업을 수행하도록하십시오. 커플 링은 적입니다 : 시스템을 최소화하기 위해 시스템을 설계하십시오. 규칙 엔진을 분리하는 것은 좋은 방법입니다.

"어떤 서버"질문에 대해서는 할 말이 많지 않지만 의사 결정 서비스를 개발할 것을 촉구합니다 - 결정을 내리기 위해 규칙을 사용하지만 비즈니스 상태를 바꾸지 않는 호출 가능한 서비스. 통화 응용 프로그램/서비스/프로세스가 의사 결정 서비스를 호출 한 결과로 결정할 데이터가 변경되고 통화 구성 요소가 실제로 의사 결정 서비스가 제안한 조치를 시작하도록하는 데이터 변경을 결정하게하면 의사 결정 서비스를 계속해서 더 쉽게 사용할 수 있습니다. 다시 (채널, 프로세스 등). 더 깨끗하고 나머지 인프라와 관련이 있고 의사 결정 서비스가 더 재사용 가능하고 관리 가능할 것입니다. 토론 여기 eBizq에서 이와 관련하여 읽을 가치가있을 수 있습니다.

규칙 엔진에 대한 경험에서 우리는 규칙 엔진과의 상호 작용을 관리하기 위해 매우 기본적인 관행 세트를 적용했습니다. 우선, 이들은 항상 상용 규칙 엔진 (ILOG, CORTICON)이었으며 오픈 소스 (Drools)가 아니 었으므로 각 앱 서버에 로컬로 배포하는 것은 라이센스 비용으로 인해 실제로 실행 가능한 옵션이 아닙니다. 따라서 우리는 두 가지 주요 풍미에도 불구하고 항상 중앙 집중식 모델을 사용했습니다.

  • 웹 서비스의 원격 실행 - 귀하의 질문에 명시한 것과 같은 방식으로, 당사는 규칙 엔진 제품에서 제공하는 SOAP 기반 서비스를 호출합니다. 웹 서비스 영역 내에서 우리는 몇 가지 옵션을 제공했습니다. (1) 요청을 "BoxCar"로, 응용 프로그램이 규칙 처리 요청을 대기하고 일회성 메시지와 달리 청크로 보낼 수 있습니다. (2) 공급 업체가 제공 한 스레딩 및 프로세스 옵션을 조정합니다. 여기에는 기능별로 의사 결정 서비스를 분리하고 W3WP를 각각 할당하거나 웹 가든을 사용하는 것이 포함됩니다. 박스 카, 스레드 및 프로세스로 할 수있는 많은 조정이 있으며 올바른 믹스를 얻는 것은 정확한 과학보다 시행 착오 (규칙 세트와 데이터를 아는 것)의 과정입니다.
  • 프로세스에서 규칙 엔진을 원격으로 호출하십시오 - 직렬화 및 탈사의 오버 헤드를 피하기위한 고전적인 배치 스타일 트릭. 원격으로 규칙 엔진에 대한 과정 내 호출을 발사하는 전화를받습니다. 이것은 예약 (예 : 배치) 또는 수요 (예 : 요청의 "Boxcars")를 기준으로 수행 할 수 있습니다. 어느 쪽이든, 프로세스 및 데이터베이스와 직접 상호 작용함으로써 서비스 호출의 많은 오버 헤드를 피할 수 있습니다. 이 프로세스의 단점은 IIS 또는 EJB/Servlet 컨테이너가없고 스레드를 관리하고 직접 수행해야한다는 것입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top