나는 일괄 처리 (일괄 처리 서비스는 여기에, API는 구동) 전용 웹 응용 프로그램을 가지고 있고 다른 모든 것에 전념하는 주요 웹 응용 프로그램이 있습니다. 나는 최선의 방법이 배치 서비스에서 비즈니스 로직의 중복을 피하는 것이 무엇인지 결정하는 데 어려움을 겪고있다. 두 응용 프로그램 모두 클러스터됩니다. 일괄 처리를위한 분리는 단순한 작업에서는 괜찮 았지만 비즈니스 논리가 복제되면 혼란을 야기 할 수있는 복잡한 작업이 있습니다. 이 질문의 목적을위한 나의 유스 케이스가있다.일괄 처리시 비즈니스 로직의 중복을 방지하려면 어떻게해야합니까?
- 고객은 사용자 업데이트를 위해 cron 작업을 예약합니다.
- 배치 서비스에는 20,000 개의 사용자 레코드가있는 CSV 파일이 제공됩니다.
- 배치 서비스는 레코드에 대한 유효성 검사를 수행하는 파일을 통해 추출합니다 (기본적으로 드라이 런).
- 일괄 처리 서비스는 허용되는 변경 및 오류 임계 값 (백분율은 개수)을 확인합니다.
- 유효성 검사 임계 값이 통과되면 일괄 처리 서비스가 사용자 생성/업데이트를 시작합니다.
- 사용자가 생성되거나 업데이트되면 이러한 이벤트에 대해 알아야 할 많은 모듈/기능이 있습니다.
- 작업 진행률이 추적되고 고객이 진행률, 로그 및 작업 상태를 볼 수 있습니다. 여기
내가 생각 한 몇 가지 솔루션입니다 :
- 항아리 최대 비즈니스 로직 두 응용 프로그램에서 공유 할 수 있습니다. 주요 응용 프로그램이 Grails 응용 프로그램이고 전체적으로 GORM이 흩어져 있기 때문에 이것은 반드시 쉬운 일은 아닙니다.
- 만들기 및 업데이트 및 더 복잡한 유효성 검사 시나리오에 대해 주 응용 프로그램에서 배치 서비스 히트 API를 가져 오십시오. 이것은 통풍구에 대해 걱정할 것이지만, 호출은로드 밸런서를 거쳐 배포되므로 배포 될 것입니다.
- 유효성 검사를 위해 주 응용 프로그램에서 배치 서비스에 API를 적용한 다음 작성/업데이트 요청을 대기시키고 주 응용 프로그램에서 요청을 검색하도록하십시오. 위와 동일하게 대기열은 http 호출을 줄이는 데 도움이됩니다. 또한 일괄 처리 서비스로 상태를보고하는 대기열이 필요합니다.
- 일부 로직을 배치 서비스로 복제하면 자체 유효성 검사 및 삽입/업데이트를 수행하지만 사용자가 만든 이벤트 또는 사용자 업데이트 이벤트를 발생시켜 주 앱의 모듈/기능이 변경 사항을 처리 할 수 있습니다.
- 삽입 기본 응용 프로그램으로 일괄 처리 서비스는
기타 자세한 사항 :
배치 서비스 및 웹 응용 프로그램은 모두 모두 AWS에서 실행되는- SQS 및 SNS에 쉽게 액세스 할 수 있습니다.
- Java 1.그것의 핵심에게 기반으로 비즈니스 로직의 중복을 피하기
그래서 제 질문이 허용됩니다 어떤 방법을의에서 7 개 애플리케이션
또 다른 아이디어는이 모양과 "마이크로 서비스"아키텍처입니다. 그 말은 사무실에서 여러 번 던져졌고 우리는 주요 웹 애플리케이션을 서비스로 분해 할 생각을하고있었습니다. 예를 들어 사용자 관리를위한 서비스가 종료 될 수 있습니다.
감사합니다. 파일을 완전히 실행하고 작업 진행 상황을 추적하고 고객이 작업 기록 및 로그를 볼 수 있도록해야한다는 사실을 명확히하기 위해 사례를 업데이트했습니다. 어떻게 처리할까요? –
같은 방식입니다. 일괄 작업 응용 프로그램이 실행 중이고 일괄 처리 응용 프로그램의 액세스 가능한 위치에 로그를 쓰고 있습니다. 파일이나 appropraite DB를 말하십시오.이 작업을 수행하는 경우 웹 응용 프로그램에 긴 폴링 (혜성) 수신기가 연결된 패널이있을 수 있습니다.이 수신기는 로그 테이블을 정보로 터치하면 UI 업데이트로 돌아옵니다. 여기 메시지 버스가 DB가 될 것입니다. 또는 원하는 경우 CSV에서 업데이트가있는 서버로 메시지를 향상 시키면 userId = 5, remaining = 50 업데이트와 같은 수를 늘릴 수 있습니다. Blogic 업데이트 및 알림 왼쪽 50Left에 넣습니다. – 99Sono
알림 항목에서 웹 응용 프로그램을 읽을 때 : CSV 작업의 사용자가 50 명 남았을 때 progress = 50 users remaining이라는 Application Scoped Bean의 상태를 업데이트합니다. 당신의 UI는이 정보를 perdiotically, 또는 당신이 혜성을 사용하는 경우 업데이 트가있을 때 imdiately 폴링했다. – 99Sono