목록개발/대규모 시스템 설계 (8)
어흥
장애 처리 우선 장애 감지와 장애 해소 전략을 살펴보자 장애 감지 분산 시스템에선 한 대 서버가 "서버 A 다운"이라고 말해도 서버 A를 장애처리 하지 않는다. 보통 2 대 이상의 서버가 같이 서버 A의 장애를 보고해야 처리한다. 노드간 멀티캐스팅 채널을 구축하는것이 서버 장애를 감지하는 가장 쉬운 방법이지만 서버가 많을때는 비효율적이다. 가십 프로토콜(Gossip Protocol) 같은 분산형 장애 감지를 채택하는 것이 나으며 동작원리는 다음과 같다 - 각 노드는 멤버십 목록을 유지. 멤버십 목록은 멤버ID와 그 박동 카운터 쌍의 목록 - 각 노드는 주기적으로 자신의 박동 카운터를 증가 - 각 노드는 무작위로 선정된 노드들에게 주기적으로 자기 박동 카운터 목록을 보냄 - 박동 카운터 목록을 받은 노드는..
시스템 컴포넌트 - 데이터 파티션 - 데이터 다중화 - 일관성 - 일관성 불일치 해소 - 장애 처리 - 시스템 아키텍처 다이어그램 - 쓰기 경로 - 읽기 경로 데이터 파티션 데이터를 작은 파티션들로 분할한 다음 여러 대 서버에 저장한다. 데이터를 파티션 단위로 나눌 땐 다음 2가지를 고려한다 - 데이터를 여러 서버에 고르게 분산할 수 있는가 - 노드가 추가되거나 삭제될 때 데이터의 이동을 최소화할 수 있는가 5장에서 다룬 안정 해시를 통해 이런 문제를 해결할 수 있다. 우선 서버를 해시링에 배치한다. 어떤 키-값 쌍을 어떤 서버에 저장할지 결정하려면 우선 해당 키를 같은 링 위에 배치하고 시계 방향으로 순회하다 만나는 첫 번째 서버에 저장한다. 안정 해시를 사용해서 데이터를 파티션하면 다음과 같은 장점이..
키-값 저장소는 키-값 데이터베이스라고도 불리는 비 관계형 데이터베이스다. 그리고 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다. 대표적인 키-값 저장소로 아마존 다이나모, memcached, 레디스가 존재한다. 문제 이해 및 설계 범위 확정 읽기, 쓰기 그리고 메모리 사용량 사이에 어떤 균형을 갖고, 데이터와의 일관성과 가용성 사이에서 타협적 설계를 해야 한다 - 키-값 쌍의 크리는 10KB 이하 - 큰 데이터를 저장할 수 있다 - 높은 가용성을 제공. 시스템은 장애가 있더라도 빨리 응답해야 한다 - 높은 규모 확장성을 제공. 트래픽양에 따라 자동적으로 서버 증설/삭제가 이뤄져야 한다 - 데이터 일관성 수준은 조정이 가능해야 한다 - 응답 지연시간(latency)가 짧아야 한다 단일 서버 키-..
수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는것이 중요하다. 그렇다면 안정 해시 설계는 무엇이고, 무엇을 해결하기 위한 설계인가? 해시 키 재배치(rehash) 문제 N개의 캐시 서버가 있다면 이 서버들에 부하를 균등하게 나누기 위해선 다음과 같이 나머지 연산을 통해 서버에 부하를 나눌것이다 serverIndex = hash(key) % N (N: 서버 개수) 아래는 N이 4로 고정일때의 예시다 하지만 만약 서버가 추가되거나 삭제 혹은 에러가 발생해서 죽는다면? 위의 그림처럼 1번 서버가 죽은 경우, Module 연산이 4에서 3으로 변경됨에 따라 대부분의 키 재분배 → 대부분 캐시 클라이언트가 데이터가 없는 엉뚱한 서버에 접속 → 대규모 캐시 미스 발생 안정 해시 해..
3단계: 상세 설계 개략적인 설계에서 알 수 없는 점 - 처리율 제한 규칙은 어떻게 만들어지고 어디에 저장되는가? - 처리가 제한된 요청들은 어떻게 처리되는가? 리프트(Lyft)는 처리율 제한에 오픈 소스를 사용한다. domain: messaging descriptions: - key: message_type Value: marketing rate_limit: unit: day requests_per_unit: 5 이런 규칙들은 보통 설정 파일(configuration file) 형태로 디스크에 저장된다 처리율 한도 초과 트래픽의 처리 어떤 요청이 한도 제한에 걸리면 API는 HTTP 429(Too many requests) 응답을 클라에게 보낸다. 시스템 과부하로 인해 처리 못한 경우, 한도 제한에 걸..
처리율 제한 장치란? 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제한하기 위한 장치 예시 1. 사용자는 초당 2회 이상 새 글을 올릴 수 없다 2. 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없다 3. 같은 디바이스로는 주당 5회 이상 리워드를 요청할 수 없다 처리율 제한 장치를 설치하면 좋은점은? - DoS(Denial of Service) 공격에 의한 자원 고갈을 방지할 수 있다 - 비용을 절감한다. 적당한 서버 수, 서드 파티 요청하는 API 감소 - 서버 과부하를 막는다 처리율 제한 장치 구현 1단계: 문제 이해 및 설계 범위 확정 면접에서 처리율 제한 장치 설계에 관한 질문이 들어왔을 때, 지원자가 물어볼만한 사항 1. 어떤 종류의 처리율 제한 장치를 설치해야 ..
명심할 점: 정해진 결말이나 정답은 없다 1단계: 문제 이해 및 설계 범위 확정 - 깊이 생각하고 질문하여 요구사항과 가정들을 분명히 하라 - 올바른 질문, 적절한 가정 그리고 시스템 구축에 필요한 정보를 모아라. 가정을 한다면 종이나 화이트보드에 꼭 메모해둔다 올바른 질문 예시 1. 구체적으로 어떤 기능을 만들어야 하는가? 2. 제품 사용자 수는 얼마나 되는가? 3. 회사의 규모는 얼마나 빨리 커지는가? 3,6,12개월 뒤의 규모는 어느정도인가? 4. 회사가 주로 사용하는 기술 스택은 무엇인가? 설계를 단순화하기 위해 활용할 수 있는 기존 서비스로는 어떤 것이 있는가? 예제 뉴스 피드(news feed) 시스템을 설계하라는 요구를 받았다. 이때 다음과 같은 순서로 질문 할 수 있다 1. 모바일 앱 웹 ..
1. 개략적인 규모 추정을 하는 이유? 보편적으로 통용되는 성능 수치상에서 사고 실험을(thought experiments) 행하여 추정치를 계산하는 행위 어떤 설계가 요구사항에 부합할 것인지 보기 위함 2. 규모 확장성에 필요한 기본기 (1) 2의 제곱수 최소 단위: 1Byte = 8Bit (2) 응답지연 값 ns = nanosecond, µs = microsecond, ms = milisecond 1ms = 1,000µs = 1,000,000ns 위 표를 통해 얻을 수 있는 점 - 메모리는 빠르지만 디스크는 아직 느리다 - 디스크 탐색은 피하자 - 단순한 압축 알고리즘은 빠르다 (3) 가용성에 관계된 수치 고가용성이란 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력으로, %로 표현..