brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Jul 21. 2022

6탄-1. 2200만 사용자 위한 채팅 시스템 아키텍처


<1> 아키텍처 현대화 = 모더나이제이션 특징

<2> 당근 마켓 채팅 데이터 분리하기

<3> 다이나모 디비 사용하면서 어려운 점

<4> 다음은  API  만들기

<5> 웹소켓을 통한 실시간 메시징 시스템 도입 

<6> 별도의  분석을 위한 데이터 파이프라인을 구축

<7> 채팅 데이터를 다른 서비스에서 활용하기





<1> 아키텍처 현대화 = 모더나이제이션 특징


1

느슨하게 결합된 서비스로 설계

경량화된 컨테이너 또는 서버리스 서비스

상태 비저장(Stateless) 서비스와 상태 저장(Stateful) 서비스로 분리하여 설계

탄력적이고 회복력 있는 셀프서비스 인프라

서버 및 운영 체제 종속성은 격리되어 관리 



2

현대화?


애플리케이션을 컨테이너로 이동하는 것을 고려?

관리형  AWS컨테이너 서비스로 이동하여  운영 단순화 관리 줄이자


새로운 애플리케이션이나 기능 구축?

람다와 같은 서버리스 사용 권장한다.




<2> 당근 마켓 채팅 데이터 분리하기


1

당근 마켓은 월평균 1,600만 명 사용자 접속


2

채팅 데이터 분리하기

데이터 베이스 리서치 진행?

매지니드 서비스 일 것

최대한 운영 시간을 아낄 것

데이터 용량 확장이 용이할 것


결과

다이나모 디비 사용

성능은 수 ms  보장함



<3> 다이나모 디비 사용하면서 어려운 점


1

일반적인 SQL을 사용하지 못함

데이터를 가져오기 위해선 쿼리와 스캔으로 가져와야 함

쿼리는 인덱스를 건 아이템만 가져올 수 있음

스캔으로 필터를 걸 수 있음

단지, 실제 데이터를 전부 읽으면서 필터링해서 가져오므로 비용 발생함. 실서비스에서는 사용하지 않음.

처음에 스캔만 사용해 서비스를 구현한다면 비용 문제 발생.

인덱스를 잘해야 하므로 고민이 필요함.

풀 스캔으로 전체 데이터에서 필터링하고 싶은 경우 다이나모 기능으로는 거의 불가능함.


2

다이나모 디비를 사용한다면 별도의  분석을 위한 데이터 파이프라인을 구축해야 한다.



<4>   다음은  API  만들기


API 서버 만듦

Internal API  만듦

테스트 케이스 구축

gRPC 구축

WebSocket 구축

REST API  구축



<5> 웹소켓을 통한 실시간 메시징 시스템 도입 


 ElastiCache-Redis   사용




<6> 별도의  분석을 위한 데이터 파이프라인을 구축


다이나모 디비를 실시간으로 처리하기 위한  다이나모 디비 스트림 - 24시간 저장.

원하는 곳에 적재하기 위한 람다 이벤트 버퍼

이벤트 버퍼를 받아 스토리지에 저장하는 파이어호스

데이터 웨어 하우스의 스토리지 역할을 하는 s3

데이터 보기는 아테나

AWS Glue 사용

AWS Step Function 사용

apache Airflow사용



<7> 채팅 데이터를 다른 서비스에서 활용하기



별도의  분석을 위한 데이터 파이프라인을 구축

Fluentbit를 통해 매니지드 카프카로 보냄





<10> 개인 요약


당근 마켓 채팅 데이터 분리하기 확인 하자

다이나모 디비 사용하면서 어려운 점 인지하자.

 채팅 데이터를 다른 서비스에서 활용하기 확인하자



https://brunch.co.kr/@topasvga/2439


감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari