간단한 워크 플로를 실행해야하는 시스템이 있습니다. 예 : 오브젝트 Z에 대한Azure 테이블 저장소가있는 워크 플로 시스템
월 1 일 8시 15분 트리거 태스크 A에- 객체 Z는 월 3 일에서 실행하려면 다음 몇 가지 코드 (중요하지 구현 세부 사항)
- 일정 작업 B를 실행 트리거 할 때 10:25 (등등)
워크 플로 자체는 간단하지만 500.000 이상의 인스턴스를 실행해야하며 까다로운 부분입니다.
나는 Windows Workflow Foundation을 알고 있으며, 그 이유는 바로 그 이유 때문입니다.
초기 디자인은 Azure Table Storage를 사용하는 것이므로 디자인에 대한 의견을 보내 주시면 감사하겠습니다.
시스템은 아이디어가 실행 테이블 개체 당 작업의 전체 역사를 가지고하고 시간표가 미래에 실행하는 모든 작업의 목록을 것입니다 두 테이블
Table "Jobs"
PartitionKey: ObjectId
Rowkey: ProcessOn (UTC Ticks in reverse so that newest are on top)
Attributes: State (Pending, Processed, Error, Skipped), etc...
Table "Timetable"
PartitionKey: YYYYMMDD
Rowkey: YYYYMMDDHHMM_<GUID>
Attributes: Job_PartitionKey, Job_RowKey
구성됩니다.
일부 가정 :
는-
로모그래퍼
중인 실행 작업 "시간표"의 모든 레코드에 대한
- 쿼리 : 큐
- 각 레코드에 대해 (병렬로)
- 조회에 PartitionKey를 통해 작업 테이블에서 작업 및 RowKey
- "존재하지"또는 경우 주! = 다음
- "는 논리를"실행 건너 보류. 실패 할 경우 => 로그인 어쩌면
- 는 "시간표에 다음 실행 날짜를"
- 제출 단일 트랜잭션으로 "새 작업 기록 (다음 실행)"을 "업데이트 국가는 = 가공"및
제출 일부 재시도 로직을 단 두 변형 트랜잭션에 세 레코드 :
- 모두 마치면 => 모든 처리 시간표
- 검색어 상단에는
정지 워크 플로우 정지/일시 정지 워크 플로우에 PartitionKey
에 의해 작업 테이블 1 일
- 어떠한 국가의 경우 == "취소" 으로 업데이트 한 후 보류
- (시간을 정할 때 청소 시간표를 지울 필요가 없습니다.)
시작 워크 플로우
- 작업 테이블에 등록되지 않은 레코드를 만듭니다
- "일을 실행"의 관점에서
시스템에 메시지를 게시하는 것은 이러한 작업을 수행 할 수 있어야합니다 "파티션 < = 오늘"및 "RowKey < = 오늘"
우려 기록 삭제. 이것이 어떤 식 으로든 극복 될 수 있습니까?개체 Z
내가 푸른 기능을 사용하는 것 시간표에 기록을 만들거나 스케줄러 - 5 분마다 대기중인 작업을 실행합니다.
모든 의견이나 제안은 높이 평가 될 것입니다.
감사합니다!
우우 라. 서비스 버스의 멋진 기능. 나는 그것이 그것을 할 수 있다는 것을 몰랐다. 이것은 효과적으로 "시간표"를 대체 할 것입니다! 또한 그것은 하나의 엔티티 그룹 트랜잭션에서 모든 것을 얻는 데 도움이 될 것입니다 :) 나는 서비스 버스를 가지고 노는 것을 고대하고 있습니다. 그 방향으로 나를 밀어 주셔서 고마워요. –