2019.05.03

'오픈스택 센린' 도입한 블리자드··· "오버워치 운영 서버 40% 줄여"

Tamlin Magee | Computerworld UK
FPS 게임 오버워치(Overwatch)로 유명한 블리자드 엔터테인먼트가 오픈스택의 클러스터링 서비스 센린(Senlin)으로 전환했다. 그 결과 오버워치 서비스 인프라의 오토스케일링을 더 원활하게 지원해 가상머신(VM) 사용량을 40% 줄인 것으로 나타났다.



오버워치는 전 세계적으로 10억 달러 이상의 매출을 내고 있는 글로벌 히트작이다. e스포츠로도 인기를 끌고 있다. 블리자드는 오버워치 외에 월드오브워크레프트, 디아블로 같은 게임을 서비스하고 있다. 전 세계 11개 지역에서 운영하는 데이터센터의 프라이빗 클라우드에서 오픈스택 기반으로 실행되는 가상 게이밍 서버를 활용한다. 

최근 열린 오픈 인프라스트럭처 서밋 행사의 패널 토론에서 블리자드 클라우드 엔지니어 두크 트렁과 선임 클라우드 소프트웨어 엔지니어 주드 크로스는 센린을 도입한 이후 블리자드의 게임 서버 클러스터 운영이 어떻게 바뀌었는지 자세히 설명했다. 오버워치 등록 사용자는 4,000만 명에 달한다. 수초의 딜레이로도 게임의 형세가 바뀔 수 있기 때문에 낮은 레이턴시로 사용자에 영향을 최소화하면서 작업해야 했다고 밝혔다.

블리자드의 센린 도입기
블리자드는 올해 초부터 오픈스택 기반 게임 서버의 오토스케일링을 시작했다. 그러나 실제 오픈스택을 프라이빗 클라우드에서 도입한 것은 지난 2012년까지 거슬러 올라간다. 현재 블리자드는 주로 로키(Rocky) 버전의 오픈스택을 사용하며 일부 서비스는 파이트(Pike)를 기반으로 사용한다. 센린은 오픈스택 최신 릴리즈인 스테인(Stein)에서 운영하고 있다.

트렁은 "퍼블릭 클라우드의 오토스케일링 장점은 명확하다. 인스턴스를 덜 사용하고 비용을 줄일 수 있다. 그러나 우리 같은 프라이빗 클라우드는 리소스가 제한돼 있다. 오토스케일링을 사용하지 못하면 이 제한된 리소스를 게임별로 분할해 써야 하는 단점이 있다"라고 말했다.

그래서 블리자드는 일단 게임마다 최대 트래픽을 감당할 수 있고 콘텐츠 릴리즈 또는 시즌 이벤트를 처리할 정도의 VM을 할당한다. 비 피크타임에는 로드가 줄어들면서 각 VM의 활용률이 평균 이하로 떨어진다. 이때 오토스케일링을 이용하면 비 피크 타임 동안 쓰이지 않는 VM은 여유 용량으로 전환돼 다른 게임을 지원할 수 있도록, 즉 바로 재할당할 수 있는 상태가 된다.

오토스케일링의 또 다른 장점은 게임 개발팀이 배포 작업을 더 쉽게 할 수 있다는 것이다. 예를 들어 새로운 맵을 릴리즈해야 하는 상황이라면 개발팀이 새 콘텐츠를 지원하는 게임 서버 클러스터를 확장해 여기서 테스트할 수 있다. 테스트를 마치고 실제 서비스할 수 있는 상태가 되면 트래픽을 기존 클러스터에서 새로운 클러스터로 전환하고 기존 클러스터는 서서히 용량을 줄인다. 이를 '드레이닝(draining)'이라고 한다.

만약 예상치 못한 상황에서 트래픽이 폭증해도 마찬가지다. 예를 들어 트위치(Twitch) 스트리머의 로그인이 몰리면 필요에 따라 서버를 확장한다. 트래픽이 줄어들면 다시 서버도 줄인다. 이런 상황에서 블리자드 인프라의 또 다른 장점은 블리자드가 운영하는 VM의 수명이 전통적인 게임 서버보다 훨씬 짧다는 것이다. 기존 게임 서버는 짧게는 수주, 길게는 몇 달 이상 운영된다. 반면 블리자드의 VM은 수명이 짧아 장기간 운영하는 것에 따른 메모리나 네트워크 부족에 따른 버그를 줄일 수 있다.

