목록백엔드 (4)
어흥

장애 처리 우선 장애 감지와 장애 해소 전략을 살펴보자 장애 감지 분산 시스템에선 한 대 서버가 "서버 A 다운"이라고 말해도 서버 A를 장애처리 하지 않는다. 보통 2 대 이상의 서버가 같이 서버 A의 장애를 보고해야 처리한다. 노드간 멀티캐스팅 채널을 구축하는것이 서버 장애를 감지하는 가장 쉬운 방법이지만 서버가 많을때는 비효율적이다. 가십 프로토콜(Gossip Protocol) 같은 분산형 장애 감지를 채택하는 것이 나으며 동작원리는 다음과 같다 - 각 노드는 멤버십 목록을 유지. 멤버십 목록은 멤버ID와 그 박동 카운터 쌍의 목록 - 각 노드는 주기적으로 자신의 박동 카운터를 증가 - 각 노드는 무작위로 선정된 노드들에게 주기적으로 자기 박동 카운터 목록을 보냄 - 박동 카운터 목록을 받은 노드는..

시스템 컴포넌트 - 데이터 파티션 - 데이터 다중화 - 일관성 - 일관성 불일치 해소 - 장애 처리 - 시스템 아키텍처 다이어그램 - 쓰기 경로 - 읽기 경로 데이터 파티션 데이터를 작은 파티션들로 분할한 다음 여러 대 서버에 저장한다. 데이터를 파티션 단위로 나눌 땐 다음 2가지를 고려한다 - 데이터를 여러 서버에 고르게 분산할 수 있는가 - 노드가 추가되거나 삭제될 때 데이터의 이동을 최소화할 수 있는가 5장에서 다룬 안정 해시를 통해 이런 문제를 해결할 수 있다. 우선 서버를 해시링에 배치한다. 어떤 키-값 쌍을 어떤 서버에 저장할지 결정하려면 우선 해당 키를 같은 링 위에 배치하고 시계 방향으로 순회하다 만나는 첫 번째 서버에 저장한다. 안정 해시를 사용해서 데이터를 파티션하면 다음과 같은 장점이..

명심할 점: 정해진 결말이나 정답은 없다 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) 가용성에 관계된 수치 고가용성이란 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력으로, %로 표현..