우리는 넥스트도어에서 크론 작업을 실행하지 않습니다

배경

넥스트도어에서 우리는 매일 수천만 개의 다이제스트 이메일을 사용자에게 보내고,성장에 대한 내부 보고서를 생성하고,일부 운영 작업과 같은 다양한 중요한 목적으로 많은 예약 된 작업을 실행합니다. 다른 많은 인터넷 회사(예:에어 비앤비 및 쿼라)와 마찬가지로 우리는 크론으로 시작하여 넥스트 도어 스케줄러라고 불리는 자체 크론 교체를 구축했습니다.

우리는 18 개월 이상 넥스트도어 스케줄러를 사용해왔고 우리는 그것에 매우 만족합니다.

그래서,크론의 문제는 무엇입니까?

크론 네 가지 주요 문제가 있습니다.

첫째,우리가 크론을 사용하는 방식은 확장 성이 없었습니다. 우리는 우둔한 스케줄러 머신에서 모든 크론 작업을 실행했습니다. 우리가 견인력을 얻었을 때,크론 잡스는 컴퓨팅 리소스 사용 측면에서 기계를 한계까지 밀어 붙였습니다.

둘째,일반 텍스트 크론탭을 편집하면 작업 관리(예:작업 추가,작업 삭제 또는 작업 일시 중지)에 오류가 발생하기 쉽습니다. 예를 들어 별표가 추가되면 모든 프로덕션 작업이 다른 날에 실행되지 않습니다:

1 * * * * * /opt/nextdoor/some_job.sh

셋째,우리는 크론과 함께 많은 운영 오버 헤드를 발생 시켰습니다. 우리는 서로 다른 빈도(예:미세,시간별,주별)로 하루에 수천 번 실행되는 거의 200 개의 생산 작업을 보유하고 있습니다. 작업 실패는 일반적입니다. 호출 한 사람은 하루에 여러 번,때로는 자정 이후에 실패한 작업을 수동으로 다시 시작해야했습니다. 1)실패한 작업의 명령줄로 페이징됩니다. 이것은 확실히 엔지니어링 행복에 좋지 않다-예,우리는 우리의 직원의 행복에 대한 관심 않습니다!

넷째,런타임 동안 생산 작업에 대한 가시성이 거의 없었습니다. 어떤 작업이 실행 중인지 또는 성공 여부를 알 수있는 쉬운 방법이 없었습니다.

결정

충분하다. 우리는 크론 교체를 구축하기로 결정했다. 그러나 왜 우리는 오픈 소스 솔루션을 사용하지 않았습니까? 우리는 단지 적당한 것을 찾을 수 없었습니다. 우리는 파이썬을 말합니다. 우리는 회사의 기존 인프라 구성 요소를 활용하고 싶었습니다. 우리는 그것을 만들고,이해하고,소유하고 싶었습니다.

확장성 문제를 해결하기 위해 각 작업을 작업자용 컴퓨터 클러스터에서 실행할 수 있는 비동기 작업으로 만들었습니다. 우리는 쉽게 그들이 실패 할 때 자동으로 다시 시도 할 작업 작업자에서 실행되는 작업을 구성 할 수 있습니다,이는 단지 한 줄의 코드 변경을 필요로. 우리의 온 콜 엔지니어는이 자동 재시도 기능을 사랑 해요!크론을 대체하기 위해,우리는 우수한 파이썬 모듈 아프 쉐듈러를 사용하여 작업 일정을 잡았고,이를 통해 프로그래밍 방식으로 작업을 관리할 수 있었습니다.

아키텍처

다음 그림은 스케줄러 시스템의 아키텍처를 보여줍니다.

다음 문 스케줄러는 파이썬/토네이도로 구현됩니다. 세 가지 구성 요소로 구성된 단일 시스템에서 단일 데몬 프로세스(스케줄러 프로세스)로 실행됩니다.

  1. 스케줄러(또는 코어 스케줄러). 그것은 실행 크론 및 일정 작업을 대체합니다. 작업이 실행되도록 트리거되면 스케줄러 프로세스는 단순히 작업에 대한 메시지를 게시합니다. 작업 노동자 기계의 클러스터는 아마존 스퀘어에서 메시지를 잡아 해당 작업을 실행합니다. 위에서 언급 한 바와 같이,우리는 핵심 스케줄러를 구현하는 데 사용합니다.
  2. 스케줄러. 작업 추가,작업 일시 중지/다시 시작,작업 제거,작업 수정 및 수동으로 작업 시작 등의 작업을 관리 할 수있는 휴식 인터페이스를 제공합니다. 예를 들어 작업 그룹을 한 번에 일시 중지하는 등의 작업을 쉽게 수행할 수 있도록 명령줄 도구를 만들었습니다.
  3. 웹 사용자 인터페이스. 그것은 하나의 페이지 응용 프로그램 스케줄러 이야기. 우리는 백본을 사용했습니다.웹 인터페이스를 구현하기위한 부트 스트랩. 인간 운영자는 주로 웹 인터페이스를 사용하여 다음 도어 스케줄러와 상호 작용합니다.

모든 작업 및 작업 실행 정보가 데이터 저장소에 저장됩니다. 우리는 주로 여기에 다음 도어에서 포스트 그레스를 사용합니다.이 스케줄러는 예전에는 블랙박스 같은 크론을 다루는 것이 아니라 직관적인 작업 관리 방법을 제공합니다.

채용 페이지

이 페이지에서,우리는 그들이 다음에 실행할 때 우리가 어떤 작업을 볼 수 있습니다. 우리는 또한 수동으로 작업을 킥오프”사용자 정의 실행”을 클릭 할 수 있습니다.

작업 편집

우리는 쉽게 예를 들어,작업을 편집 할 수 있습니다,그 일정을 변경하고 하나의 버튼 클릭으로 일시 정지! 이 옛날 일반 텍스트 크론탭을 수정하는 것보다 훨씬 낫다.

실행 페이지

마지막으로,우리는 어떤 작업이 실행되고 있는지,그리고 성공 여부에 대한 가시성이 뛰어납니다.

코드 작성은 쉽습니다. 생산성은 어렵다. 그 때까지는 우리는 넥스트 도어 스케줄러의 구현을 완료,우리는 가까운했다 200 새로운 시스템으로 마이그레이션 할 필요가 생산 크론 작업.

우리는 태스크워커 프로젝트에서 배운 것을 넥스트도어 스케줄러 시스템을 출시하기 위해 적용했다. 네 단계:

  1. 우리는 어두운 생산에 넥스트 도어 스케줄러를 출시-더 생산 작업은 아직 새로운 시스템으로 실행되지 않았다.
  2. 모든 작업의 기본 클래스에 기능 스위치를 추가했습니다.
  3. 우리는 2 주 동안 각 작업에 대해 기능 스위치를 천천히 조심스럽게 켰습니다.
  4. 우리는 크론을 실행 오래된 살이 찐 스케줄러 기계를 종료합니다.

행복한 결말을

새로운 Nextdoor 스케줄러에,우리는 실행할 수 있 훨씬 저렴 스케줄러 EC2 인스턴스(c3.2xlarge)보다 전(c3.8xlarge)를 유지하면 부하를 최적으로 우리는 오프로드 작업 실행에 분산 Taskworker 기계입니다.

이전 스케줄러 머신(상단 그래프)과 새 스케줄러 머신(하단 그래프)간의 사용량 비교는 다음과 같습니다.:

우리는 18 개월 이상 스케줄러 작업을 사용 해왔다. 우리는 지금까지 행복합니다. 이러한 종류의 문제 및 기타 흥미로운 인프라 문제에 대한 작업에 관심이 있다면,우리는 고용하고 있습니다!

답글 남기기

이메일 주소는 공개되지 않습니다.