nodejs async waterfall / retry 기반 오류 재 시도 프로 세 스 디자인

3406 단어 nodejs
문제 의 근원
최근 에 인터넷 요청, 이미지 처리, 파일 읽 기와 쓰기 등 절차 와 관련 된 온라인 서 비 스 를 했 습 니 다. 함수 내장 을 해결 하기 위해 저 는 async 의 waterfall 방법 을 사 용 했 습 니 다.그 결과 접속 후 매우 불안정 한 것 으로 나 타 났 으 며, 적어도 1 / 4 의 방문 은 성공 하지 못 한 것 으로 추정 된다.이제 야 안정 적 이 고 신뢰 할 수 있 는 서비스의 중요성 을 깨 달 았 다.로 그 를 자세히 살 펴 보 니 다음 과 같은 몇 가지 문제 가 있 습 니 다. - 프로그램의 error 는 반드시 처리 해 야 합 니 다. - 모든 과정 에서 실 패 를 고려 해 야 합 니 다.
첫 번 째 프로그램의 error 는 특히 중요 합 니 다. 대부분의 경우 이상 한 처 리 를 소홀히 해서 서 비 스 를 사용 할 수 없습니다.두 번 째 는 프로그램의 신뢰성 에 대한 보증 이다. 간단 하고 거 친 방법 은 절차 가 잘못 되면 다시 시도 하 는 것 이다.
Solution
우 리 는 waterfall 을 사용 하면 일련의 함수 가 실 행 된 순 서 를 보장 할 수 있 고 함수 가 실 패 했 을 때 처리 절 차 를 직접 중단 할 수 있다 는 것 을 알 고 있 습 니 다.비교적 믿 을 만 한 방법 은 절 차 를 다시 시험 하 는 것 이다.이것 은 async 의 retry 방법 을 사용 했다.
var async = require('async');

async.waterfall[
    function(callback) {
        async.retry({times:5, interval:1000}, function(cb) {
            do_task();
            var some_err = '';
            var some_result = '';
            cb(some_err, some_result);
        }, function(err, result) {
            callback(err, result);
        });
    },
    function(param, callback) {
        //    ......
    },
], function(err, result) {
});

위의 코드 중 가장 바깥쪽 은 waterfall 로 순서대로 절 차 를 수행 합 니 다.각 함수 에 retry 함 수 를 더 할 수 있 습 니 다. 그 용법 은 다음 과 같 습 니 다.
retry(opts, task, callback)

그 중에서 opts 는 하나의 대상 으로 관련 매개 변 수 를 다시 시도 하 는 것 을 나타 내 고 times 필드 는 재 시도 횟수 를 나타 내 며 interval 매개 변 수 는 재 시도 간격 을 나타 내 며 opts 가 하나의 정수 만 놓 으 면 times, interval 은 기본 값 이 0 임 을 나타 낸다.task 는 실행 할 작업 을 표시 합 니 다. 이 작업 은 리 셋 함 수 를 가지 고 있 습 니 다. 실행 이 끝 난 후에 반드시 호출 해 야 합 니 다. 예 를 들 어 위의 예제 에 있 는 cb 함수 등 입 니 다.callback 은 retry 의 반전 함수, 즉 retry 가 완 료 된 후에 결 과 를 후속 처리 합 니 다.
async 의 리 턴 함수 인 자 는 알림 체제 와 같 습 니 다. 즉, 함수 가 실 행 된 후에 다음 절차 로 전 달 됩 니 다.예 를 들 어 retry 과정 에서 cb, 그리고 waterfall 의 callback.위의 예 에서 콜 백 은 외부 프로 세 스 waterfall 의 리 셋 함수 로 모든 함수 가 실 행 된 후 이 를 통 해 파 라 메 터 를 후속 프로 세 스에 전달 합 니 다.cb 는 retry 의 반전 함수 입 니 다. 매번 작업 이 완 료 된 후에 이 를 전달 하고 다시 시도 할 지 여 부 를 결정 합 니 다.
이렇게 하면 완전한 절차 통 제 를 실현 하고 모든 과정 에서 실 수 를 하고 다시 디자인 할 수 있다.물론 레 트 리 를 바깥쪽 으로 가 져 가 워 터 폴 전 체 를 재 설계 하 는 것 도 가능 하 다.업무 절 차 를 잘 처리 해 야 할 뿐 입 니 다.
nodejs 의 비동기 적 특성 은 복잡 한 업무 에 직면 할 때 약간의 약점 이 있다.비록 async, Promise 등 메커니즘 이 있 지만 호출 플러그 인 문 제 를 처리 할 수 있다.그러나 업무 상 절차 설계 에 공 을 들 여야 한다.
레 퍼 런 스
https://github.com/caolan/async
문서.
async_demo
Async.retry executes immediately before waiting for interval

좋은 웹페이지 즐겨찾기