-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BE] 프로덕션 서버 무중단 배포 환경 구축 #413
Conversation
Test Results156 tests 156 ✅ 20s ⏱️ Results for commit cc92253. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👏
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🍑
ELB 대상 그룹을 동적으로 변경해서 인스턴스 하나씩 배포하는 방법 괜찮은 것 같아요. 찾아보니 AWS ELB는
가장 큰 고려사항은 그치만 현재로써 도전할 가치는 충분해보입니다. 같이 고민해보면 좋겠습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
😎
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
좋은데요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
관련 이슈
작업 내용
프로덕션 서버(
prod-a
,prod-b
)에 무중단 배포를 적용합니다.nginx와 docker 컨테이너를 활용한 Blue/Green 전략을 사용하며, 인스턴스 내에서 컨테이너 두 개를 실행하고, 새로운 컨테이너에 이상이 없다면
proxy_pass
를 전환시킨 후 기존 컨테이너를 종료하는 형태로 동작합니다.전체 플로우는 위와 같으며, 스크립트 상세 구현은 서브모듈을 참고해 주세요.
특이 사항
Connection: keep-alive
에서 nginx가 TCP 커넥션을 처리하는 방식 때문에nginx reload
시 약 0.1~0.2초의 다운타임이 발생합니다. 서비스 특성 상 이정도의 다운타임이 크리티컬한 장애요소가 되지는 않지만, 진정한 '무중단' 배포로 볼 수 없다는 시각 역시 존재합니다.nginx worker를 튜닝하여 다운타임을 0.0초대로 감소시킨 사례가 존재하긴 하지만, 완전히 제로 다운타임을 만드는 것은 nginx만을 가지고는 불가능해 보입니다.
현재 ELB를 사용하여 프로덕션 인스턴스가 이중화되어 있으므로, 한쪽의 배포가 진행되는 찰나의 순간동안 로드밸런서의 라우팅을 제어하여 (롤링+블루그린을 혼합한 형태가 되겠네요🤔) 구현이 가능할 것 같긴 한데 아래와 같은 고민이 좀 더 필요합니다.
Note
현재는 배포 이후 기존의 컨테이너를 바로 종료시키므로, 블루그린 배포의 이점 중 하나인 빠른 롤백을 100% 활용하지는 못하고 있습니다.
이후 자동 롤백의 기준과 구현 방향을 확정지은 후, 스크립트 수정이 필요해 보입니다.
ref: https://trac.nginx.org/nginx/ticket/1022#comment:1
리뷰 요구사항 (선택)