트래픽 분할을 사용하면 서비스 내 버전 두 개 이상에 트래픽 분산 비율을 지정할 수 있다.
트래픽을 분할하면 버전 간 A/B 테스트를 할 수 있으며, 기능을 배포할 때 속도를 제어할 수 있다.
이러한 트래픽 분할은 특정 버전을 명시적으로 대상하지 않는 URL에 적용된다.
예를 들어,
- https://PROJECT_ID.REGION_ID.r.appspot.com - 트래픽을 default 서비스의 여러 버전으로 분산한다.
- https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com - 트래픽을 [SERVICE_ID] 서비스의 여러 버전으로 분산한다.
여러 버전 간 트래픽을 분할할 때는 IP 주소를 사용할지, HTTP 쿠키를 사용할지를 선택해야 한다.
IP 주소 분할
IP 주소를 사용해 Application에 대한 트래픽을 분할할 경우,
Application이 요청을 수신하면 IP 주소가 0~999 사이의 값으로 해싱되고 이 숫자를 사용해 요청을 라우팅한다.
하지만 IP 주소 분할은 다음의 단점을 가지고 있다.
- IP 주소는 영구적으로 고정되어 있지 않는다. 집, 카페 혹은 회사로 이동하여 사용할 때, 휴대전화를 이용할 때 등의 경우 IP 주소가 변경될 수 있고 이에 따라 사용자가 다른 환경의 Application을 이용하게 된다.
- Google Cloud 인프라에서 실행되는 앱 간의 전송 요청은 모두 동일 버전에 할당될 가능성이 있다. 이런 경우는 HTTP Cookie 분할을 사용해야 한다. 예를 들어, 특정 버전의 App에 1%의 트래픽 수신을 설정했다고 가정하자. 그런데 해당 버전에 우연히 Google Cloud 인프라 주소가 할당된다면 모든 요청이 해당 버전으로 라우팅되기 때문에 실제 결과가 1%를 초과할 수 있다.
HTTP 쿠키 분할
Cookie에 대해서는 다음의 포스팅을 참고하자.
https://showlgu-ml.tistory.com/177
HTTP Cookie와 HTTP Session에 대해 알아보자
우리가 사용하는 인터넷을 통신해주는 HTTP는 계속 연결되어 있는 것이 아니다. 클라이언트가 검색을 했을 시에 서버는 그 검색에 대한 정보를 반환해 주고 끊어진다. 이것을 Stateless 프로토콜 이
showlgu-ml.tistory.com
Cookie를 사용해 애플리케이션에 대한 트래픽을 분할할 경우 애플리케이션은 HTTP request header에서 GOOGAPPUID라는 쿠키를 찾는다. 이 Cookie에는 0~999 사이의 값이 포함되어 있다.
그리고 쿠키가 있으면, 이 값을 사용하여 요청을 라우팅하고,
쿠키가 없다면, 요청은 무작위로 라우팅된다. 이 경우에는 앱이 먼저 0~999 사이의 무작위 값을 사용해서 GOOGAPPUID 쿠키를 추가한 후 이를 전송한다.
HTTP 쿠키 분할에도 단점은 존재한다.
- 모바일 앱을 개발하거나 데스크톱 클라이언트를 실행하는 경우, GOOGAPPUID 쿠키를 관리해야 한다. 예를 들어 Set-Cookie 헤더가 사용되는 경우 쿠키를 저장하고 이후 각 요청에 포함해야 한다.
- 내부 요청을 분할하기 위해 추가 테스크가 필요하다. 구글 클라우드 인프라 내에서 전송되는 모든 사용자 요청은 각 요청에 사용자의 쿠키를 전달해야 한다. 예를 들어, 앱에서 다른 앱으로 전송되는 요청에 대해서 사용자의 쿠키를 전달해야 한다. 내부 요청이 사용자로부터 발생하지 않는다면 이러한 요청을 전송하지 않는 것이 좋다.
Traffic Splitting이 기본적으로 지원되는 GCP Services
- APP Engine (Flex & Standard Environments)
- Cloud Run
* Kubernetes Engine requires the use of a continuous delivery system such as Spinnaker to undertake traffic splitting.
* Compute Engine does not offer traffic splitting natively.
'DevOps > Google Cloud Platform' 카테고리의 다른 글
GCP PCA 자격증 시험 후기 & 공부 방법 (0) | 2023.02.03 |
---|---|
A/B Testing, Canary Releases, and Blue-Green Deployments (0) | 2023.01.15 |
Big Data Migration Flowchart (1) | 2023.01.12 |
SLI, SLO, and SLA in SRE에 대해 알아보자 (1) | 2022.12.16 |
Cloud DNS에 대해 알아보자 (0) | 2022.12.05 |