반면 수명이 짧은 것에 따른 문제도 있다. 사용자가 게임이 접속한 후 몇 시간 동안 유지하면 이 사용자가 게임을 끝내고 해당 VM을 떠나기 전에는 VM을 삭제할 수 없는 것이다. 이 대기 시간이 오래 걸릴 수도 있다. 그래서 개발팀은 클러스터가 삭제되기 전에 노드를 드레인하기 위해 센린을 이용해 라이프사이클 훅(lifecycle hook)을 적용했다. 라이프사이클 훅을 이용하면 인스턴트의 생성, 삭제를 일시 정지시키는 것은 물론 인스턴스의 주요 이벤트를 모니터링할 수 있다.

크로스는 "게임에 대한 모든 간섭은 그것이 설사 1초 정도라고 해도 사용자 경험에 큰 영향을 줄 수 있다. 이 영향에 따라 게임 속에서 경쟁자를 사로잡거나 죽는 것이 결정될 수도 있다. 따라서 게임 서버 인프라에 손댈 때는 게임 상태를 유지하는 것이 가장 중요하다"라고 말했다.

센린을 선택한 이유
블리자드의 개발팀이 새로운 오토스케일링은 고민한 것은 2017년이었다. AWS 퍼블릭 클라우드 인스턴스에서 오토스케일링을 사용하고 있었고, 오픈스택 오케스트레이션 엔진 히트(Heat)로의 전환을 검토했다. 그러나 결과적으로 최종 선택은 센린이었다. 바로 이 '라이프사이클 훅'을 이용해 서버를 드레이닝할 수 있었기 때문이다. 

센린의 장점은 또 있었다. 이미 개발팀이 사용해 온 AWS 오토스케일링과 매우 흡사한 기능을 지원하는 것은 물론 오토스케일링을 위한 REST API까지 추가로 지원했다. 이들 클러스터를 지원하는 고퍼클라우드(Gophercloud)와 테라폼(Terraform) 익스텍션까지 개발할 수 있었다.

전통적인 오토스케일링에서는 인프라 확장 여부를 결정할 때 CPU, 메모리 사용률 같은 VM 관련 수치를 기준으로 한다. 그러나 게임 서버는 VM에 모든 RAM을 할당한다. 대신 물리적 연산이나 서버 내에서 어떤 일이 발생하느냐에 따라 CPU 사용률이 폭증할 수 있다.

크로스는 "이런 특성 때문에 게임 인프라에서는 게임 서버의 확장, 축소 여부나 사용자의 게임 서버 접속을 차단할지 결정하는 '신뢰할 수 있는 수치'가 사실상 없다. 그래서 우리는 게임 서버가 독립적으로 로드를 정의하고 계산할 수 있도록 했다. 이를 통해 오토스케일링 서비스에 대한 부하를 외부로 드러내고 이를 근거로 스케일링에 대한 의사결정을 할 수 있도록 했다"라고 말했다.

블리자드의 센린 오토스케일링은 이렇게 만들어졌다. 센린이 게임 서버 클러스터를 만들고 관리한다. 컨트롤 패널에서 도커 컨테이너로 운영하며, 역시 도커 컨테이너로 실행되는 제커(Zaqar)를 통해 라이프사이클 훅 메시지를 보낸다. 이는 블리자드가 고(Go) 언어로 자체 개발한 애플리케이션 '블리자드 오토스케일링 서비스(Blizzard autoscaling service)'와 통합된다. 이런 방식으로 블리자드 오토스케일링 서비스는 클러스터에 대한 VM 사이드카로 실행되며, 오픈스택 프라이빗 클라우드에서 작동하는 것은 물론 추가 리소스가 필요할 경우 AWS와도 호환된다.

오토스케일링은 게임 서버의 부하를 계산하면 필요에 따라 센린에 게임 서버 확장 혹은 축소를 요청한다. 확장하면 오픈스택 VM 프로비저닝 툴 노바(Nova)를 통해 서버를 요청하거나 생성한다. 축소하는 경우에는 블리자드 서비스가 센린과 통신해, 처리해야 할 노드를 특정하고 이 노드를 드레인한다. 이 노드에 속한 모든 플레이어가 서버를 떠나면 센린이 삭제해도 된다는 메시지를 주고 노바가 이를 최종적으로 없애버린다.
 
여전히 해결해야 할 문제
블리자드가 이런 인프라를 구축하는 과정에서 어려움도 많았다. 특히 많은 클러스터가 운영 중일 때 데이터베이스 효율성이 떨어졌고 액션 리스트, 고객 리스트 작업에서 지연이 나타났다. 이를 해결하기 위해 블리자드의 클라우드팀은 데이터베이스 모델을 수정하고 필요 없는 DB 호출을 제거했다. 그 결과 10배 가까이 성능이 향상됐다. 크로스는 "과장처럼 들리겠지만 사실이다. 1000% 개선됐다"라고 말했다.

클라우드팀이 직면한 또다른 난관은 상당한 수의 동시 스케일링 작업을 처리할 때 데이터베이스 장애로 이어지는 데이터베이스 잠금 문제였다. 장애 확인도 비동기적으로 발생해 블리자드 오토스케일링 서비스의 문제로 이어졌다. 이는 여러 가지 확장, 축소 작업을 큐에 쌓이게 하고 클러스터 상태에 대한 가시성을 떨어뜨렸다. 클라우드팀이 찾은 해법은 센린과 API 간의 충돌을 외부로 드러내는 것이었다. 즉 API가 이미 확장 혹은 축소 작업을 진행 중이라고 미리 알려주는 것이다. 이제 클라우드팀은 잘못된 요청이 들어오면 빠르게 장애 서버로 분류해 처리할 수 있게 됐다.

결과적으로 블리자드가 오토스케일링 서비스를 지원하는 센린으로 전환한 후 큰 효과를 볼 수 있었다. 자사 프라이빗 클라우드 환경에서 운영하는 VM 수를 40% 줄일 수 있었다. 현재 트렁과 크로스는 '#senlin OpenStack' IRC 채널을 통해 블리자드의 프로젝트 경험을 공유하고 있다. 블리자드의 작업을 더 자세히 알고 싶다면 여기에 참여하면 된다. ciokr@idg.co.kr



2019.05.03

'오픈스택 센린' 도입한 블리자드··· "오버워치 운영 서버 40% 줄여"

Tamlin Magee | Computerworld UK
FPS 게임 오버워치(Overwatch)로 유명한 블리자드 엔터테인먼트가 오픈스택의 클러스터링 서비스 센린(Senlin)으로 전환했다. 그 결과 오버워치 서비스 인프라의 오토스케일링을 더 원활하게 지원해 가상머신(VM) 사용량을 40% 줄인 것으로 나타났다.



오버워치는 전 세계적으로 10억 달러 이상의 매출을 내고 있는 글로벌 히트작이다. e스포츠로도 인기를 끌고 있다. 블리자드는 오버워치 외에 월드오브워크레프트, 디아블로 같은 게임을 서비스하고 있다. 전 세계 11개 지역에서 운영하는 데이터센터의 프라이빗 클라우드에서 오픈스택 기반으로 실행되는 가상 게이밍 서버를 활용한다. 

최근 열린 오픈 인프라스트럭처 서밋 행사의 패널 토론에서 블리자드 클라우드 엔지니어 두크 트렁과 선임 클라우드 소프트웨어 엔지니어 주드 크로스는 센린을 도입한 이후 블리자드의 게임 서버 클러스터 운영이 어떻게 바뀌었는지 자세히 설명했다. 오버워치 등록 사용자는 4,000만 명에 달한다. 수초의 딜레이로도 게임의 형세가 바뀔 수 있기 때문에 낮은 레이턴시로 사용자에 영향을 최소화하면서 작업해야 했다고 밝혔다.

블리자드의 센린 도입기
블리자드는 올해 초부터 오픈스택 기반 게임 서버의 오토스케일링을 시작했다. 그러나 실제 오픈스택을 프라이빗 클라우드에서 도입한 것은 지난 2012년까지 거슬러 올라간다. 현재 블리자드는 주로 로키(Rocky) 버전의 오픈스택을 사용하며 일부 서비스는 파이트(Pike)를 기반으로 사용한다. 센린은 오픈스택 최신 릴리즈인 스테인(Stein)에서 운영하고 있다.

