본문 바로가기

전체 글

(1083)
4. instagram // Flickr // Picasa 1. instagram 이란? 사용자가 자신의 사진과 동영상을 업로드하고 다른 사용자와 공유할 수 있는 소셜 네트워크 2. 시스템 요구 사항 사용자는 사진을 업로드 / 다운로드 / 볼 수 있어야 한다 사용자는 사진 / 비디오 제목을 기반으로 검색을 수행 할 수 있다 사용자는 다른 사용자를 팔로우 할 수 있다 시스템은 사용자가 팔로우하는 모든 사람들의 인기 사진으로 구성된 사용자의 뉴스 피드를 생성하고 표시해야 한다 3. 디자인 고려사항 사용자는 원하는 만큼 사진을 업로드 할 수 있다. 따라서 스토리지의 효율적인 관리가 중요하다 데이터는 100 % 신뢰할 수 있어야 한다. 사용자가 사진을 업로드하면 시스템은 사진이 손실되지 않도록 보장해야 한다 4. 용량 추정 총 사용자가 5억 명이고 일일 활성 사용자가 ..
3. twitter 1. 기능 요구 사항 글 쓰기 타임라인 확인 트렌드 및 해시태그 리스트 검색 2. 추정 및 제약 사항 쓰기에 비해 읽기가 많다 최종 일관성을 유지해야 한다. 사용자가 팔로워의 트윗을 약간 늦추어도 괜찮다 트윗은 140 자로 제한 3. 데이터베이스 설계 Redis && DB 기능 요구 사항에 따른 필요 테이블들 user tweet follwer DB 테이블 관계도 필요 쿼리들 get follwers get latest tweets Twitter 서비스의 기본 아키텍처는 User , Tweet , Followers로 구성된다. 사용자 정보는 사용자 테이블에 저장된다 사용자가 트윗하면 사용자 ID와 함께 tweet 테이블에 저장된다 사용자 테이블은 tweet 테이블과 일대 다 관계를 갖는다. 사용자가 다른 사..
2. pastebin ( text storage site ) 페이스트빈? 텍스트 쉐어링 웹사이트 사용자가 플레인 텍스트를 저장할 수 있는 웹 애플리케이션을 의미한다. 깃허브는 버전 관리 기능을 가진 페이스트빈 서비스를 제공한다. 한마디로 텍스트 공유 플랫폼 예제 사이트 : https://pastebin.com/ 1. 기능 요구 사항 사용자는 텍스트를 입력하거나 텍스트 파일을 업로드하고 고유한 short URL을 얻을 수 있다. 만료 시간이 제공되면 URL은 일정 기간이 지나면 만료된다. short URL이 주어지면 사용자는 원본 콘텐츠에 액세스 할 수 있어야 한다. 서비스는 REST API로 통신할 수 있어야 한다. 텍스트 최대 사이즈는 1MB로 제한한다. 읽기 요청이 쓰기 요청보다 100배 더 많다!! (읽기:쓰기 == 100:1) 2. 추정 및 제약사항 한달에..
캐시 컴퓨터에서 캐시는 일시적인 데이터 집합으로 데이터 요청 시 해당 데이터의 스토리지에 액세스 하여 가능한 한 빨리 처리 위해 사용된다. 캐시를 사용하면 이전의 검색이나 데이터를 효율적으로 재사용할 수 있다 캐시는 운영 체제, CDN (Content Delivery Networks) 및 DNS를 포함한 네트워킹 계층, 웹 애플리케이션 및 데이터베이스를 포함한 다양한 기술 계층 전반에 걸쳐 적용 및 활용할 수 있다. 캐싱을 사용하여 웹서비스, 게임, 미디어 공유 및 소셜 네트워킹과 같은 읽기가 많은 애플리케이션 워크로드에 대해 지연 시간을 크게 줄이고 IOPS를 개선 할 수 있다. 애플리케이션 서버 캐시 서버 요청 계층에 직접 캐시를 배치하면 응답 데이터의 로컬 저장이 가능하다. 서비스에 대한 요청이 있을 때..
Consistent Hashing (일관된 해싱) 일관된 해싱은 여러 스토리지 서버 간에 데이터를 분할하여 스토리지 시스템의 확장성을 구현하기 위해 수행된다. 많은 서버 (데이터베이스 서버+ 파티션)에 많은 데이터가 분산되어 있고 사용 가능한 서버 수가 지속적으로 변경되는 경우 (서버 추가 또는 서버 제거) 일관된 해싱을 사용한다. 단순 해싱을 쓸 수 없는 이유 간단한 해싱은 데이터와 지정된 키를 모듈러 함수를 통해 지정된 범위의 숫자로 생성한다. 모듈러 함수로 md5 사용한다면 0~2^128−1 범위에서 임의의 값을 얻을 수 있다. 이제 우리의 해시 함수는 server_number = hash(key)%n 로 계산된다. 이것은 [0- (n-1)] 범위로 제공하며 n은 서버의 수가 된다. 이렇게 하면 서버수에 따라 데이터가 완벽하게 나뉜다. value를..
1. TinyURL // bitly (URL shortening service) 1. 기능 요구 사항 사용자가 입력한 url(원본 도메인)을 특정 도메인을 포함한 형태로 단축 URL로 반환한다. 반환된 단축 url 클릭시 원본 URL로 리다이렉트 된다. 단축 URL은 일정시간이 지나면 만료되어 삭제된다. 만료 시간은 지정할 수 있어야 한다. ex) 예시로 tinyurl.com에서 실행한 결과 기존 url https://www.youtube.com/watch?app=desktop&v=xFPJmk5NQao&ab_channel=siterubix 단축 url https://tinyurl.com/4fyzbta6 2. 추정 및 제약 사항 2-1 트래픽 해당 시스템은 read가 압도적으로 많을 것이다. 읽기와 쓰기 사이의 비율이 100:1로 가정한다. 예상 트래픽 매월 5억 개의 새로운 단축 U..
how to system desgin? system desgin 질문에서의 파악해야할 4가지 1. 사용자 : 시스템을 누가 어떻게 사용하는가? 2. 스케일 : 시스템 증가에 따른 데이터 처리 방법 3. 성능 : 시스템이 얼마나 빨라야 하는가? 4. 비용 : 어떤 구조가 더 빠르고 효율적인가? System desgin 시 생각해야할 사항들 요구 사항에 맞는 제약사항 도출 사용자 수 트래픽, 1년, 5년 파일 저장 용량 - 1년 5년 디비 저장 용량 - 1년 5년 웹 서버 메모리 + 캐시 메모리 사용 API 도출 및 설계 API에 따른 디비 설계 서비스에 필요한 기본 알고리즘 도출 수정 및 최적화 DB 최적화 ( 용도, 사이즈에 맞는 DB 선택 및 파티셔닝 여부 ) 데이터의 성향에 맞는 디비 선택 테이블간의 조인이 많이 필요하면 RDB 확장과 테..
parquet 데이터를 쉽게 접근할 수 있도록 csv로 저장해서 사용한다. 하지만 csv는 메타데이터를 저장할 수 없어 칼럼 별로 dtype을 다시 지정해줘야 하는 일이 생기며, 읽고 쓸 때 시간이 많이 걸린다는 단점이 있다. 이를 보완하기 위해 pickel, parquet, hdf5 와 같은 다양한 데이터 포맷을 사용하는데 그중 parquet에 대해서 알아본다 what is parquet? Apache Parquet는 데이터 처리 프레임워크, 데이터 모델 또는 프로그래밍 언어에 관계없이 Hadoop 생태계의 모든 프로젝트에서 사용할 수 있는 칼럼형 스토리지 형식 Columnar parquet의 저장 방식은 컬럼 지향으로 저장한다. 칼럼 단위의 값은 데이터가 유사할 가능성이 높다. 이로 인해 높은 압축률을 얻을 수 있..