로그인회원가입
faviconSukhad Anand · Geek Culture

Discord는 어떻게 10억 단위의 실시간 메시지를 인덱싱할까?

방문

Discord는 엄청나게 많은 사용자들이 하루에 10억 단위의 메시지를 보내곤합니다. 사용자들은 해당 메시지들을 다시 검색을 하고 싶기도 하지요. Discord에서는 메시지 검색 기능을 제공하기 위해서 데이터를 어떻게 인덱싱을 하고 있을까요?

  1. Discord에서는 ElasticSearch를 사용함
  2. ElasticSearch엔 데이터를 JSON 형태로 담음
  3. ElasticSearch는 내부적으로 Inverted index를 생성함.
    • Inverted Index란 낱말이나 숫자와 같은 내용물로부터의 매핑 정보를 데이터베이스 파일의 특정 지점이나 문서 또는 문서 집합 안에 저장하는 색인 데이터 구조
  4. Inverted Index를 통해 Discord에서 데이터를 거의 실시간으로 빠르게 찾을 수 있음
  5. 인덱싱이 실시간으로 이뤄지지 않음. 데이터는 벌크로 등록됨. 방금 올라온 메시지를 검색하는일은 잘 없어도, 옛날 메시지는 검색하는 일이 많기 때문에 이러한 구조가 괜찮음
  6. 벌크 인덱싱을 하기 위해서 다음 작업을 함
    • 분산화된 Queue를 사용하여 들어오는 메시지를 임시적으로 담음
    • Indexer Worker 여러대를 사용해서 ElasticSearch에 데이터를 벌크로 등록함
  7. Discord에서는 Queue를 위해 Celery를 사용함. 오픈소스 분산 Queue 소프트웨어임.
  8. ElasticSearch 서버도 여러대를 사용중임. 클러스터라는 개념 사용. 데이터는 어떤 클러스터에 담길까? Sharp Allocator를 사용하여 어디에 데이터를 담을지 판단
  9. 돌아가고 있는 ElasticSerach 클러스터들을 관리하기 위해서 etcd 라는 오픈소스 사용함.
좋아요 7
by velopert · 11개월 전

댓글 1

graylobo
11개월 전

tt

1
graylobo
11개월 전

rr

graylobo
11개월 전

aa