트렁은 "퍼블릭 클라우드의 오토스케일링 장점은 명확하다. 인스턴스를 덜 사용하고 비용을 줄일 수 있다. 그러나 우리 같은 프라이빗 클라우드는 리소스가 제한돼 있다. 오토스케일링을 사용하지 못하면 이 제한된 리소스를 게임별로 분할해 써야 하는 단점이 있다"라고 말했다.

그래서 블리자드는 일단 게임마다 최대 트래픽을 감당할 수 있고 콘텐츠 릴리즈 또는 시즌 이벤트를 처리할 정도의 VM을 할당한다. 비 피크타임에는 로드가 줄어들면서 각 VM의 활용률이 평균 이하로 떨어진다. 이때 오토스케일링을 이용하면 비 피크 타임 동안 쓰이지 않는 VM은 여유 용량으로 전환돼 다른 게임을 지원할 수 있도록, 즉 바로 재할당할 수 있는 상태가 된다.

오토스케일링의 또 다른 장점은 게임 개발팀이 배포 작업을 더 쉽게 할 수 있다는 것이다. 예를 들어 새로운 맵을 릴리즈해야 하는 상황이라면 개발팀이 새 콘텐츠를 지원하는 게임 서버 클러스터를 확장해 여기서 테스트할 수 있다. 테스트를 마치고 실제 서비스할 수 있는 상태가 되면 트래픽을 기존 클러스터에서 새로운 클러스터로 전환하고 기존 클러스터는 서서히 용량을 줄인다. 이를 '드레이닝(draining)'이라고 한다.

만약 예상치 못한 상황에서 트래픽이 폭증해도 마찬가지다. 예를 들어 트위치(Twitch) 스트리머의 로그인이 몰리면 필요에 따라 서버를 확장한다. 트래픽이 줄어들면 다시 서버도 줄인다. 이런 상황에서 블리자드 인프라의 또 다른 장점은 블리자드가 운영하는 VM의 수명이 전통적인 게임 서버보다 훨씬 짧다는 것이다. 기존 게임 서버는 짧게는 수주, 길게는 몇 달 이상 운영된다. 반면 블리자드의 VM은 수명이 짧아 장기간 운영하는 것에 따른 메모리나 네트워크 부족에 따른 버그를 줄일 수 있다.

반면 수명이 짧은 것에 따른 문제도 있다. 사용자가 게임이 접속한 후 몇 시간 동안 유지하면 이 사용자가 게임을 끝내고 해당 VM을 떠나기 전에는 VM을 삭제할 수 없는 것이다. 이 대기 시간이 오래 걸릴 수도 있다. 그래서 개발팀은 클러스터가 삭제되기 전에 노드를 드레인하기 위해 센린을 이용해 라이프사이클 훅(lifecycle hook)을 적용했다. 라이프사이클 훅을 이용하면 인스턴트의 생성, 삭제를 일시 정지시키는 것은 물론 인스턴스의 주요 이벤트를 모니터링할 수 있다.

크로스는 "게임에 대한 모든 간섭은 그것이 설사 1초 정도라고 해도 사용자 경험에 큰 영향을 줄 수 있다. 이 영향에 따라 게임 속에서 경쟁자를 사로잡거나 죽는 것이 결정될 수도 있다. 따라서 게임 서버 인프라에 손댈 때는 게임 상태를 유지하는 것이 가장 중요하다"라고 말했다.

센린을 선택한 이유
블리자드의 개발팀이 새로운 오토스케일링은 고민한 것은 2017년이었다. AWS 퍼블릭 클라우드 인스턴스에서 오토스케일링을 사용하고 있었고, 오픈스택 오케스트레이션 엔진 히트(Heat)로의 전환을 검토했다. 그러나 결과적으로 최종 선택은 센린이었다. 바로 이 '라이프사이클 훅'을 이용해 서버를 드레이닝할 수 있었기 때문이다. 

센린의 장점은 또 있었다. 이미 개발팀이 사용해 온 AWS 오토스케일링과 매우 흡사한 기능을 지원하는 것은 물론 오토스케일링을 위한 REST API까지 추가로 지원했다. 이들 클러스터를 지원하는 고퍼클라우드(Gophercloud)와 테라폼(Terraform) 익스텍션까지 개발할 수 있었다.

