대기 중인 애플리케이션 운영
요청된 작업을 수행하기 위해 업데이트 인스턴스 와이드 잠금/뮤텍스를 가져와야 하는 CICD API는 업데이트 인스턴스 와이드 잠금/뮤텍스가 다른 작업에 의해 점유될 때 거부되는 대신 큐에 대기됩니다.
Tokyo부터 요청된 작업을 수행하기 위해 업데이트 인스턴스 와이드 잠금/뮤텍스를 가져와야 하는 CICD API는 업데이트 인스턴스 와이드 잠금/뮤텍스가 다른 작업에 의해 점유될 때 거부되는 대신 대기열에 추가됩니다. CICD 요청이 수신되면 해당 CICD 서비스는 애플리케이션 운영 NowMQ(Now Message Queue) 메시지를 생성하고 NowMQ API를 사용하여 큐에 메시지를 삽입합니다. 그런 다음 대기 중인 메시지는 예약된 작업에 의해 폴링되고 병렬 처리가 활성화되고 작업이 필요한 조건을 충족하는 경우 하나씩 또는 병렬로 처리됩니다.
애플리케이션 운영 NowMQ 메시지
애플리케이션 작업 NowMQ 메시지에는 "sys.applifecycle.operation"이라는 공통 제목이 있습니다. 애플리케이션 운영 NowMQ 메시지의 메시지 본문에는 실행 추적기의 sys_id(CICD API 응답에서 반환된 진행률 ID라고도 함), app_install, plugin_activation, batch_install, 롤백, import_app 및 apply_changes 중 하나일 수 있는 운영 유형이 포함된 JSON 객체가 포함되어 있습니다. 플러그인 활성화를 위한 플러그인 ID, 애플리케이션 설치를 위한 앱 ID 또는 범위와 같은 정보도 포함합니다.
애플리케이션 작업을 위한 실행 추적기
애플리케이션 운영 NowMQ 메시지가 생성되고 삽입되면 해당 CICD 요청에 대한 실행 추적기 레코드가 생성되고 해당 sys_id NowMQ 메시지의 본문에 추가됩니다. 실행 추적기는 처음에 보류 중 상태입니다. 실행 추적기의 "상세 정보" 열에는 작업 유형 및 CICD 요청에 대한 중요한 입력 매개변수에 대한 정보가 포함되어 있습니다. "메시지" 열에는 큐 위치에 대한 정보가 포함되어 있습니다. 큐가 일시 중지되면 메시지에 "[App Operation Queue is paused]"라는 접두사가 붙습니다.
큐가 실행 중일 때의 샘플 애플리케이션 운영 실행 추적기.
큐가 일시 중지되었을 때의 샘플 애플리케이션 작업 실행 추적기.
애플리케이션 운영 큐 관리
모든 애플리케이션에서 제품을 수동으로 설치하는 동안에는 큐에 대기하지만 모든 애플리케이션 또는 애플리케이션 관리자와 같은 UI에서 애플리케이션을 수동으로 설치하는 것은 큐에 대기되지 않습니다.
경우에 따라 인스턴스가 많은 CICD 요청을 수신, 대기열 처리 및 처리할 수 있으며, 이로 인해 UI에서 수동 설치가 업데이트 인스턴스 와이드 잠금/뮤텍스에 굶주릴 수 있습니다. 이 경우 관리자는 애플리케이션 작업 큐를 일시적으로 일시 중지할 수 있습니다.
관리자는 System Diagnostics->Application Operation Queue UI 페이지를 통해 애플리케이션 운영 큐를 관리할 수 있습니다. "운영 큐 상태" 패널에서 관리자는 큐를 일시 중지하거나 다시 시작할 수 있습니다. 관리자는 보류 중인 실행 추적기를 취소할 수도 있으며, 이렇게 하면 결국 앱 운영 대기열 상태 모니터 작업에 의해 NowMQ에서 해당 대기열에 있는 메시지가 제거됩니다.
애플리케이션 운영 큐 UI 페이지
샘플 애플리케이션 운영 큐 UI 페이지. 관리자는 "작업 대기열 상태"의 버튼을 클릭하여 대기열을 일시 중지하거나 다시 시작할 수 있습니다.
"애플리케이션 운영 실행 추적기" 목록 항목을 클릭하면 실행 추적기 양식이 열립니다. 대기 중인 메시지가 큐에서 보류 중인 경우 실행 추적기 상태를 "취소됨"으로 업데이트하고 변경 내용을 저장하면 대기 중인 해당 CICD 요청이 취소됩니다. 참고: 실행 추적기의 상태가 "실행 중"인 경우 CICD 요청을 취소할 수 없습니다.
애플리케이션 운영 큐 및 업그레이드 창
기본적으로 예약된 업그레이드 2시간(시스템 속성 "com.glide.update_operation.queue_upgrade_window"를 통해 사용자 지정할 수 있음)이 지나면 애플리케이션 운영 큐가 대기 중인 메시지 처리를 중지합니다.
애플리케이션 운영 큐 상태가 "업그레이드 일시 중지됨"으로 변경됩니다. 이 업그레이드 기간 동안 새 CICD 요청은 계속 대기됩니다.
업그레이드가 완료되면 응용 프로그램 작업 큐가 대기 중인 메시지 처리를 자동으로 다시 시작합니다.
CICD 파이프라인에 미치는 영향
CICD API에 대한 기존 요청/응답 계약은 변경되지 않습니다. Tokyo 이전 릴리스에서 관찰된 업데이트 인스턴스 와이드 잠금/뮤텍스 충돌로 인한 작업 실패는 표시되지 않습니다. 요청은 작업 유형에 따라 하나씩 또는 병렬로 큐에 대기하고 제공됩니다.
큐잉을 지원하는 CICD API
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/app_repo/롤백
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/롤백
- api/sn_cicd/sc/apply_changes
- api/sn_cicd/v1/sc/apply_changes
- api/sn_cicd/v2/sc/apply_changes
- api/sn_cicd/앱/배치/설치
- api/sn_cicd/sc/가져오기
- api/sn_cicd/plugin/{plugin_id}/활성화
- api/sn_cicd/plugin/{plugin_id}/롤백
애플리케이션 설치 및 플러그인 활성화 병렬화
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/plugin/{plugin_id}/활성화
모든 큐 처리는 인스턴스 와이드 잠금/뮤텍스를 사용하고 대기 중인 작업이 완료될 때까지 이 뮤텍스를 유지합니다. 이 잠금을 UpdateMutex라고 하며 해당 상태는 sys_mutex 테이블에서 볼 수 있습니다. 이 시간 동안에는 이와 동일한 잠금을 사용하는 작업(앱 설치, 플러그인 활성화, 소스 제어 작업)은 UI를 통해 수행할 수 없습니다. 현재 실행 중인 작업이 완료된 후에도 애플리케이션 운영 큐 페이지를 통해 큐를 일시 중지하여 잠금을 해제할 수 있습니다.
병렬화는 기본적으로 활성화되어 있습니다. com.glide.update_operation.parallel_operation_enabled 속성을 사용하여 끌 수 있으며 모든 작업은 이전 릴리스에서와 같이 큐에서 순차적으로 실행됩니다.
병렬화에 대한 제한
대기열 프로세서는 대기열에 있는 작업을 실행할 수 있는지 여부를 결정합니다. 작업을 실행할 수 있는 경우 첫 번째 가용성에 인스턴스 노드에서 선택하도록 예약됩니다. 그렇지 않은 경우 큐로 반환되고 프로세서는 처리를 위해 큐의 다음 작업을 평가합니다.
병렬로 실행할 수 있는 최대 작업 수에는 제한이 있으며 기본값은 2입니다. 이 속성은 glide.update.app_operation_queue.parallel.max 통해 전환할 수 있지만 설치를 수행하는 데 사용할 수 있는 스레드의 상한이 있으며 병렬화를 늘리면 추가 메모리가 사용되므로 활성 사용자의 인스턴스 속도가 느려질 수 있습니다.
자원 잠금 얻기
- 사용자 지정을 포함하여 동일한 범위를 공유하는 두 운영입니다.
- 스키마 변경을 유발하는 두 가지 작업입니다.
- 수정 스크립트를 포함하는 두 운영입니다.
큐 처리는 큐에 삽입된 작업에 대해 이러한 기준이 충족되는지 확인하고 필요한 경우 처리할 수 없는 작업을 연기합니다. 작업의 진행률 ID는 작업이 적절한 리소스 잠금을 얻기 위해 대기 중인지 여부를 반영하도록 업데이트됩니다. 실행 중인 작업은 sys_padlock 테이블의 리소스 목록(범위, 스키마, 수정 스크립트)을 유지 관리하며, 이러한 잠금의 삽입 및 해제는 진행률 ID로 이 테이블에서 관찰할 수 있습니다. 자원에 필요한 잠금을 확보할 수 없어 대기 중인 작업이 지연되면 다른 메시지가 처리될 수 있도록 대기(cool-down)됩니다. 휴지 기간은 com.glide.update_operation.job_cancel_timeout_minutes 속성으로 수정할 수 있습니다. 작업은 여전히 큐에 있으며 애플리케이션 작업 큐 페이지에 표시됩니다.
com.glide.update_operation.max_failure_count 속성으로 수정할 수 있습니다.