현재 상황
우리는 마이크로 서비스 아키텍처에서 온라인 쇼핑 웹 애플리케이션을 구현하고 현재 유지하고 있습니다.
요구 사항 중 하나는 비즈니스가 고객의 경험과 최종 주문을 사용자 정의하기 위해 고객이 장바구니에 추가하는 내용에 대한 규칙을 적용 할 수 있어야한다는 것입니다. 분명히 비즈니스 규칙 엔진을 설치해야했으며이를 위해 특정 "마이크로 서비스"를 구현했습니다 (여전히 호출 할 수있는 경우).
1 년 동안이 규칙 엔진은 점점 더 복잡 해져서 더 많은 데이터 (예 : 카트 내용뿐만 아니라 사용자 정보, 역할, 기존 서비스, 일부 청구 정보 등)가 필요합니다. 그 규칙을 계산하십시오.
현재 shopping-cart
마이크로 서비스는이 모든 데이터를 다른 마이크로 서비스에서 수집하고 있습니다. 이 데이터의 일부가에 의해 사용 되더라도 shopping-cart
대부분 규칙 엔진에 피드를 제공하는 데 주로 사용됩니다.
새로운 요구 사항
이제 유사한 요구 사항에 대해 규칙 엔진을 재사용하기 위해 다른 애플리케이션 / 마이크로 서비스가 필요합니다. 따라서 현재 상황에서는 동일한 종류의 데이터를 전송하고 동일한 마이크로 서비스를 호출하며 규칙 엔진을 호출 할 수 있도록 거의 동일한 리소스를 구축해야합니다.
계속해서 몇 가지 문제에 직면 할 것입니다.
- 규칙 엔진을 호출하는 모든 사람은 데이터가 필요하지 않더라도 데이터 가져 오기를 다시 구현해야합니다.
- 규칙 엔진에 대한 요청은 복잡합니다.
- 이 방향으로 계속 진행하면서 많은 요청에 대해 네트워크 전체에서이 데이터를 전송해야합니다 (룰 엔진을 호출하는 μs A 호출 μs B를 생각하지만 A에는 이미 규칙 엔진에 필요한 일부 데이터가 있음).
shopping-cart
모든 데이터 페치로 인해 커졌습니다.- 아마 많은 사람들을 잊었을 것입니다…
이러한 문제를 피하려면 어떻게해야합니까?
이상적으로는 규칙 엔진에 더 많은 복잡성을 추가하지 않아도됩니다. 또한 병목 현상이 발생하지 않는지 확인해야합니다. 예를 들어 일부 데이터의 가져 오기 속도가 다소 느리므로 (10 초 이상) shopping-cart
규칙을 호출하기 전에 데이터가있을 가능성이 높은 프리 페치를 구현 했습니다. 적절한 사용자 환경을 유지하십시오.
몇 가지 아이디어
- 규칙 엔진이 필요한 데이터를 가져 오도록합니다. 이것은 (단일 책임의 원칙을 위반, 그것을 더 복잡성을 추가합니다 ... 더 );
- 데이터를 가져 오기 위해 규칙 엔진 전에 프록시 μs를 구현하십시오.
- 규칙 엔진이 필요한 모든 데이터를 한 번에 가져 오기 위해 호출하는 "데이터 페처"μs를 구현하십시오 (복합 조회).
shopping-cart
되었지만 다른 마이크로 서비스의 요구에 맞게 쉽게 조정할 수 있습니다 (여전히 사용자, 제품 및 주문과 관련이 있습니다). 보시다시피 , 특히 비즈니스가 적용 할 술어를 선택할 수 있으므로 동일한 입력 데이터 가 필요합니다. 카트 데이터 자체를 제외한 다른 마이크로 서비스에서 모든 데이터를 제공합니다. 데이터를 가져 오는 것은 그 자체로 는 복잡하지 않지만 ~ 10 개의 다른 마이크로 서비스를 호출하고 규칙 엔진에 의해 예상되는 구조를 유지해야 할 때 복잡해집니다.