SSAFY-Seoul-20-Study / book-system-design-interview

1 stars 1 forks source link

[6주차]_11장~12장_뉴스 피드 시스템 설계_채팅 시스템 설계_최세은 #36

Open ChoiSeEun opened 6 months ago

ChoiSeEun commented 6 months ago

11장. 뉴스 피드 시스템 설계

  1. p.185-186 사용자가 스토리를 포스팅하면 동시에 캐시와 데이터베이스에 저장하는 이유가 무엇인가요? 캐시에만 저장해두고 데이터베이스에는 주기적으로 저장하는 방법을 사용해도 되지 않나요?
  2. p.187 사용자가 피드를 새로고침하게 되면 매번 캐시를 확인해서, 새로운 피드인지 확인하는 과정을 거치게 되나요?
  3. 인스타그램처럼 친구 피드를 다 보면, 무작위로 다른 피드를 보여주는 서비스를 구현하는 경우 무작위 피드들도 다 캐시에서 관리를 하게 되나요?
  4. p.188 사용자가 올릴 수 있는 포스팅 수에 제한을 둔다고 해서 유해한 콘텐츠를 걸러낼 수 있는게 아닐 것 같다는 생각이 드는데, 왜 이런 방식을 사용하는 것인지 다른 방안은 없는지 궁금합니다.
  5. p.189 그래프 데이터베이스에 친구 관계를 저장하는 방식에 대해 부가 설명을 듣고 싶습니다. 자신이 팔로우 하는 사람들과 자신을 팔로잉 하는 사람들을 어떤 방식으로 접근하게 되나요?
  6. p.193 뉴스 피드 캐시에서 포스트 ID를 받아와야 포스트 내의 이미지를 접근할 수 있는거 아닌가요? 그림에서는 CDN에 독립적으로 접근하는 것처럼 보이는데 이에 대한 설명이 듣고 싶습니다.
  7. p.194 행동 계층과 횟수 계층이 별도로 있는데, 1) 사용자가 좋아요를 누른 행동 기록 2) 좋아요 횟수 카운팅 이 트랜젝션으로 관리가 되는건가요?

12장. 채팅 시스템 설계

  1. p.202 폴링 방식에서 송신 클라이언트와 수신 클라이언트가 다른 서버에 접속한다면 새로운 메시지가 있더라도 받을 수 없는건가요?
  2. p.209 관계형 데이터베이스가 롱 테일 부분을 잘 처리하지 못하는 이유가 궁금합니다.
  3. p.214 소규모 그룹이면 메시지를 복사하는 방식으로 처리 된다고 나와있는데, 대규모 그룹은 어떤 방식으로 처리되나요?
KimJyun commented 6 months ago

11장

  1. 데이터의 저장을 목적으로는 데이터베이스에 저장하고, 캐시조회를 빠르게 하기 위해서 사용하는 용도로 알고 있습니다. 근데, 질문에서 말한대로 캐시에 저장해두고, 이것을 주기적으로 데이터베이스가 읽어서 저장하는 방식으로 한다면, 캐시가 날라갈 수 있는 위험요소도 있다고 생각됩니다. 데이터베이스가 날라갈 수 있는 위험요소로 인해, 백업이나 다중화를 해두는 거라 캐시에 저장을 하는 것은 위험하다고 생각합니다.

  2. 넵! 캐시를 확인해서 새로운 포스팅이 있다면 가져옵니다.

  3. 친구의 피드를 모두 다 확인해서, 내가 팔로우하지 않은 다른 피드가 보여진다는 의미일까요? 이 말이 맞다면, 팔로우하지 않은 사람의 피드를 보여줄 때는 알고리즘(사용자의 관심사, 인기 게시물, 친구들의 상호작용 등 고려) 을 사용하고, 이 피드들은 인스타그램 서버에서 관리되고, 캐시와 같은 방식으로 효율적으로 제공한다고 합니다.

    • 인기 있는 피드나 탐색 섹션의 피드를 일정 기간 동안 캐시에 저장해둔다.
  4. 포스팅 수를 제한하는 것만으로 완벽히 유해한 콘텐츠 감지를 보장할 수는 없지만, 일정 기간 동안 많은 양의 콘텐츠를 올리려는 시도는 일종의 신호가 될 수 있어서, 이러한 행동 패턴을 감지하여 추가적인 검토나 조치를 취할 수 있습니다. 추가 다른 방안으로는 AI를 활용해서 자동으로 콘텐츠를 분석하는 방법사용자 신고 시스템으로 일정량 이상의 신고를 받게되면 차단하는 방법도 있습니다.

  5. 그래프 데이터베이스에서 보통 사용자를 vertex로, 관계를 edge로 표현을 합니다. 추가로, edge에 속성(proerty) 을 추가하면 더 의미있는 정보를 표현할 수 있다고 합니다. 팔로우, 팔로잉의 관계를 화살표로 표시해서, 접근하기 위해서는 DFSBFS를 사용합니다. 기존의 그래프DB는 전체 데이터를 대상으로 하는 DFS에 최적화되어 있고, 부분 데이터를 대상으로 하는 BFS에는 상대적으로 취약하다고 합니다. [속성이 추가된 소셜 그래프 ] image 참고자료 : Kakao Tech/대용량 분산그래프DB "S2Graph" 참고자료2 : Wadiz의 친구 서비스 - Neo4j

  6. CDN에서는 이미지나 비디오와 같은 미디어 콘텐츠를 가져옵니다.

  7. 넵! 행동 계층에서 '좋아요'와 횟수 계층에서 '좋아요 횟수'를 관리하는 경우, 이러한 행동이나 횟수의 변경은 트랜잭션으로 관리될 수 있습니다. 예를 들어, 사용자가 특정 콘텐츠에 '좋아요'를 추가하면, 해당 행동 계층과 횟수 계층의 정보가 업데이트가 되어야 할 것이고, 이것을 원자적으로 처리하기 위해 트랜잭션을 사용할 수 있습니다.