inflearn logo
강의

講義

知識共有

AI時代にも生き残るエンジニアの条件、米国ビッグテックのシステムデザイン・アルゴリズム思考・オープンソース実務の完成

TinderのシステムデザインおよびスケーリングDeepDive [アップデート]

Matching Service의 MQ 필요성, Cassandra의 필요성, Cassandara - RDB 동기화

解決済みの質問

88

jaehyeonhan

投稿した質問数 7

0

안녕하세요, Tinder 설계 강의 내용에 궁금한 점이 생겨 질문 드립니다. Matching Service와 Cassandra 사용에 대한 질문입니다.

  1. Matching Service의 MQ와 /swipematching 응답값

     

    강의에서는 REST API는 지연이 발생할 수 있으므로 MQ를 사용했다고 말씀하셨습니다. 이때 API 명세에 있는 matching 값의 해석이 헷갈립니다. matching은 swipe 시점에서 자신이 상대와 매칭되었는지 알 수 있는 값이라고 생각되는데, 그러면 동기 처리가 필요한 것 아닌가 생각이 듭니다. 즉 Cassandra에서 inverse swipe이 존재하는지를 확인한 뒤에야 API 응답을 보낼 수 있는 것 아닌가요?

  2. Cassandra의 필요성


    RDB 조회만으로 inverse swipe 여부를 파악할 수 있을 것 같습니다. 그러면 Cassandra는 캐싱 용도로 사용한 것이라고 보아야 하나요? 원래 설계에서 Cassandra가 자연스럽게 도입된 이유가 궁금합니다.

  3. Cassandra - RDB 동기화 여부


    swipe 기록을 RDB와 Cassandra에도 모두 저장할 때, 일시적 오류 등으로 한쪽에만 저장될 수도 있을 것 같은데, 이런 상황에 대비해 RDB와 Cassandra 간 동기화가 필요한지 궁금합니다.

감사합니다.

소프트웨어-설계 시스템-디자인

回答 2

1

americasnail

안녕하세요. 한재현님,

먼저 수강해주셔서 감사드리며 좋은 질문을 해주셔서 기쁘네요

  • Matching Service의 MQ와 /swipematching 응답값

     

    강의에서는 REST API는 지연이 발생할 수 있으므로 MQ를 사용했다고 말씀하셨습니다. 이때 API 명세에 있는 matching 값의 해석이 헷갈립니다. matching은 swipe 시점에서 자신이 상대와 매칭되었는지 알 수 있는 값이라고 생각되는데, 그러면 동기 처리가 필요한 것 아닌가 생각이 듭니다. 즉 Cassandra에서 inverse swipe이 존재하는지를 확인한 뒤에야 API 응답을 보낼 수 있는 것 아닌가요?

강의에서는 /swipe는 빠르게 “접수”만 응답하고, 매칭 확정은 MQ 기반 비동기로 처리하는 것을 목표로 하였습니다. 좀 더 세부적으로 말씀 드리면, /swipe는 20–40ms 내에 “요청을 접수했다(accepted)”고만 돌려주고, 실제 매칭 확정은 MQ(Kafka/SQS)로 흘려 Matching Service가 비동기 처리합니다. 하지만 왜 굳이 비동기를 하였느냐인데, inverse swipe 를 동기로 처리하게 되면 Region 간의 지연 또는 hot partition 이 인기있는 사용자에게 발생할 수 있는 부분 그리고 스와이프는 초당 수십만건의 데이터 쓰기가 발생하는 점을 고려해서 병목, 즉 수십만 건의 쓰기의 부하에 취약할 수 있습니다. 이러한 운영에 안정된 파이프라인을 구성하였습니다.

따라서, /swipe 응답은 20–40ms 내에 accepted만 보장하고, 실제 매칭 여부는 Kafka/SQS로 전달된 이벤트를 Matching Service가 처리해 WebSocket/푸시로 최종 통지합니다.

  • Cassandra의 필요성


    RDB 조회만으로 inverse swipe 여부를 파악할 수 있을 것 같습니다. 그러면 Cassandra는 캐싱 용도로 사용한 것이라고 보아야 하나요? 원래 설계에서 Cassandra가 자연스럽게 도입된 이유가 궁금합니다.

Cassandra 의 경우는 inverse swipe 여부를 사실상 나에게 온 좋아요 리스트 즉, 인접리스트의 구간을 매주 자주 데이터를 읽어야 합니다. 그렇기 때문에 Cassandra 는 부하가 일어나는 swipe 를 싸게 받아서 파티션 키 = 사용자를 기준으로 최근 범위의 데이터 읽기를 빠르게 제공합니다. 물론 RDB 로도 불가능하지 않지만, 대규모에서 샤딩과 인덱스 또는 Race condition 과 같은 비용이 커져 총 비용과 지연이 급증할 수 있습니다. 결국 데이터 접근은 단일 파티션의 최근 범위가 되기 때문에 Cassandra 에 좀 더 적합하다고 할 수 있습니다. 좋은 질문을 해주셨습니다.

  • Cassandra - RDB 동기화 여부


    swipe 기록을 RDB와 Cassandra에도 모두 저장할 때, 일시적 오류 등으로 한쪽에만 저장될 수도 있을 것 같은데, 이런 상황에 대비해 RDB와 Cassandra 간 동기화가 필요한지 궁금합니다.

한쪽만 저장되는 것처럼 보이는 상황은 대부분 Consumer 의 지연 또는 일시적인 실패이기 때문에 재시도로 복구 될 수 있습니다. 별도의 양방향 동기화 트랜잭션은 권장되지 않습니다. 오히려 장애가 일어나는 범위가 늘어나는 것이라 권장되지 않습니다. 훌륭한 질문을 해주셨습니다.

감사합니다.