전통적인 오토스케일링에서는 인프라 확장 여부를 결정할 때 CPU, 메모리 사용률 같은 VM 관련 수치를 기준으로 한다. 그러나 게임 서버는 VM에 모든 RAM을 할당한다. 대신 물리적 연산이나 서버 내에서 어떤 일이 발생하느냐에 따라 CPU 사용률이 폭증할 수 있다.

크로스는 "이런 특성 때문에 게임 인프라에서는 게임 서버의 확장, 축소 여부나 사용자의 게임 서버 접속을 차단할지 결정하는 '신뢰할 수 있는 수치'가 사실상 없다. 그래서 우리는 게임 서버가 독립적으로 로드를 정의하고 계산할 수 있도록 했다. 이를 통해 오토스케일링 서비스에 대한 부하를 외부로 드러내고 이를 근거로 스케일링에 대한 의사결정을 할 수 있도록 했다"라고 말했다.

블리자드의 센린 오토스케일링은 이렇게 만들어졌다. 센린이 게임 서버 클러스터를 만들고 관리한다. 컨트롤 패널에서 도커 컨테이너로 운영하며, 역시 도커 컨테이너로 실행되는 제커(Zaqar)를 통해 라이프사이클 훅 메시지를 보낸다. 이는 블리자드가 고(Go) 언어로 자체 개발한 애플리케이션 '블리자드 오토스케일링 서비스(Blizzard autoscaling service)'와 통합된다. 이런 방식으로 블리자드 오토스케일링 서비스는 클러스터에 대한 VM 사이드카로 실행되며, 오픈스택 프라이빗 클라우드에서 작동하는 것은 물론 추가 리소스가 필요할 경우 AWS와도 호환된다.

오토스케일링은 게임 서버의 부하를 계산하면 필요에 따라 센린에 게임 서버 확장 혹은 축소를 요청한다. 확장하면 오픈스택 VM 프로비저닝 툴 노바(Nova)를 통해 서버를 요청하거나 생성한다. 축소하는 경우에는 블리자드 서비스가 센린과 통신해, 처리해야 할 노드를 특정하고 이 노드를 드레인한다. 이 노드에 속한 모든 플레이어가 서버를 떠나면 센린이 삭제해도 된다는 메시지를 주고 노바가 이를 최종적으로 없애버린다.
 
여전히 해결해야 할 문제
블리자드가 이런 인프라를 구축하는 과정에서 어려움도 많았다. 특히 많은 클러스터가 운영 중일 때 데이터베이스 효율성이 떨어졌고 액션 리스트, 고객 리스트 작업에서 지연이 나타났다. 이를 해결하기 위해 블리자드의 클라우드팀은 데이터베이스 모델을 수정하고 필요 없는 DB 호출을 제거했다. 그 결과 10배 가까이 성능이 향상됐다. 크로스는 "과장처럼 들리겠지만 사실이다. 1000% 개선됐다"라고 말했다.

클라우드팀이 직면한 또다른 난관은 상당한 수의 동시 스케일링 작업을 처리할 때 데이터베이스 장애로 이어지는 데이터베이스 잠금 문제였다. 장애 확인도 비동기적으로 발생해 블리자드 오토스케일링 서비스의 문제로 이어졌다. 이는 여러 가지 확장, 축소 작업을 큐에 쌓이게 하고 클러스터 상태에 대한 가시성을 떨어뜨렸다. 클라우드팀이 찾은 해법은 센린과 API 간의 충돌을 외부로 드러내는 것이었다. 즉 API가 이미 확장 혹은 축소 작업을 진행 중이라고 미리 알려주는 것이다. 이제 클라우드팀은 잘못된 요청이 들어오면 빠르게 장애 서버로 분류해 처리할 수 있게 됐다.

결과적으로 블리자드가 오토스케일링 서비스를 지원하는 센린으로 전환한 후 큰 효과를 볼 수 있었다. 자사 프라이빗 클라우드 환경에서 운영하는 VM 수를 40% 줄일 수 있었다. 현재 트렁과 크로스는 '#senlin OpenStack' IRC 채널을 통해 블리자드의 프로젝트 경험을 공유하고 있다. 블리자드의 작업을 더 자세히 알고 싶다면 여기에 참여하면 된다. ciokr@idg.co.kr

X