멀티 워커 자동화를 위한 브라우저 프로필 리스(Lease) 설계

유효하지 않은(stale) 잠금은 복구의 문제입니다. 프로필 리스는 런타임 설계의 문제입니다.

대부분의 사람들은 두 명의 워커가 동일한 브라우저 프로필을 여는 것을 방지하기 위해 잠금 파일(lock file)만 있으면 충분하다고 생각합니다. 하지만 규모를 확장할 때는 이것이 실수가 됩니다.

잠금은 프로필이 사용 중인지 여부만 알려줄 뿐, 프로필을 안전하게 사용할 수 있는지 여부는 알려주지 않습니다.

워커가 로그인 도중 충돌(crash)하면 계정 상태를 알 수 없게 됩니다. 다음 워커는 잘못된 페이지에서 시작하거나 손상된 쿠키를 가지고 시작할 수 있습니다. 이는 디버깅하기 어려운 '조용한 실패(silent failures)'를 유발합니다.

리스는 잠금 그 이상입니다. 리스는 스케줄러, 워커, 그리고 프로필 사이의 계약입니다.

좋은 리스는 다음과 같은 질문에 답할 수 있어야 합니다:

  • 현재 이 프로필의 소유자는 누구인가?
  • 어떤 특정 실행(run)이 이를 사용 중인가?
  • 이 소유권은 언제 만료되는가?
  • 워커가 사라지면 어떻게 되는가?

최소한의 리스 레코드에는 다음 항목이 포함되어야 합니다: • profile_idaccount_idworker_idrun_idproxy_idheartbeat_at (워커가 살아있는지 확인하기 위함) • last_safe_step (마지막으로 확인된 정상 상태를 확인하기 위함) • release_policy

TTL(Time To Live) 만료를 잠금을 삭제하라는 명령으로 취급하지 마십시오. 만료된 리스는 해결되지 않은 종료입니다. 깔끔한 해제(clean release)는 설명 가능한 종료입니다.

워커가 하트비트(heartbeat) 전송을 중단하면 해당 프로필을 자동으로 재사용하지 마십시오. 대신 프로필을 격리(quarantine) 상태로 이동시키십시오.

프로필에 다음 상태들을 사용하십시오:

  • Available: 사용 가능 (체크아웃 준비 완료)
  • Leased: 리스 중 (현재 사용 중)
  • Stale: 유효하지 않음 (워커의 보고가 중단됨; 상태를 알 수 없음)
  • Review Required: 검토 필요 (사람의 확인이 필요함)
  • Quarantined: 격리됨 (해제될 때까지 사용하기에 안전하지 않음)
  • Disabled: 비활성화됨 (순환에서 제외됨)

격리는 처벌이 아닙니다. 안전 메커니즘입니다. 다음과 같은 경우 프로필을 격리해야 합니다:

  • 폼 제출(form submission) 중에 워커가 종료된 경우.
  • 최종 URL을 알 수 없는 경우.
  • 실행 도중 프록시(proxy)가 변경된 경우.
  • 보안 프롬프트가 나타난 경우.

잠금은 동시 접근으로부터 프로필을 보호합니다. 리스는 안전하지 않은 재사용으로부터 프로필을 보호합니다.

브라우저 프로필을 일회용 폴더처럼 취급하는 것을 멈추십시오. 관리되는 계정 환경처럼 취급하십시오.

Source: https://dev.to/web4browser/designing-browser-profile-leases-for-multi-worker-automation-1bfa