inflearn logo
강의

講義

知識共有

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

URL短縮サービスシステムデザイン FR/NFR [アップデート]

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

解決済みの質問

187

bug

投稿した質問数 1

0

안녕하세요!

강의 마지막 부분의 scaling - partitioning 관련해서 이해가 안가는 부분이 있어서 질문 드립니다.

 

partitioning key를 userId로 했을 때, 장단점에서

  1. 장점의 '트래픽을 줄일 수 있다'에서 어떤 트래픽을 의미하는지 잘 모르겠습니다.

 

  1. 단점에서도 모든 방문객을 scan해야 한다고 말씀해주셨는데 이 부분도 더 자세한 설명을 해주실 수 있을까요?

 

  1. partition key를 userId로 할 때는 url을 생성하고 관리하는 User의 성능을 높일 때 사용하는걸까요?

 

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

回答 2

1

americasnail

안녕하세요. 답변이 늦어 죄송합니다.

좋은 질문을 해주셔서 감사합니다.

  1. 먼저 트래픽을 줄일 수 있다는 것은 userId 를 partition key 로 사용하면, 데이터 베이스의 쓰기 및 읽기 트래픽이 사용자별로 분산될 수 있습니다. 예를 들어서, 사용자가 URL 을 생성할 때, 데이터 베이스는 해당 사용자의 userId 가 속한 파티션에서만 데이터를 저장합니다. 동일한 사용자가 생성한 URL 을 관리하거나 조회할 때 해당 사용자의 파티션만 조회하면 되기 때문에 다른 파티션에 영향을 주지 않을 수 있습니다. 그래서 결론적으로는 사용자 단위로 데이터와 트래픽이 분산되고, 특정 사용자에 대한 트래픽이 다른 사용자에게 영향을 주지 않아서 전체 시스템의 부하가 줄어드는 효율성이 있습니다. 

 

  1. 모든 방문객을 scan 해야 한다는 의미는 URL 단축 서비스의 방문자는 userId를 모른다는 점 입니다.  URL 단축 서비스를 사용할 때, 대부분의 방문자는 단축 URL 만 알고 있고, 해당 URL 이 어느 사용자의 userId 에 속해 있는지 알 수 없습니다. 그래서 단축 URL 조회 요청이 생기면, 데이터베이스는 모든 파티션을 검색하여 해당 URL 의 데이터를 찾아야 합니다. 이 과정을 all partition scan 으로 정의하였습니다. 예를 들면, short.ly/inflearn 을 조회 요청했을 때 이 URL 이 어느 사용자 userId 의 파티션에 저장되어 있는지 알 수 없기 때문에 모든 파티션을 검색해야 하고 이 과정은 비효율적입니다. 결론적으로 파티션이 많아질수록 조회 작업의 성능은 점점 더 저하됩니다. 또한 이 과정이 더 큰 병목현상을 일으킬 수 있다는 점을 고려하여야 합니다.

 

  1. Partition key 를 userId 로 사용하는 목적입니다. 특정 사용자가 URL 을 생성하거나 자신의 URL 을 확인 , 삭제하는 작업은 해당 사용자의 파티션에서만 이루어지기 때문에 효율적 입니다. 이렇게 되면, 한 사용자와 관련된 작업은 다른 사용자와 무관하게 수행되어서 성능이 향상됩니다. 하지만 방문자를 고려하지 않은 설계는 단축 URL 서비스 빠른 리다이렉션 기능에 악영향을 미칠 수 있습니다. 결론적으로 이를 해결하기 위해 캐싱을 도입하거나 userId 와 URL 의 해시값을 조합한 키를 사용하여 데이터베이스 파티션을 설계 합니다. 

 

결론적으로, URL 을 생성하고 관리하는 사용자의 성능을 높이기 위한 설계 방식이며, 방문자를 고려한 추가적인 보완책이 필요하다는 점을 고려해야 합니다. 

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 질문있습니다님께서 URL 단축 서비스의 시스템 디자인 및 스케일링 질문에 대해 주신 내용에 대해 설명드리겠습니다.

파티셔닝 키로 userId를 사용하는 경우

  1. 장점: 트래픽을 줄일 수 있다

    • 파티셔닝 키로 userId를 사용하게 되면, 특정 사용자가 생성한 URL 정보가 동일한 파티션에 저장되므로 데이터 조회 시 해당 파티션만 접근하게 됩니다.
    • 이는 다른 파티션에 접근할 필요가 없게 되어 네트워크 비용과 데이터베이스 조회 성능 면에서 트래픽을 줄일 수 있습니다. 즉, 여러 파티션을 모두 조회하는 대신, 특정 파티션만 조회하므로 트래픽이 감소합니다.
  2. 단점: 모든 방문객을 스캔해야 한다

    • URL 단축 서비스는 보통 URL이 어떤 사용자에 의해 생성되었는지를 모르는 경우가 많습니다. 특정 URL로 방문하는 사람이 어떤 userId로 생성된 URL에 방문하는지 알 수 없는 상황에서, 그 URL에 대한 정보를 찾기 위해 모든 userId의 데이터를 조회해야 할 수 있습니다.
    • 이는 특정 URL에 접근한 모든 방문객을 스캔해야 한다는 의미로, 특정 partition에 절대적으로 데이터를 구성할 때 효율적이지 않을 수 있습니다.

추가 리소스

비슷한 주제의 질의를 통해 더 많은 정보를 얻을 수 있는 리소스를 추천드립니다.

  • “시스템 파티셔닝 설계 방법론” 마크다운 형식으로 게시물을 첨부하여 시스템 파티셔닝의 장단점과 서비스에 맞는 적절한 키 설계에 대한 이해를 도울 수 있는 추가적인 설명을 제공합니다.

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

특별 학습 자료 프로모션 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

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

0

88

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

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

1

201

2

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

0

218

1

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

1

182

2

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

1

249

2

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

0

308

2