본문 바로가기

전체 글

(1150)
5. dropbox // google drive 1. 기능 요구 사항 File Upload, Update, Delete and Download File search File and folder sync File history (versioning) 예외상황들 File size limit 파일 권한 (수정 삭제) 동일 파일 수정에 따른 에러 핸들러 2. 추정 및 제약 사항 총 사용자 : ~ 10억 일일 활성 사용자 ~ 5천만 QPS : 하루 최대 5억 건 요청 (초당 6000건) 저장 용량 추정평균 파일 크기는 1MB이라 할 때 1MB * 100개 * 10억 = 10000PB 모든 사용자가 평균 100개의 파일을 가지고 있다고 가정 읽기 / 쓰기 비율 : 1 : 1 예상 트래픽 : 초당 6G 파일 쓰기 초당 6000건 * 1MB = 6GB 메모리 사용량..
cython : python to C Cython 은 CPython 확장 모듈을 생성하고 이를 이용하여 외부 함수 인터페이스와 실행 속도 향상과 외부 라이브러리의 연동을 보다 향상 시킬 수 있도록 고안된 컴파일 언어이다 Cython 은 pyx 확장명을 사용하고, 컴파일 과정을 통하여 파이썬에서 import 형태로 사용될 수 있다. 컴파일은 다음 setup.py 를 이용하여 컴파일할 수 있다 1. cython 설치!! $ pip install cython 2. 변환할 파이썬 코드를 pyx 확장자로 생성 1 2 3 4 # test_cython.pyx def ret_list(n): return [i for i in range(n)] cs 3. setup.py 파일 생성 1 2 3 4 5 # setup.py # -*- coding: utf-8 -*..
ERROR: Cannot install -r /requirements.txt because these package versions have conflicting dependencies. pip로 패키지 설치시 같은 패키지에서 서로 다른 버전을 "==" 로 명시 했을때 pip 매니져는 무엇을 설치 할지 몰라서 conflict 에러를 뱉고 멈추게 된다. 고치는 방법으로 1. 특정 버전을 명시하지 말고 러프하게 하거나 (">="나 아예 버전을 명시하지 않는다. ) 2. 디팬던시된 패키지를 한쪽에서 삭제하라고 권고 한다. 만일 위의 방법을 할수 없는 상황이였다. 나의 경우 설치를 해야 하는 서로 다른 두개의 사내 패키지가 이미 버전이 고정되어 있어서 수정이 불가능한 상태. 이럴때는 같은 패키지를 재설치하려 할때 무조건 상위 버전으로 설치하라고 명시해주면된다. --upgrade --no-deps --force-reinstall pip install --upgrade --no-deps --forc..
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를..