반응형

글로벌 채팅 서비스 (AWS Native)

Desc

  • 천만 사용자를 위한 카카오의 AWS Native 글로벌 채팅 서비스

글로벌 채팅 서비스의 요구사항과 전략

  • 글로벌 서비스 출시
  • 빠른 개발을 위해서 적은인원으로도 Buildup이 가능해야했음 → 중요한것에 집중해라
  • 정말 이게 될까?” 의 대한 빠르고 정확한 해답을 원했음

전략

  • AWS 글로벌 Infrastructure
  • Serverless (적은 인원으로도 빠르게)
  • Prototyping (빠른 의견의 수용)

AWS Global Infrastructure

  • AWS는 여러리전과 AZ를 제공한다.
  • 이러한 Region들을 사용해서 각 지역의 사용자에게 빠르게 Serving 한다
  • 100GbE 급의 네트워크 통신가능 (Direct Connect)
  • 좋은 AWS 네트워크 설계 (어느한곳에 서비스가 끊겨도 → 다른곳을 이용해서 통신한다)
    • 고 가용성 확보 (Availaiblity zone) x ≥ 2

Serverless

  • 소수정예 인원으로 빠르게 인프라를 구축해야 한다.
  • 그렇다면 Management는 AWS에게 맡기고 구축 & 운영을 해보자

  • AWS Lambda
    • 현재는 Lambda 자체가 비동기적인 EDA를 구축할수 있다.
    • API 기반의 HTTP, HTTPS 기반의 Serverless도 구축가능

  • DynamoDB (채팅 데이터 및 메시지를 어떻게 관리할까?)
    • RDS도 고민했지만 그 수많은 채팅 메시지에 관계형을 쓴다는것은 좋은 선택이 아님
    • 오히려 빠르게 Update 되는 성격을 띄는 채팅 특성상 NoSQL이 적합했음
    • 인덱스만 안다면 데이터를 바로 뽑을 수 있음 O(1)

  • AWS IoT (Client 들의 App의 대한 연결을 어떻게 진행하지?)
    • 결국 Mobile App은 여러가지 변수가 발생함
    • 출근길에 터널을 지난다든지 (네트워크 불량)
    • 집에서 사무실에서 다시 접속할때 (네트워크 변경)
    • 클라이언트 연결관리를 진행 함 → AWS IoT

정말 이게 될까?

  • AWS에는 Prototype Team이 이미 존재
  • 빠르고 바른 의사결정을 위한 AWS 내부 Team
    • 실제 상황과 아주 유사한 환경을 Test 함
    • 성능 검증까지 진행

실제 AWS Native 사례 (Global Chatting)

  • 실시간의 성격이 뚜렷한 채팅서비스를 Serverless로 구축할 수 있을까?
  • 1.5명의 인원으로 글로벌 채팅 서비스를 구축해야 했음

첫번째 시도 2018) API Gateway

  • Amazon API Gateway가 Websocket을 지원함
  • 기본적인 XMPP Server의 문제점은 Scale-out되는 구조가 되야하는데, 이러면 메시지 공유가능한 Broker와 Load Balancer가 필요함

구현 Lambda + API Gateway + DynamoDB

  • AWS 서비스를 활용하여 관리포인트 감소
  • 추가적인 요구사항
    • 접속 상태 확인 (과거)
    • 메시지 즉시 전달 (과거)
    • 메시지 보관 (현재)
    • 답글 달기 (현재)
    • 공지 (현재)
    • “좋아요” 달기 (현재)

  • API Gateway + Lambda + DynamoDB를 사용해서, Scale-out을 빠르게 보장할수 있었음 (최고)
  • 안티패턴 극복
    • RDBMS에서는 id라는 primary key를 사용해서 auto_increment로 사용
    • NoSQL에서는 pk개념이 없기 때문에, uuid를 사용해야 함

성공적인 결과 → 글로벌 서비스 구현 지원

  • 서울, 도쿄, 북미 여러 리전에 접속한 유저들의 채팅에 있어서 분석결과
    • 주로 같은 리전에서 트래픽이 발생함 (언어가 통해야되기 때문에)
    • 간혹 다른리전에서 발생도 하긴 함
  • Region을 넘어선 통신의 대해서는 아키텍처를 고려해볼만 함
    • Region 간의 API 호출 시 낮은 지연시간 ⇒ Amazon API Gateway ****
      • Region 과 Region 간의 통신이 가능함
      • 즉, A Regino에 Lamba가 B Region에 API Gateway 통신이 가능함
    • 다른 Region에 대한 정보는
      • AWS Lambda → API Gateway 를 통해서 가져옴
    • Region 간의 데이터 동기화
      • Amazon DynamoDB Global Table을 사용해서 진행
      • Region 간의 각각 테이블이 존재하면 동기화 하는 방식임

중국 → 중국은 AWS 내의 서비스를 대부분 지원을 하지 않음

  • 중국은 CloudFront를 사용해서 Proxy 역할을 지원

동남아는 성공 ⇒ 글로벌 서비스를 위한 지원

  • 요구사항
    • DAU 10,000,000
    • MAU 1,000,000
    • 서버리스를 사용하되, Quota안에서 동작가능하도록 설계해야 함 (기획 + 사업)
    • 유저의 수용 수가 커진만큼, 급격한 트래픽의 대해서 Stream Pipeline (Kinesis) 구축
  • 아키텍처 설계

  • 실시간 Pipeline
    • Amazon API Gateway + AWS Lambda + DynamoDB
  • 대용량 트래픽 + Client Side의 대한 신뢰성 검증
    • AWS IoT Core (Client의 신뢰성)
    • Amazon Kinesis Data Stream
  • 인증과 관련된 도구들
    • Amazon Cognito
    • AWS WAF

Reference

천만 사용자를 위한 카카오의 AWS Native 글로벌 채팅 서비스 - 김영욱 SA, AWS / Walter Kim 실장, Kakao :: AWS Summit Seoul 2023

반응형

+ Recent posts