새로 오신 백엔드 파트장님의 첫 T19 열심히 들었습니당
서버 배포 전략
차이: 서비스가 중단되는지 여부
- 중단 배포
- 무중단 배포
- Blue/Green
- Rolling
- Canary
로드 밸런서가 무중단 배포의 핵심이다. 애초에 무중단 배포가 가능한 것도 로드 밸런서 덕분
Blue/Green 배포
Blue 서버: 이전 서버
Green 서버: 새로운 서버
[이미지 출처]
Rolling 배포
[이미지 출처]
- 구버전과 신버전이 공존
- 추가적인 비용이 들지 않음
- 간편한 관리
- 점진적으로 배포해서 더 안정적일 수도 있다
Canary 배포
[이미지 출처]
- 소수의 유저만 신버전으로 라우팅
- 단계별 모니터링 가능
- 오류가 있어도 소수에게만 영향
문제는 거의 항상 DB다
- DB는 공유되는 자원이다
- 정합성이 매우 중요하다
- replication은 가능
- 하위 호환성이 매우 중요하다
- DROP TABLE, COLUMN
- DELETE ROW
- 등의 작업 모두 하위 호환성 때문에 막힐 수 있어서 잘 사용하지 않는다
가능한 서버 장애 원인
- 오래 걸리는 DDL (Database Definition Language)
- 컬럼 이름 변경, FK 추가, Index 추가
- index 추가: 존재하는 데이터를 모두 정렬하여 저장해야 하는 복잡한 과정
- Online DDL
- Metadata Lock
- 하위 호환성이 안맞는 경우
- Client-server간 protocol에서 parameter 삭제
- ORM을 사용하는데 drop column하는 db schema 변경이 먼저 일어났을 때
Feature Flag
- Deployment != Rollout (Release)
- 배포와 출시는 다르다
- 배포는 환경에 코드를 실행하는 것이고,
- 출시는 실제로 기능을 사용자에게 내보이는 것이다
- Soft Rollout을 위한 도구
- 특정 기능을 껐다 켰다 할 수 있다
- 서버 배포와 프론트 배포의 주기가 맞지 않을 때 사용하기도 한다
- 플래그가 켜져 있을 때와 꺼져 있을 때 모두 테스트 해봐야 한다