grep

DevOps

[안정성 보고서] 3. 안정성을 위한 클라우드 구축

kakao tech카카오

2024년 12월 8일

원문에서 보기 ↗

여는말

카카오에서 운영하는 서비스는 클라우드 위에서 동작하고 있습니다. 안정성과 신뢰성을 높이기 위해, 카카오는 클라우드를 다중화했습니다. 이를 통해 서비스나 데이터센터에 장애가 발생하더라도 신속하게 대응할 수 있으며, 이용자의 소중한 데이터를 손실 없이 안전하게 보관할 수 있습니다.

카카오에서 구축한 클라우드는 여러 데이터센터에 물리적으로 분산되어 있습니다. 이것을 마치 하나의 하나의 데이터센터에서 운영하는 것처럼 관리하기 위해서 멀티 데이터센터 플랫폼을 구축했습니다. 또한, 자체 구축한 멀티 데이터센터 모니터링은 지리적으로 분산된 서비스를 한 눈에 관리할 수 있도록 도와줍니다.

1. 클라우드 다중화

1-1. 클라우드 구성요소 다중화

카카오는 자체 구축한 클라우드 환경에서 서비스를 운영하고 있습니다. 클라우드를 구성하는 각 제품에 영향을 미치는 요소는 크게 인증(Authentication), 리소스(Resource), 스토어(Store)의 3개로 구분합니다.

인증에는 권한 관리 도구가 포함됩니다. 리소스는 서비스를 실행하는 데 필요한 컴퓨터와 네트워크를 뜻하며, 컨테이너 오케스트레이션 플랫폼이 여기에 속합니다. 카카오는 다양한 종류의 이용자 데이터를 자체 구축한 저장소에 저장 및 보관하며 이 저장소들이 스토어에 해당합니다. 스토어는 이용자의 데이터를 보관하기 때문에 데이터 손실을 최소화하는 것이 목표 중 하나입니다.

데이터의 중요도에 따라, 스토어는 총 3가지 종류(티어1, 티어2, 티어3)로 구분됩니다. 티어1은 절대 유실되서는 안 되는 데이터입니다. 데이터센터에 장애가 발생하더라도 데이터는 안전하게 보관되어야 하므로, 여러 데이터센터에 저장된 데이터를 상호 복제합니다. 티어2 이하부터는 데이터센터 간 복제가 되지 않아도 되고, 데이터센터에 장애가 생기는 경우에 일시적으로 데이터 접근이 안되더라도 장애가 해소가 되면 접근이 가능하거나 티어1을 사용해서 복구할 수 있습니다.

클라우드를 구성하는 요소인 인증, 리소스, 스토어 중에서 리소스와 스토어의 안정성을 강화하기 위해서 아래와 같은 다중화 작업을 진행했습니다.

먼저 장애가 발생했을 때 스토어에 미치는 영향이 최소화되도록 스토어와 다른 서비스 간 의존성을 낮추는 작업을 진행했습니다. 데이터베이스 접속 정보와 같이 보안과 관련된 민감한 정보를 저장하는 보안 정보 저장소는 다른 서비스와의 의존성을 제거했습니다. 또한 자동 백업이 되는 데이터베이스를 사용하도록 변경했습니다.

일부 저장소는 응답 속도 및 성능보다 안정성에 중점을 두고 구조를 변경했습니다. 리더-팔로워 구조에서 쿼럼 구조로 변경해, 한 데이터센터에서 장애가 발생하더라도 즉시 이중화 모드로 동작하도록 했습니다. 트래픽이 급증할 때도 저장소가 안정적으로 동작할 수 있도록 저장소 내부를 API 레이어, 스토리지 레이어의 2개의 레이어로 구성해서 세션과 스토리지 처리 부분을 분리했습니다.

마지막으로, 데이터센터에서 장애가 발생하더라도 서비스가 안정적으로 운영될 수 있도록 리소스를 구성하는 각 요소를 다중화했습니다. 리소스에 해당하는 컨테이너는 크게 API 레이어, 스토어 레이어 2개의 레이어로 구성되며 스토어 레이어에서 저장소를 사용합니다. 각 레이어를 이중화해 데이터 유실을 방지합니다.

1-2. 멀티 데이터센터 플랫폼

서비스의 안정성을 확보하기 위해서는 각 서비스의 특징을 고려하여 데이터센터별 구성을 계획하고 서비스를 배포⋅유지⋅관리해야 합니다. 다중화된 서비스를 업데이트하려면 여러 개의 데이터센터에 같은 배포를 여러 번 실행해야 합니다. 이로 인해 각 데이터센터에 분산된 서비스의 상태를 파악하기 위한 모니터링을 데이터센터별로 진행해야 하는 번거로움이 발생할 수 있습니다. 서비스의 상태를 한눈에 파악하기 어려운 경우, 장애에 대한 신속한 대응이 어려울 수 있습니다.

