본문 바로가기

server/system design

(12)
쿠폰발급 서비스 구축하기 (실험용) 문제!! 쿠폰 발급 시스템을 만들어 볼 예정입니다. 쿠폰은 100개이며 선착순으로 발급됩니다. 대용량의 요청을 견디기 위해선 어떤 점을 고려해서 해야 하는가? 1. 10000개의 요청을 견디는 서비스 구조를 만들자!! 우선 하나의 ec2를 올려서 LB에 물려서 통신을 확인하자!! (Hello, world!) LB 로그에서 통신 10개 성공 확인 성공 확인 (200) 이번엔 10000개를 테스트해보자!! 에러율 83%!!!! 하나의 서버로는 일반 요청(DB 요청 커넥션 없음)부터 에러가 발생한다. gunicorn 로그를 봤더니 별다른 에러가 없다. 그냥 통신 자체가 서버까지 도달하지 못했다. 그러면 ec2를 LB(로드 밸런스)에 더 추가해보자. (target group에 추가하는 게 건강상 좋습니다.) e..
9. netflix 1. 기능 요구 사항 원활하게 함께 작동하여 끝없이 고객에게 만족스러운 비디오를 제공해야 합니다. 모든 디바이스에서 동영상 재생 세계 여러 나라에서 같은 동영상 재생 다양한 사용자에게 개인화된 비디오를 추천 2. 추정 및 제약 사항 애플리케이션에 등록된 활성 사용자 수 = 1억 1분마다 업로드되는 비디오 콘텐츠의 평균 크기 = 2500MB 지원해야 하는 해상도 및 코덱 형식의 총 조합 = 10 사용자가 매일 시청하는 평균 동영상 수 = 3 초당 시청한 동영상 수 = (활성 사용자 * 매일 시청한 평균 동영상)/86400 = (100M * 3/86400) = 3472 매일 저장되는 콘텐츠의 크기 = 분당 업로드되는 비디오의 평균 크기 * 해상도와 코덱의 조합 * 24* 60 = (2500MB * 10 * ..
8. 메신져 (slack // facebook messenger // whatapp // kakaotalk) 1. 기능 요구 사항 사용자 간의 일대일 채팅 및 그룹 채팅. 사용자가 텍스트, 사진, 비디오 및 기타 파일 전송 채팅 기록 사용자의 온라인/오프라인 상태 표시 알림 2. 추정 및 제약 사항 매일 약 100억 개의 메시지가 전송되는 20억 명의 사용자를 처리 최소 대기 시간으로 실시간 채팅. 메시징 서비스는 고가용성이어야 하지만 이 경우 일관성이 우선순위가 높다. 시스템은 매우 일관성이 있어야 한다. 즉, 모든 사용자는 로그인하는 모든 장치를 통해 동일한 순서로 메시지를 볼 수 있어야 한다. 예상 용량 메시지 저장용량 추정 각 메시지에 대해 평균 크기가 140바이트이고 매일 전송되는 약 100억 개의 메시지를 추정하면 일일 메시지에 대해 약 1.4TB의 저장 용량이 필요 100억 메시지 * 140바이트 ..
확률적 자료구조 결론!! 1. 이 값이 데이터에 없는지 알고 싶어!! == Bloom filter 2. 그룹별로 카운팅을 하고 싶어!! == count min sketch 3. 엄청 큰 데이터의 카운팅을 하고 싶어 == hyper log log 해당 영상을 정리 및 풀어서 쓴 글입니다. 영상만 봐도 이해하시기 좋습니다!! 해시 == 고유한 key를 만들고 저장하고 싶은 것!! == 검색을 n(1)로 끝내고 싶어!! 하지만 저장하는 공간을 최소화하면 충돌문제가 일어나고, 해시 함수의 연산(보통은 충돌을 없애기 위해 모듈러 함수에서 key값을 엄청나게 큰 소수로 정한다)에도 많은 시간이 들어간다. 충돌이다!! John smith 와 sandra dee가 같은 곳을 바라보고 있다 충돌은 곧 디스크접근을 했다는 것이고, 그건 ..
7. UBER // 쏘카 // lyft // 카카오택시 지리적으로 A TO B까지의 운반해야 하는 모든 서비스에 적용 가능하다. ( 배민 / 요기요 등) 여기에서는 우버를 예로 들었다. 1. 기능 요구 사항 승차 공유 시스템 택시 호출 예약 요청이 들어오면 가까운 차들에게 순서대로 승차 요청이 가며 그중 한 명이 요청을 받을 수 있다 예상 도착 시간을 알 수 있어야 한다 택시 트래킹 (사용 가능한 드라이버를 볼 수 있어야 한다) 예상 가격을 알 수 있어야 한다. 번외 기능 원하는 운전자를 선택할 수 있어야 한다 운전자마다 가격(팁)이 다를수 있다 탑승 날짜와 시간을 예약할수 있어야 한다. 2. 용량 추정 및 제약 3억 명의 고객과 100만 명의 일일 활성 고객, 500,000명의 일일 활성 운전자가 있다고 가정합니다. 하루 100만 라이드를 가정합니다. 모든..
6. tinder tinder 틴더? 위치 기반 소셜 검색 애플리케이션 상대의 사진과 400자 미만의 간단한 소개를 읽고 마음에 들면 오른쪽으로 스와이프해 좋아요(Like)를, 그렇지 않으면 왼쪽으로 스와이프해 거절(nope)을 하는 직관적인 방식, 위로 올리면 Super Like. 양쪽 모두가 좋아요를 보내면 매치가 성사되며, 매칭 된 뒤에는 채팅이 가능 자신이 좋아요를 받은 숫자가 표시되고, 유료 결제를 하면 자신에게 좋아요를 보낸 대상을 볼 수 있다 소개 영상 1. 기능 요구 사항 유저는 자신의 정보를 추가하고 사진을 업로드하여 Tinder 프로필을 만들 수 있어야 한다. 유저는 지리적으로 가까운 지역에있는 다른 사용자의 추천을 볼 수 있어야 한다 유저는 다른 추천 사용자를 좋아 (오른쪽으로 스 와이프)하거나 싫어 ..
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 메모리 사용량..
4. instagram // Flickr // Picasa 1. instagram 이란? 사용자가 자신의 사진과 동영상을 업로드하고 다른 사용자와 공유할 수 있는 소셜 네트워크 2. 시스템 요구 사항 사용자는 사진을 업로드 / 다운로드 / 볼 수 있어야 한다 사용자는 사진 / 비디오 제목을 기반으로 검색을 수행 할 수 있다 사용자는 다른 사용자를 팔로우 할 수 있다 시스템은 사용자가 팔로우하는 모든 사람들의 인기 사진으로 구성된 사용자의 뉴스 피드를 생성하고 표시해야 한다 3. 디자인 고려사항 사용자는 원하는 만큼 사진을 업로드 할 수 있다. 따라서 스토리지의 효율적인 관리가 중요하다 데이터는 100 % 신뢰할 수 있어야 한다. 사용자가 사진을 업로드하면 시스템은 사진이 손실되지 않도록 보장해야 한다 4. 용량 추정 총 사용자가 5억 명이고 일일 활성 사용자가 ..