작성
·
694
0
아래와 같은 spring cloud 환경에서 무중단 배포를 구현할려면 어떻게 진행해야하나요?
맨 앞단에 L4 1대
그 뒤에 spring cloud gateway 2대
spring cloud eureka 2대
api server 2대
각 서버를 2대씩 구성한 이유는 HA구성을 위해서입니다.
여기서 api server를 무중단 배포로 진행할려면 어떻게 해야되나요?
api server를 down시키면 eureka의 registry에 반영된다 하더라도 gateway에서 반영되기까지는 시간걸려 down된 인스턴스로 라우팅 해주고, gateway에서 retry로직을 적용시켜도 배포순간에 많은 요청이오면 한 요청에 대해서 실패한 인스턴스로 모두 retry하여 결국 실패하는 경우도 생기더라고요 (ribbon의 avoid-previous-instance 적용시킬려고 하였으나 spring cloud gateway에서는 지원 안한다고합니다 ㅜㅜ)
현업에서는 보통 어떤 방식으로 무중단 배포를 구현하나요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
Spring Cloud 환경에서 무중단 배포를 구현하는 방법에 대해서 알려드릴게요.
먼저, API 서버의 무중단 배포를 위해서는 대체 가능한 인스턴스가 필요합니다. Ribbon의 avoid-previous-instance와 같은 기능을 Spring Cloud Gateway에서는 지원하지 않기 때문에 다른 방법을 사용해야 합니다.
Blue-green 방식: 기존의 API 서버와 같은 환경을 구성한 새로운 API 서버를 준비합니다. 이를 “Blue 서버”라고 부릅니다. 이후 무중단 배포를 진행하기 위해 새로운 버전의 API 서버를 빌드하고 배포합니다. 이를 “Green 서버”라고 부릅니다. 그리고 L4 로드 밸런서나 DNS 관리를 통해 트래픽을 Blue 서버에서 Green 서버로 전환합니다. 이후 Blue 서버를 수거할 수 있습니다.
Canary 방식: 새로운 버전의 API 서버를 배포하기 전에 일부 트래픽만 새로운 버전으로 유도하는 방식입니다. 예를 들어, 사용자의 일부 요청을 새로운 버전의 API 서버로 라우팅하고 나머지 요청은 기존 버전으로 라우팅합니다. 이를 통해 새로운 버전의 안정성을 확인하고 문제가 없다면 나머지 트래픽도 점차적으로 새로운 버전으로 전환합니다.
Circuit Breaker 패턴: 모두 매끄럽지 않은 경우, 잠재적인 장애 상황을 방지하기 위한 방법입니다. Circuit Breaker 패턴을 적용하여 실패한 요청을 즉시 처리하고, 해당 인스턴스로의 요청을 일정 시간 동안 차단합니다. 이를 통해 혼잡 상황을 방지하고 무중단 배포를 지원합니다.
위의 방법 중에는 다양한 선택이 가능하며, 현업마다 다른 방식으로 구현할 수 있습니다. 시스템의 복잡성과 안정성 요구 사항에 따라 적절한 방법을 선택하면 됩니다. 고객님의 환경과 요구 사항을 고려하여 적용해보시기 바랍니다.
무중단 배포를 위한 기술적인 내용은 실제로 상당히 복잡할 수 있으니, Spring Cloud Gateway, Ribbon, Eureka와 같은 Spring Cloud 컴포넌트에 대해 더 자세히 학습하시는 것을 추천드립니다.
더 많은 도움을 드리지 못해서 죄송합니다. 무중단 배포에 대한 추가적인 질문이 있으시다면 언제든지 답변해드리겠습니다. 좋은 결과 있기를 기대합니다. 감사합니다!