다운 타임 제로 배포
(섹션: 아키텍처 및 프로토콜)
1) 제로 다운 타임 인 이유와 필요한 이유
ZDT (Zero-Downtime) 는 사용자가 서비스를 이용할 수없고 요청을 잃지 않고 새로운 버전의 응용 프로그램을 출시하는 방법입니다. 목표:- 고객 및 통합을위한 다운 타임 제로.
- 예측 가능한 릴리스, 빠른 롤백 및 관리 가능한 위험.
- 계약 경계 내에서 SLO/SLI (대기 시간, 오류, 가용성) 보존.
ZDT의 핵심은 하나의 "매직" 기술이 아니라 전달 패턴, 데이터 호환성 및 유능한 트래픽 라우팅의 조합입니다.
2) 기본 제로 다운 타임 원칙
1. 버전 호환성: 새 버전과 이전 버전은 트래픽과 데이터를 동시에 올바르게 처리해야합니다.
2. 운영의 이념성: 재 처리가 상태를 깨뜨리지 않아야합니다.
3. 우수한 셧다운 및 연결 배수.
4. 단계별 건강 검진: 준비/활력 검사, 건강 종점.
5. 일류 시민으로서의 롤백: 롤백은 핫픽스보다 쉽고 빠릅니다.
6. 설계 별 관찰 가능성: 릴리스 마크, 단일 대시 보드, SLO 경고.
7. 자동화: 릴리스 및 롤백 시나리오는 수동 명령어가 아닌 코드입니다.
3) 다운 타임없는 배송 패턴
3. 1 롤링 업데이트
이전 버전의 인스턴스 중 일부를 트래픽에서 점차적으로 제거하고 새 버전으로 업데이트 한 다음 풀로 되돌립니다.
전문가: k8/ASG의 인프라 경제적.
단점: 클러스터는 동시에 두 가지 버전으로 작동합니다 (버전 왜곡).
3. 2 청록색
활성 (파란색) 과 후보 (녹색) 의 두 가지 전체 내용. 트래픽 전환-원자 플립.
장점: 인스턴트 롤백, 깨끗한 격리.
단점: TP 인프라 비용, 고마워하기가 더 어렵습니다.
3. 3 카나리아/프로그레시브 롤아웃
우리는 지표별로 게이트가있는 새 버전에 작은 트래픽 (1-5-10-25-50-100%) 을 제공합니다.
장점: 최소 폭발 반경, 데이터 중심 솔루션.
단점: 성숙한 관찰 성과 지능적인 라우팅이 필요합니다.
3. 4 그림자 트래픽/어두운 발사
새 버전에 대한 실제 요청 (사용자에게 응답하지 않고) 을 미러링하거나 메트릭을 수집하기 위해 숨겨진 상태로
장점: 문제의 조기 식별.
단점: 중독에 대한 이중 부하, 부작용을 제어해야합니다.
4) 트래픽 및 연결 관리
4. 1 준비/생활
Livence는 오케 스트레이터에게 "나를 다시 시작" 하라고 말합니
준비- "직접 트래픽을 지시하지 마십시오. 아직 준비가되지 않았습니다".
올바른 준비 논리 및 타임 아웃 없이는 해제 할 수 없습니다.
4. 2 연결 배수
풀에서 인스턴스를 제거하기 전에:- 새로운 연결 허용을 중지하고
- 활동이 완료되기를 기다리는 중
- "매달린" 타임 아웃을 중단합니다.
4. 3 개의 끈적 끈적한 세션 및 L7 라우팅
끈적 끈적한 시나리오는 유용하지만로드 균형이 복잡합니다.
L7 규칙 (경로, 헤더, 쿠키, API 버전) 은 카나리아/링에 편리합니다.
4. 4 장기 연결
WebSocket/gRPC 스트리밍: 업데이트하기 전에 드레인 모드 + "GOAWAY" 신호를 켜십시오.
스트림과 클라이언트 백호를 능가하는 창을 계획하십시오.
5) 데이터 호환성 및 데이터베이스 마
5. 1 확장-마이그레이트 계약
1. 확장: 이전 버전을 깨지 않고 새 열/색인/테이블을 추가하십시오.
2. Migrate: 백그라운드에서 데이터를 엄청나게 전송합니다 (배치, 체크 포인트).
3. 계약: 안정화 후에 만 이전을 삭제하십시오.
5. 2 가지 관행
릴리스 창에서 독점적 인 DDL 잠금을 피하십시오.
검증 API/이벤트 계약 (스키마 레지스트리, CDC).
온라인 도구, 복제품, 단계별 전환과 같은 강력한 마이그레이션.
중복 및 dempotent 소비자에게만 이중 쓰기.
대기열을 통한 안정적인 통합을위한 전송/받은 편지함.
6) 캐시, 세션 및 배경 작업
세션 및 캐시는 외부 (Redis/Memcashed) 이므로 버전을 교환 할 수 있습니다.
풀링 전에 캐시/위트/템포 인덱스를 예열하십시오.
경주를 피하기 위해 배경 대기열을 버전별로 나누거나 리더십을 사용하십시오
7) 관찰 및 SLO 게이트
황금 신호: p95/p99 대기 시간, 오류율, RPS, 채도, 대기열 지연.
비즈니스 SLA: 승인, 전환, 성공적인 지불, 깔때기 단계 거부.
게이트: 롤아웃은 카나리아
8) 안전한 완료 및 롤백
롤백은 "수동 크래프트" 가 아닌 고정 명령과 반대 방향으로 만 동일한 파이프 라인입니다.
청록색-뒤집기; 카나리아-체중 감량 0% 또는 이전 안정적인 단계.
데이터: 트랜잭션 상쇄, 재 처리, 이벤트 중복 제거.
9) 제로 다운 타임 체크리스트
출시 전
- 하나의 서명 된 아티팩트 (불변성), SBOM 및 종속성 검사가 수집됩니다.
- 준비/활력이 구현 및 테스트되었습니다.
- 확장 모드의 마이그레이션 계획, 가역성 확인.
- 새 버전에 대한 대시 보드 및 경고가 준비되었으며 릴리스 마크가 표시됩니다.
- 롤백은 준비/사전 프로그램을 위해 체크했습니다.
출시 당시
- 연결 배수가 활성화되고 타임 아웃이 적절합니다.
- 트래픽은 카나리아/링 또는 플립 (청록색) 입니다.
- 메트릭은 기준선과 비교되고 게이트 임계 값이 충족됩니다.
출시 후
- 모니터링 후 N 시간, 사고 없음.
- 계약 마이그레이션을 완료하고 임시 플래그/경로를 제거했습니다
- 회고전, 플레이 북 업데이트.
10) 반 패턴
배수 및 준비 요청없이 재배치-배치 요청 중단.
준비되지 않은 DDL 데이터 잠금 및 타임 아웃 프라임 타임.
서비스 버전간에 호환되지 않는 체계를 혼합합니다.
처리기와 근로자의 demopotency 부족.
게이트없이 "느낌에 의해 롤아웃" 하고 기준선과 비교하십시오.
청록색의 긴 DNA-TTL은 플립이 몇 시간 동안 지속되는 이유입니다.
롤링/카나리아가있는 메모리의 로컬 세션/캐시.
11) 구현 시나리오
11. 1 Kubernetes (롤링 + 카나리아)
배포: 'maxUnasable = 0', 'maxSurge = 25%'.
준비 상태가 예열을 기다리고 있습니다 (캐시 초기화, 사소한 마이그레이션).
가중 라우팅 (1-5-10-25-50-100%) 이있는 서비스 메쉬/흡입.
경고: p95, 5xx, 대기열 지연, 비즈니스 깔때기.
11. 클라우드에서 2 청록색
밸런서 뒤에 두 스택: '파란색. 예. com '년형' 녹색. 예. com '.
녹색, 연기/회귀를 예열 한 다음 청취자/경로 교환 (또는 낮은 TTL이있는 DNA 스위치) 을 예열하십시오.
문제가있는 경우-즉시 뒤집기.
11. 3 스테이트 풀 서비스
데이터 복제본 + 온라인 마이그레이션; 검증을 통한 이중 판독.
배경 bs은 버전 "리더십" 또는 분할 대기열로 운반됩니다.
인스턴스 외부의 세션/캐시; 끈적 끈적한 일시적으로 만 활성화
12) Ficheflags 및 클라이언트 응용 프로그램
새로운 기능은 플래그에 의해 활성화됩니다 (세그먼트: 직원 → 베타 → 모두).
모바일/데스크톱 클라이언트의 경우 프로토콜 호환성 경계 및 레거시 저하 정책 (서버 측 대체) 을 고려하십시오.
13) 성능 및 비용
롤링은 저렴하지만 신중한 호환성이 필요합니다.
Blue-Green은 출시 당시 더 비싸지 만 롤백은 즉각적입니다.
카나리아는 위험과 비용의 균형을 유지하지만 강력한 관찰 가능성이
임시 미리보기와 자동 청소 스탠드를 통해 저장하십시오.
14) 최소 참조 파이프 라인 ZDT
1. 빌드: 단일 아티팩트, 서명, SBOM.
2. 테스트: 단위/통합/계약 + 보안.
3. 준비: 연기, 하중, 마이그레이션 확장, 롤백 점검.
4. Prod: 그림자 → 카나리아 (게이트) 또는 청록색 플립.
5. 배치 후: 감시, 계약 정리, 복고풍.
15) 간략한 요약
Zero-Downtime은 호환 가능한 버전 + 올바른 라우팅 + 관리 마이그레이션 + 관찰 가능성 및 빠른 롤백입니다. 컨텍스트 (롤링, 블루 그린, 카나리아), SLO 게이트 자동화, 데이터 유지 등의 패턴을 선택하면 이벤트가 중단되어 안정적인 루틴 프로세스로 전환됩니다.