본문 바로가기

시스템 디자인

(13)
알림 시스템 설계 알림 시스템 설계 시 구체화 해야 하는 명세들1. 알림의 종류 : 모바일 앱 푸시 / SMS / 이메일 → 알림의 종류별로 각기 다른 제3자 알림서비스를 사용해야 한다.2. 알림별 처리량(Throughput) : 1일 알림 건수 등 → 리소스 용량을 계획하는데 사용된다.3. 알림 실패 시 대응 정책 : 알림 실패시 재시도를 위한 장치가 필요하다. 4. 보안 수준 : 알림 발행 단계에서 보안을 위해 인증을 추가해야 한다.  알림 시스템의 구성1. 알림 발행을 위한 API2. 보안을 위한 인증 서비스3. 알림 내용 생성하기 위한 데이터베이스 및 캐시4. 메시지 큐5. 메시지를 읽고 알림서비스를 호출하는 알림 서버6. 실패 시 재시도 및 중복 방지를 위한 알림 로그7. 제3자 알림 서비스  메시지 큐 설계1...
분산 환경 ID 생성기 설계 트위터 스노우플레이크 접근법다음과 같이 64비트짜리 ID를 여러가지 섹션으로 구분하는 방법이다. 1비트 : 사인(sign) 비트로, 음/양을 구분한다.41비트 : 타임스탬프로, ID가 생성된 시점의 밀리초를 저장한다.5비트 : 데이터 센터 ID, 2^5 = 32개의 데이터센터를 허용한다.5비트 : 서버 ID, 데이터센터 당 32개의 서버를 허용한다.12비트 : 일련번호, 생성할때마다 1씩 증가 하며, 밀리초가 경과할때마다 0으로 리셋된다. 트위터 스노우플레이크의 한계타임스탬프는 2^41-1 = 2,199,023,255,551밀리초 = 약 69년까지 사용할 수 있다. 69년이 넘어가면 overflow가 발생하므로 이땐 새로운 체계로 아이디를 이전해야 한다.   마스터의 갯수 ID를 고유하게 발급하는 서버를..
TAO, Facebook의 분산 Social Graph TAO란?Facebook이 social graph를 서비스 하기 위한 데이터 모델의 구현체로 지리적으로 분산된 데이터 스토어이다.   TAO의 목표기본적으로 1) 저지연성, 2) 고가용성, 3) 확장성, 4) 일관성을 지키고자 하지만, 조금 업데이트가 늦어도 문제 없다는 SNS의 특성에 따라 빠르게 읽기를 지원하는 대신 일관성 저하를 감수한다. 정리하면 다음과 같다.  저지연성(빠른 응답)↕  Trade-off, 저지연성을 위해 일관성 저하를 감수.일관성(데이터 업데이트가 빠르게 전역적으로 반영됨)고가용성(일부 장애가 발생해도 응답)확장성(스케일 아웃이 쉬워야 함) TAO의 차별점그래프 DB를 수평적으로 확장할 수 있도록 아키텍처를 설계했다는 점이 가장 특징적이다. 원래 그래프 DB는 노드간 탐색을 주로..
SNS 피드 시스템 설계하기 시스템 설계에 영향을 미치는 요인시스템을 설계할 때는 적어도 다음 3가지를 알아야 할 것이다. 늘 시스템이 무한한 부하와 무한한 확장성을 지녀야 하는 것은 아니다. 요구사항을 안전하게 만족시킬 정도면 충분하기 때문이다.1. 시스템이 어떤 기능을 제공하는지2. 사용자 규모가 얼마나 되는지3. 확장이 빠르게 이루어져야되는지  SNS 피드 시스템 명세 가정하기1. SNS 피드 시스템은 글을 올리고, 친구의 피드를 볼 수 있는 기능을 제공한다고 가정한다.2. DAU(Daily Active User)가 천만 명이라고 가정한다.3. 게시글에는 이미지나 비디오도 첨부할 수 있다.  SNS 피드 시스템 설계 초안1 - POST 기능우선 글 게시와 관련한 기능들을 리스트업 해보겠다.1) 텍스트를 작성하고 미디어를 첨부하..
캐시 적중률(Cache hit ratio)과 캐시 적중률 높이는 법 캐시적중률(CHR)이란캐시 적중률을 계산하는 공식은 다음과 같다. `캐시적중률 = 캐시 적중/(캐시 적중 + 캐시 미스)` 이때 캐시 적중은 필요한 데이터가 이미 캐시에 있는 상태이고, 캐시 미스는 없는 상태이다.    캐시적중률(CHR)이 얼마나 되어야 할까?CHR이 너무 낮으면 캐싱때문에 오히려 더 시간이 오래걸릴 수 있다. (예: 캐시를 사용하지 않아야 하는 경우) 캐싱을 하는 것이 안하는 것보다 나은 지점이 CHR의 Minimum이 될 것이다. CHR은 높으면 높을수록 좋지만, 다음 포스팅(How Do I Increase My Cache HIt Ratio)에 다르면 80% 이상이면 "Good CHR"이라고 평가한다. 다만 주로 정적콘텐츠만 서비스 하는 사이트의 경우에는 95~99%까지도 높을 수 ..
뉴스 사이트와 캐시 교체 알고리즘(Cache Eviction Algorithm) FIFO(First In First Out)뉴스 플랫폼에는 하루에도 수만건의 기사가 등록된다. 그러나 파레토의 법칙(80/20 rule)를 참고하여 상위 20% 기사에 80%의 트래픽이 집중된다고 가정할 수 있다. 아무리 실시간성이 중요한 기사라고 해도, 대개 몇 시간 정도의 시간차는 화제성이 있는 경우 문제되지 않는다. FIFO에 따르면 1시간 전에 발생한 전국적인 뉴스가 1초 전에 발생한 지역적인 뉴스에 밀려 캐시에서 삭제되게 된다. 따라서 뉴스 사이트의 캐시로는 적절하지 않다.  LFU(Least Frequently Used)LFU는 오래된 인기 기사가 캐시에 남을 가능성이 크다. 최신 기사가 아니더라도 사용 횟수가 높으면 캐시에 남기 때문이다. 따라서 뉴스 사이트에는 적합하지 않다.  LRU(Le..
시스템 디자인을 위한 "Back-of-the-envelope calculation" Back-of-the-envelope-calculation이란편지 봉투와 같이 아무 종이 뒷면에다 휘갈겨 쓰는 계산이라는 뜻으로, 정확하지는 않지만 대략적인 추정을 빠르게 하는 것을 말한다. 어떤 시스템 디자인을 채택할지 검토하거나 디자인을 다양한 측면에서(가용성, 비용 효율성 등) 검증하는데 사용된다.   Back-of-the-envelope-calculation 계산의 종류latency 추정필요한 리소스(e.g. 메모리, 스토리지, etc.) 용량 추정네트워크 트래픽 추정QPS(Query per second) 추정  10% per hour rule시스템이 피크 부하를 감당할 수 있는지 가늠하기 위해 활용하는 룰로, 피크 타임엔 일일 트래픽의 10%가 한 시간 동안 발생할 수 있다는 가정이다. 5%~1..
개발자라면 외워야 하는 지연 시간 14가지 지연시간 목록 (2020 버전) 출처는 다음과 같다. Latency Numbers Every Programmer Should Know 1999년부터 2020년까지 지연시간의 변화를 시각적으로 보여준다. 항목 (영문)항목 (국문)지연시간L1 cache reference L1 캐시 참조1ns Branch mispredict 분기 예측 오류3ns L2 cache referenceL2 캐시 참조4ns Mutex lock/unlock 뮤텍스 락/언락17ns Main memory reference 주 메모리 참조 100ns  Compress 1K bytes with ZippyZippy로 1KB 압축2,000ns  Send 1K bytes over 1 Gbps network 1Gbps 네트워크로 2KB 전송 10,0..