개발 서적 완독하기/가상 면접 사례로 배우는 대규모 시스템 설계 기초 5

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 5장(안전 해시 설계)

수평적 규모 확장성을 달성하기 위해서는 요청 or 데이터를 서버에 균등하게 나눠야한다. 안정해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술인데, 이 해시기술이 어떤 문제를 해결할 수 있는지 부터 알아본다. 해시 키 재배치(rehash) 문제 N개의 캐시서버가 있다고 할 때, 이 서버들에 부하를 균등하게 나누는 보편적 방법은 아래의 해시 함수를 사용하는 것이다. serverIndex = hash(key) % N (N은 서버의 개수이다) 4대의 서버를 사용한다면 해시 값이 18358617은 1(서버인덱스)이다. 이런식으로 나머지연산(%)을 이용해서 각 서버에 저장한다. 그러나, 해당 방법은 서버가 추가되거나 삭제될 때 문제가 발생한다. 만약 0번 서버가 장애가 발생하여, 위 해시함수를 이용해서 해시..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 4장(처리율 제한 장치의 설계)

처리율 제한 장치 네트워크 시스템에서 처리율 제한 장치는 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치이다. API 요청 횟수가 제한 장치에 정의된 임계값을 넘어서면 추가 API들은 버려지거나, 중단된다. 아래에는 몇가지 예시이다. 사용자는 초당 2회 이상의 새 글을 올릴 수 없다. 같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없다. 같은 디바이스로는 주당 5회 이상 리워드를 요청 할 수 없다. 처리율 제한 장치를 두면 좋은점은 아래와 같다. DOS 공격에 의한 자원 고갈을 방지할 수 있다. (트위터는 3시간 동안 300개 트윗 제한, 등등) 비용을 절감한다. 추가요청에 대한 처리를 제한하면 서버를 많이 두지 않아도 되고, 우선순위가 더 높은 API에게 자원을 할당할..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 3장(시스템 설계 면접 공략법)

효과적인 면접을 위한 4단계 접근법 책에서 제시하는 효과적인 면접을 위한 4단계 접근법이 있다. 해당 내용은 면접에도 유용하게 사용될 수 있지만, 문제 해결이나, 토론, 회의 등에도 유용하게 사용할 수 있는 방법론인 것 같다. 1단계 문제 이해 및 설계 범위 확정 먼저 시스템을 구축 OR 어떤 질문에 대한 답을 하기 전에, 구체적인 요구사항을 질문하는 것이 좋다. 아래는 몇가지 예시이다. 구체적으로 어떤 기능을 만들어야하는지? 사용자 수는 얼마나 되는지 회사 규모는? 기한은 언제까지인지? 회사가 주로 사용하는 기술 스택은 무엇이고, 어떤 모듈들을 사용중에 있는지? 2단계 개략적인 설계안 제시 및 동의 구하기 해당 단계에서 초점을 맞추어야 할 것은 개략적인 설계안을 제시하고 면접관의 동의를 얻는 것이다. ..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 2장(개략적인 규모 추정)

2의 제곱수 모든 프로그래머가 알아야 하는 응답지연 값 메모리는 빠르지만 디스크는 아직도 느리다. 디스크 탐색은 가능한 피하라 단순한 압축 알고리즘은 빠르다. 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라 데이터 센터는 보통 여러지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는데에 시간이 걸린다. 통신할 때, 데이터를 압축하거나, 용량을 줄이는 것에 대해는 와닿는다. 예를 들어, 이미지를 저장하는데, 클라 -> 서버 -> 이미지서버라면, 2번의 통신에 용량이 큰 이미지가 들어갈 것이다. 용량이 큰 이미지는 클라이언트에서 바로 이미지 서버로 전송하는 것이 더 효율적일 것이다. 가용성에 관계된 수치들 고가용성(High availability)는 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될..

가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 1장 (사용자 수에 따른 규모 확장성)

단일서버 모든 컴포넌트가 서버(머신,인스턴스) 1대에서 실행되는 경우이다. 여기서 컴포넌트란 웹, 앱, 데이터베이스, 캐시를 뜻한다. 1. 사용자는 도메인 이름을 이용하여 웹사이트에 접속 (이름 서비스는 DNS 서버에서 IP로 변경) 2. IP 주소로 HTTP 요청 전달 3. 요청을 받은 웹서버에서 HTML 페이지나 JSON 형태의 응답 데이터베이스 사용자가 늘면, 컴포넌트를 분리하기 시작한다. 대표적으로 데이터베이스 서버와 웹서버를 분리한다. - 데이터베이스 서버는 용량 및 처리량이 크기 때문에 서버 분리 우선대상 어떤 데이터베이스를 사용할 것인가? 전통적으로 관계형 데이터베이스와 비관계형 데이터베이스로 나눠진다. 워낙 많이 들어본 내용이기 때문에 간단하게 정리하고 넘어간다. (자세한 내용은 https..

728x90