카카오는 각 데이터센터에 배포와 모니터링을 별도로 진행할 필요 없이 한 번의 조치로 세 곳의 데이터센터에 서비스를 배포⋅모니터링할 수 있는 멀티 데이터센터 플랫폼을 구축하였습니다. 관리자는 여러 데이터센터에 마스터 노드를 분산 생성하거나, 단일 클러스터에서 데이터센터별로 노드 그룹을 생성할 수 있습니다. 단일 클러스터에서 데이터센터별로 로드밸런서와 스토리지를 생성해서 구성할 수도 있습니다. 그리고 모니터링 화면에서는 각 노드가 속한 지역의 이름을 표시하고 있으므로 노드의 데이터센터 위치도 즉각 확인할 수 있습니다.

카카오의 멀티 데이터센터 플랫폼 구조가 가진 효과는 크게 두 가지입니다.

  1. 빠르고 효율적인 장애 대응이 가능합니다. 모니터링 설비로 여러 데이터센터에 분산된 서비스를 한 화면에서 확인할 수 있으므로, 서비스 담당자는 장애가 발생했을 때 장애가 발생한 데이터센터를 바로 파악할 수 있습니다. 그리고 장애에 영향을 받지 않은 다른 데이터센터에서 서비스가 동작하도록 데이터센터를 자동 전환하여 장애의 영향을 최소화합니다. 서비스나 운영 관리 도구 중에는 특성상 데이터센터 장애 발생 시에 즉시 재동작해서는 안 되는 경우도 있기 때문에 특성에 따라 재해복구에서 제외하도록 설정할 수 있습니다.

  2. 배포와 유지 관리에 필요한 시간이 줄어듭니다. 데이터센터별로 분산된 서비스를 배포하려면 같은 배포를 여러 번 실행해야 하고, 서비스의 상태를 확인하기 위해서 분산된 서버를 각기 모니터링해야 합니다. 하지만 멀티 데이터센터 플랫폼은 한 번의 조치로 여러 데이터센터에 서비스를 배포하며, 각 데이터센터에 분산되어 동작하는 서비스의 상태를 한눈에 확인할 수 있도록 통합된 모니터링을 제공합니다.

멀티 데이터센터 플랫폼은 반복적인 배포 일정에 대한 자동 설정 및 관리 기능도 제공합니다. 이 기능은 서비스를 배포할 때 각 데이터센터에 같은 배포를 진행하는 불필요한 작업을 없애줍니다. 그리고 데이터센터별로 서비스의 트래픽이 분산되도록 구성하여 배포할 수 있습니다.

서비스를 롤백해야 하는 상황이 발생할 경우에는 데이터센터 여러 곳에서 동작 중인 서비스를 각각 롤백하는 번거로움을 거칠 필요가 없습니다. 한 번에 여러 곳의 데이터센터에서 서비스를 동시에 롤백할 수 있기 때문에, 효과적인 형상 관리가 가능합니다.

2. 클라우드 운영 관리

2-1. 상태 대시보드

서비스 상태 대시보드는 담당자가 약 60종의 클라우드 서비스가 시시각각 변화하는 상황을 신속하게 파악할 수 있도록 서비스 상태를 Up, Down, Warning, Maintenance, Unknown 총 5가지로 분류해 나타냅니다. 또한 서비스의 상태를 실시간으로 파악하기 위해서 최소 1분 단위로 요청을 발송해, 요청에 대한 응답 정보로 기반 서비스 상태를 파악합니다. 서비스 담당자는 서비스 상태 대시보드가 표시하는 상태 단계로 서비스의 상태를 즉각 인지할 수 있습니다. 각 상태별 설명은 아래와 같습니다.

서비스 상태의 분류

그림 11. 실시간 서비스 상태 대시보드

2-2. 서비스 연관성 정보 및 연관성 장애 알림

카카오의 클라우드에는 40여 종의 서비스가 있으며, 네트워크, 저장소, 애플리케이션 등 종류가 다양합니다. 그중 몇몇 서비스에서 제공하는 기능은 다른 서비스의 기능을 사용해서 동작합니다. 이렇게 서비스 간 연관성이 강하거나 복잡하면, 장애에 영향을 받는 범위가 커질 수 있습니다. 서비스가 비정상적 상태라 기능이 제대로 동작하지 않으면 해당 기능을 사용하는 다른 서비스의 기능 동작에도 영향을 미치기 때문입니다. 그래서 서비스 간 연관성을 파악하고 있으면, 장애가 발생했을 때 장애의 확산을 차단하고 신속하게 복구하는 데 도움이 됩니다.

예를 들어, 카카오톡에서 이모티콘을 저장하는 기능은 크게 2가지 서비스를 사용합니다. 이모티콘을 저장하는 과정을 따라가면서 어떤 서비스를 사용하는지 알아보겠습니다.

① 먼저, 이모티콘은 데이터를 안전하게 저장할 수 있는 대용량 저장소인 오브젝트 스토리지에 저장됩니다.

② 이러한 오브젝트 스토리지에 저장된 데이터 중 자주 사용되는 데이터는 고속으로 가져올 수 있도록 임시 저장소인 캐시(Cache)를 사용합니다.

정리하자면, 카카오톡에서 사용하는 이모티콘을 저장하는 데에는 저장소와 캐시의 2가지 서비스가 사용됩니다. 이처럼 한 기능은 다양한 종류의 서비스가 연관되어 작동합니다. 여러 개의 서비스 중 한 서비스에서 장애가 발생하면 다른 서비스까지 장애가 확산되어 기능이 정상적으로 동작하지 않기 때문에, 서비스 간 연관성 정보의 파악과 주시는 매우 중요합니다.

서비스 담당자는 서비스 상태 대시보드의 연관성 정보에서 서비스에 장애가 발생할 경우 알림을 받도록 설정할 수 있습니다. 이 기능 덕분에 서비스 담당자는 연관성이 있는 서비스 중 어떤 서비스에서 장애가 발생했는지 빠르게 파악하고, 한 서비스에서 발생한 장애가 다른 서비스에 영향을 미치기 전에 장애에 대응해 확산을 최소화할 수 있습니다.

그림 12. 서비스 연관성 정보

2-3. 장애 알림 시스템

서비스 상태 대시보드의 장애 알림 시스템은 이벤트가 발생했을 경우 서비스 담당자에게 알림을 발송합니다. 대표적 이벤트로는 서비스 배포, 서비스 상태 변화, 오류 발생 등이 있습니다. 이러한 종류의 이벤트가 서비스에 갑자기 발생할 경우, 서비스 담당자가 즉각 상황을 인지할 수 있도록 서비스 상태 대시보드는 카카오톡, 메일, 카카오워크, 사내게시판 총 4개의 채널로 알림을 신속하게 발송합니다.

모니터링과 장애 알림 시스템으로 얻을 수 있는 효과는 크게 2가지입니다. 첫 번째, 장애 처리 시간이 감소합니다. 장애가 발생했을 때 서비스 담당자가 즉각 인지하고 대응해서 장애를 처리하는 시간을 단축하고 서비스 이용자의 불편함을 최소화할 수 있습니다. 또한, 장애가 다른 서비스에 영향을 주기 전에 신속하게 처리할 수 있어 서비스 운영에 끼치는 영향 역시 최소화할 수 있습니다.

두 번째, 서비스의 상태에 대한 가시성이 확보됩니다. 카카오에서 운영하는 서비스는 개수가 많고 종류가 다양하므로, 한눈에 서비스의 상태를 파악하기가 어렵습니다. 서비스 운영상태 통합 모니터링 시스템은 카카오에서 운영하는 서비스의 현황을 알 수 있는 데이터를 시각화해 실시간으로 제공합니다. 그리고 서비스가 정상적 상태가 아닐 때 상태와 관련된 사용기록을 빠르게 조회할 수 있어 서비스 담당자가 문제를 빠르게 파악하도록 도와줍니다.

그림 13. 장애 알림 시스템 흐름도

닫는말

카카오는 이용자에게 안정적인 서비스를 제공하는 것을 최우선으로 여깁니다. 잠재적인 장애를 예방하고, 만일의 상황에서도 중단 없는 비스를 제공하기 위해서 여러 데이터센터에 클라우드를 분산 배치하고 다중화했습니다.

또한, 장애가 발생했을 경우 신속하게 대응하기 위해서 서비스 간 연간 관계를 효율적으로 파악할 수 있는 클라우드 서비스를 자체 개발했습니다. 이 시스템은 연관성 장애 알림과 연계되어, 서비스에서 장애가 발생할 경우 서비스 담당자가 즉시 인지할 수 있도록 여러 채널을 통해서 알림을 발송합니다.

카카오는 어떠한 상황에서도 이용자에게 끊김 없는 안정적인 서비스를 제공하기 위해 끊임없이 노력하고 있습니다.

기여한 사람들

김근영 rookie 김다솔 hailey 김용민 gray 김종한 john 김희중 kerri 백규철 boss 박예지 miya 임성국 issac 이기현 sbrus 이규진 kyu 정기훈 lev 조아라 vella 최승안 arnold 최현준 diego 홍준호 brenden