가상 면접 사례로 배우는 대규모 시스템 설계 기초 17

[System Design Interview] 7장 분산 시스템을 위한 유일 ID 생성기 설계

auto_increment가 설정된 관계형 데이터베이스는 분산 환경에서 사용할 수 없음 1. 데이터베이스 서버 한 대로는 감당 불가 2. 다중 데이터베이스로는 지연시간(delay)를 낮추기 힘듬 1단계 - 문제 이해 및 설계 범위 확정 요구사항 ID는 유일해야 함 ID는 수자로만 구성되어야 함 ID는 64비트로 표현될 수 있는 값이여야 함 ID는 발급 날짜에 따라 정렬 가능해야 함 초당 10,000개의 ID를 만들 수 있어야 함 2단계 - 개략적 설계안 제시 및 동의 구하기 유일 ID 생성을 위한 선택지 다중 마스터 복제(mutli-master replication) 다중 데이터베이스에서, auto_increment 할 때 데이터베이스 서버의 수 K만큼 증가시킴 단점 여러 데이터 세넡에 걸쳐 규모를 늘리..

[System Design Interview] 6장 키-값 저장소 설계

키-값 저장소(key-value store)는 키-값 데이터베이스라고도 불리는 비 관계형(non-relational) 데이터베이스 문제 이해 및 설계 범위 확정 다음 연산을 지원하는 키-값 저장소를 설계 put(key, value): 키-값 쌍을 저장소에 저장 get(key): 인자로 주어진 키에 매달린 값을 꺼냄 다음 특성을 갖는 키-값 저장소를 설계 키-값 쌍의 크기는 10KB 이하 큰 데이터를 저장할 수 있어야 함 높은 가용성을 제공해야 함 높은 규모 확장성을 제공해야 함 데이터 일관성 수준은 조정 가능해야 함 응답 지연시간(latency)이 짧아야 함 단일 서버 키-값 저장소 데이터 압축과 캐싱을 이용해도 한 대 서버로 부족한 때가 찾아옴. 많은 데이터를 저장하려면 분산 키-값 저장소(distri..

[System Design Interview] 5장 안정 해시 설계

수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요 → 안정 해시 사용 해시 키 재배치(rebash) 문제 캐시 서버 풀(pool)의 크기가 고정되어 있지 않고(서버 추가/삭제), 데이터 분포가 균등하지 않을 때 발생하는 문제 → 캐시 미스(cache miss) 안정 해시 안정 해시(consistent hash): 해시 테이블 크기가 조정될 때 평균적으로 오직 k/n개의 키만 재배치하는 해시 기술 해시 링(hash ring)을 이용하여, 안정 해시 달성 안정 해시 알고리즘 서버와 키를 균등 분포(uniform distribution) 해시 함수를 사용해 해시 링에 배치 키의 위치에서 링을 시계 방향으로 탐색하다 만나는 최초의 서버가 키가 저장될 서버 안정 해시 알..

[System Design Interview] 4장 처리율 제한 장치의 설계

네트워크 시스템에서 처리율 제한 장치(rate limiter)는 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치ex) 사용자는 초당 2회 이상 새 글을 올릴 수 없다. 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없다. 처리율 제한 장치의 장점 1. DoS(Denial of Service) 공격에 의한 자원 고갈(reousrce starvation)을 방지 2. 비용 절감 3. 서버 과부화 방지 1단계: 문제 이해 및 설계 범위 확정 요구사항 설정된 처리율을 초과하는 요청은 정확하게 제한한다. 낮은 응답시간: 이 처리율 제한 장치는 HTTP 응답시간에 나쁜 영향을 주어서는 곤란하다. 가능한 한 적은 메모리를 써야 한다. 분산형 처리율 제한(distribute..

[System Design Interview] 3장. 시스템 설계 면접 공략법

시스템 설계 면접은 지원자의 설계 기술, 결정에 대한 방어 능력, 피드백을 건설적으로 처리할 자질이 있음을 보이는 자리 효과적 면접을 위한 4단계 접근법 1단계: 문제 이해 및 설계 범위 확정 시스템을 설계하기 전에는 먼저 요구사항을 완전히 이해해야 함 요구사항을 이해하는 데 필요한 질문 구체적으로 어떤 기능들을 만들어야 하는가? 제품 사용자 수는 얼마나 되는가? 회사의 규모는 얼마나 빨리 커지리라 예상하는가? 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것들이 있는가? 2단계: 개략적인 설계안 제시 및 동의 구하기 개략적인 설계안을 제시하고 면접관에게 동의 구하기 진행 과정 최초 설계안을 제시하고 면접관을 팀원으로 생각하고 의견을 구하기 화이..

[System Design Interview] 2장. 개략적인 규모 측정

개략적인 규모 추정(back-of-the-envelope estimation): 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)을 행하여 추정치를 계산하는 행위 → 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것 2의 제곱수 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지 알아야 함 응답지연 값 통상적인 컴퓨터에서 구현된 연산들의 응답지연 값 응답 지연 값의 결론 메모리는 빠르지만 디스크는 아직도 느리다 디스크 탐색(seek)은 가능한 한 피하라 단순한 압축 알고리즘은 빠르다 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라 데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 센터들 간에 데이터를 주고받는 데는 시간이 걸린다 가용성에 관계된 ..

[System Design Interview] 1장. 사용자 수에 따른 규모 확장성

단일 서버 가장 단순한 형태 단일 서버: 웹, 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행됨. 요청 단말의 종류 웹 애플리케이션: 비즈니스 로직, 데이터 저장 등의 처리는 서버에서, 프레젠테이션은 클라이언트에서 하는 방식 모바일 앱: JSON 포맷을 기반으로 하는 HTTP 프로토콜을 사용함 데이터베이스 RDBMS vs NoSQL 사용자가 늘면 여러 서버를 두어야 함 하나는 웹/모바일 트래픽 처리 용도 (웹 계층) 하나는 데이터베이스용 (데이터 계층) 관계형 데이터베이스 (RDBMS) 자료를 테이블과 열, 칼럼을 표현 SQL로 테이블에 있는 데이터를 그 관계에 따라 조인(join)하여 합칠 수 있음 비-관계형 데이터베이스 (NoSQL) 부류: 키-값 저장소(key-value store), 그래..