좋은 하루되세요!

1

jaehyeonhan

답변 감사합니다! 이해한 내용 적어두겠습니다. 혹시 알림이 가거나 시간 되시면 잘못 이해한 부분이 없나 확인 부탁드리겠습니다 🙏

  1. Matching Service의 MQ 사용 이유: 매칭 여부를 바로 처리할 필요가 없고, 쓰기 부하로 인해 응답시간이 길어질 수 있다.

  2. Cassandra의 필요성: Cassandra는 파티셔닝과 샤딩을 지원하고, 범위 읽기가 빠르다. inverse swipe의 데이터 접근은 파티셔닝된 데이터의 범위 읽기이므로 Cassandra를 활용했을 때 성능 이점을 얻을 수 있다.

  3. Cassandra - RDB 동기화 필요성: 두 노드 간 별도 동기화보다는 MQ의 consumer인 Matching Service가 원자적으로 처리하는 게 좋다.

     

감사합니다.

 

1

americasnail

네 맞습니다 🙂

감사합니다. 좋은 하루 되세요!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 한재현님께서 Tinder 설계 강의 관련하여 질문해 주신 Matching Service의 MQ 필요성과 Cassandra 사용에 대해 답변드리겠습니다.

1. Matching Service의 MQ와 /swipematching 응답값

  • MQ 사용 이유: 실제로 Tinder와 같은 서비스에서 MQ(메시지 큐)를 사용하는 이유는 비동기 처리의 효율성을 확보하기 위해서입니다. 메시지 큐는 사용자의 요청을 받아서 비동기적으로 처리할 수 있게 해줘 시스템의 부하를 줄입니다.
  • matching 값의 처리: 동기적인 처리로 인한 지연을 피하기 위해, 사용자 경험 향상을 위해서는 최초의 swipe에 대해 긍정적 응답을 주고 나중에 매칭 결과를 확인하는 비동기 프로세스가 선호될 수 있습니다. 만약 즉시 매칭 여부를 알려주어야 한다면, 말씀하신대로 RDB에서의 조회와 비교를 통한 동기적 처리가 구현되어야 합니다.

2. Cassandra의 필요성

  • Cassandra 사용 이유: Cassandra와 같은 NoSQL 데이터베이스는 대규모 데이터 저장 및 빠른 쓰기/읽기에 강점이 있습니다. Tinder의 경우, 수많은 사용자와 그들 간의 많은 상호작용을 효율적으로 처리하기 위해서 Cassandra를 캐시뿐 아니라 주요 저장소로 활용할 수 있습니다. 이는 트래픽이 많고 데이터 일관성보다는 가용성이 중요한 경우에 적합합니다.

3. Cassandra - RDB 동기화 여부

  • 동기화 필요성: Cassandra와 RDB 간의 데이터 동기화 문제는 양쪽에 다 저장이 되어야 일관성이 보장됩니다. 그러나 애플리케이션 설계에 따라 일시적 불일치를 허용할 수 있습니다. 두 데이터 저장소가 모두 중요하고 일관성이 필요하다면, 일종의 데이터 복제 또는 동기화 메커니즘을 구축하여 데이터 유실을 방지합니다.

추가적으로 아래 링크를 통해 유사한 질문에 대한 답변을 참고하실 수 있습니다:
- “NoSQL 데이터베이스 사용 이유”
- “Tinder와 같은 매칭 서비스의 메시지 큐 사용 사례”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

특별 학습 자료 프로모션 1년 멤버십 제공 관련 문의 드립니다.

0

56

2

simcached를 검색을 했을때 해당 자료가 나오지 않는데 혹시 MemcachedGPU 라고 불리는 기술을 말씀하시는건가요?

0

56

1

유튜브 예제에서 흐름 관련 질문있습니다

0

47

2

Spotify 서비스 설계에서 transcoder service에 대해 문의 드립니다.

0

73

1

특별 학습 자료 프로모션 1년 멤버십 무료 제공 지원 확인 방법

0

83

2

[위치 이름 기반으로 호텔을 조회하는 메서드] 코드 질문 드립니다.

0

49

2

14강. 영화 DVD 대여 시스템 데이터베이스 스키마 설계에서 Inventory 테이블 질문있습니다.

0

83

2

Imgur 이미지 호스팅 서비스 질문

0

83

2

쿠폰 문의

0

83

1

Redis 랜덤 값 추가 시 메타데이터 저장

0

86

1

Blob Storage에서 파일 업로드에 대한 동시성을 어떻게 제어할 수 있을까요?

0

106

2

채팅을 영속할 DB로 RDB를 선택한 이유도 궁금합니다

0

269

2

URL 단축 서비스에서 redis counter를 사용하는 이유가 무엇인지 궁금합니다.

0

213

2

long url을 파티션키로 지정했을때 장점이 생각 안나네요 ㅎㅎ;;

0

135

2

실제 인터뷰에서도 Object Oriented Design 을 이런 과정으로 하는걸까요?

0

161

1

able to get all students who got a "d+" grade or lower 요구사항

0

115

1

number of copies 컬럼은 Inventory Table에 들어가야하지않을까요?

0

171

3

Spotify 서비스 시스템 디자인 및 스케일링에서 백업 클러스터 사용에 대한 문의

0

93

2

URL 단축 서비스 시스템 디자인 및 스케일링 질문있습니다.

0

187

2

예시 두개가 납득이 잘 가지않네요 ㅠㅠ

1

201

2

강의자료는 제공 불가능할까요?

0

218

1

General Service 서비스 컴포넌트 관련 질문있습니다!

1

182

2

영화 DVD 대여 시스템 데이터베이스 스키마 설계에 대한 질문입니다.

1

249

2

메세지 큐 예제 2번 질문있습니다!!

0

308

2