2017-10-25 9 views
8

SFTP 서버에서 새 파일을 추가하거나 수정할 때 발생하는 Azure Logic App이 있습니다. 파일이 Azure Blob Storage에 복사 된 다음 SFTP 서버에서 삭제됩니다. 이 작업은 파일 당 약 2 초 걸립니다.SFTP에서 BLOB 저장소로 파일을 복사 할 때 Azure Logic App 실행을 병렬화하십시오.

유일한 문제는이 파일 (평균 500kb)이 하나씩 처리된다는 것입니다. 매일 약 30,000 개의 파일을 전송하려고하므로이 방법은 매우 느립니다 (약 18 시간 정도).

이러한 실행을 수평 확장/병렬화 할 수있는 방법이 있습니까?

+0

언급 : "유일한 문제는이 파일 (평균 500kb)이 하나씩 처리된다는 것입니다." 기본적으로 스플릿 - 온은 SFTP 트리거에서 설정되므로 각 파일 (여러 파일이 감지되는 경우)이 모든 파일에 대해 하나의 실행 대신 실행을 트리거합니다. 이걸 보지 못하니? –

+0

@Derek 예, 각 파일은 별도의 실행을 트리거하지만 순차적 실행입니다. –

+0

맞지 않습니다. 스플릿 트리거가 병렬로 실행되어야합니다. '진단'탭을 확인하고 '스로틀 이벤트 실행'을 확인할 수 있습니까? 그것들은 병렬로 실행되고있을 수 있지만 동작이 조절되고 있기 때문에 순서대로 실행되고있는 것처럼 보입니다. –

답변

0

Azure Logic App에 스케일 아웃/병렬화 실행이 있는지 확신하지 못합니다. 적시성 요구 사항이 매우 높은하지 않으면하지만 내 경험을 바탕으로, 우리는 를 ForEach 병렬 제한이 50이고 기본이 경우 20

하다는 것을 할 Foreach를 사용할 수있는, 내 제안은 우리가 할 수 있다는 것입니다 SFTP에서 새 파일을 추가하거나 수정할 때 루프를 실행 한 다음 파일 저장 경로가있는 대기열 메시지를 저장 대기열에 삽입 한 다음 시간 또는 대기열 길이에 따라 루프를 종료 할 수 있습니다. 큐 메시지 컬렉션을 얻을 수 있습니다. 마지막으로, 큐 메시지를 가져 와서 SFTP에서 파일을 가져 와서 foreach 작업에서 blob을 만듭니다.

0

C# 인 경우 Parallel.ForEach를 사용하십시오. 이 도구를 사용한다면 IO 작업을 위해 async/await 패턴을 사용하는 것이 좋습니다 (BLOB에 저장). 다른 요청을 처리하기 위해 파일을 저장할 때 실행중인 스레드를 비 웁니다.