7장. 분산 시스템을 위한 유일 ID 생성기 설계
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
분산 시스템에서 유일한 ID를 생성하는 일은 생각보다 복잡하다.단순히 RDBMS의 auto_increment를 사용하면 될 것 같지만, 서버가 분산되기 시작하면 곧 병목과 충돌의 문제가 나타난다.이 글에서는 그러한 문제를 해결하기 위한 다양한 접근법을 소개하고, 그중에서도 트위터의 Snowflake 알고리즘을 중심으로 설계를 정리한다. 데이터베이스 서버 한 대로는 그 요구를 감당할 수 없을뿐더러, 여러 데이터베이스 서버를 쓰는 경우에는 지연시간(delay)을 낮추기가 무척 힘들 것이다. 🤔 여러 데이터베이스 서버를 쓰는 경우에 지연시간을 낮추기가 힘들다는 게 무슨말일까?ID 충돌을 피하려면 각 DB 서버가 생성하는 ID 범위를 미리 조정하거나, 중앙에서 ID를 발급받는 티켓 서버 같은 구조를 사용해야 ..
6장. 키-값 저장소 설계
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
키-값 저장소는 키-값 데이터베이스라고도 불리는 비관계형 데이터베이스이며, 각 값은 고유 식별자인 키를 통해 접근한다.키는 일반 텍스트 혹은 해시 값일 수 있으며, 짧을수록 성능에 유리하다.값은 문자열, 리스트, 객체 등 어떤 것이든 가능하며, 저장소는 값의 형태를 따로 제한하지 않는다.대표적인 예시로는 Amazon Dynamo, Memcached, Redis 등이 있다. 요구사항 정리이번 장에서는 다음 특성을 갖는 키-값 저장소를 설계해 볼 것이다.키-값 쌍의 크기는 10KB 이하이다.큰 데이터를 저장할 수 있어야 한다.높은 가용성을 제공해야 한다. 따라서 시스템은 설사 장애가 있더라도 빨리 응답해야 한다.높은 규모 확장성을 제공해야 한다. 따라서 트래픽 양에 따라 자동적으로 서버 증설/삭제가 이루어져..
5장. 안정 해시 설계
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
수평적 규모 확장성(scale out)을 달성하기 위해서는 클라이언트로부터의 요청이나 데이터를 서버에 균등하게 나누는 것이 중요하다.안정 해시는 이 목표를 달성하기 위해 보편적으로 사용하는 기술이다.안정 해시에 대해서 알기 전에 우선 이러한 해시 기술이 어떠한 문제를 해결하려고 하는지 좀 더 자세히 살펴보자먼저, 해시란?안정 해시에 대해서 알아보기 전에 간략하게 해시에 대해서 짚어보자. 해시의 사전적 의미는 '임의 길이의 데이터 문자열을 입력으로 받아서 고정 크기의 출력, 일반적으로는 숫자와 문자열로 이루어진 해시 값 또는 해시 코드를 생성하는 수학적 함수'이다. 쉽게 풀어 이야기하면 같은 문자열 입력은 항상 같은 해시 코드를 반환한다는 것이다. 해시의 이런 특성을 이용하여 암호화나 파일의 위변조 판정 ..
4장. 처리율 제한 장치의 설계
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다. 처리율 제한 장치란처리율 제한 장치란 네트워크 시스템에서 클라이언트 또는 서비스가 보내는 트래픽의 처리율(rate)을 제어하기 위한 장치다.HTTP를 예로 들면 이 장치는 특정 기간 내에 전송되는 클라이언트의 요청 횟수를 제한한다. API 요청 횟수가 제한 장치에 정의된 임계치를 넘어서면 추가로 도달한 모든 호출은 처리가 중단된다. 예시사용자는 초당 2회 이상 새 글을 올릴 수 없다.같은 IP 주소로는 하루에 10개 이상의 계정을 생성할 수 없다.같은 디바이스로는 주당 5회 이상 리워드를 요청할 수 없다.API에 rate limiter를 두면 좋은 점DoS(Denial of Service) 공격에 의한 자원 고갈(resource ..
3장. 시스템 설계 면접 공략법
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다. 시스템 설계 면접은 많은 사람이 단순히 지원자의 설계 능력만 평가하는 자리라고 생각하지만, 사실 그 이상이다.이 자리에서 면접관은 다음과 같은 부분까지 살펴본다.지원자가 협업에 적합한지압박감 있는 상황에서 문제 해결 자질을 보이는지모호한 문제를 건설적으로 풀어낼 수 있는지좋은 질문을 던질 능력이 있는지또한 훌륭한 면접관은 부정적 신호도 놓치지 않는다.예를 들어, 시스템 비용을 고려하지 않고 순수한 설계 원칙에만 집착하거나, 과도한 엔지니어링을 하여 tradeoff(절충)를 무시하는 모습은 감점 요인이 될 수 있다. 효과적 면접을 위한 4단계 접근법1. 문제 이해 및 설계 범위 확정바로 답부터 내지 말고, 속도를 늦추고 질문하라..
2장. 개략적인 규모 추정
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다. 시스템 설계 면접을 볼 때, 때로는 시스템 용량이나 성능 요구사항을 개략적으로 추정해 보라는 요구를 받게 된다. 이건 단순히 계산 문제라기보다,주어진 문제를 구조적으로 풀어가며 합리적으로 추정할 수 있는지,시스템의 확장성과 실제성을 고려한 설계를 할 수 있는지를 보여주기 위한 것이다.💡 개략적인 규모 추정(back-of-the-envelope estimation): 보편적으로 통용되는 성능 수치상에서 사고 실행을 행하여 추정치를 계산하는 행위로써, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것이다. 개략적 규모 추정을 효과적으로 해내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 하며,특히 2의 제곱수나 응답지연..
1장. 사용자 수에 따른 규모 확장성 - (3) 샤딩, 메시지 큐, 자동화
·
📝 끄적끄적/📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초
가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽고 정리한 글입니다. 무상태(stateless) 웹 계층이제 웹 계층을 수평적으로 확장하는 방법을 고민해 볼 순서다. 먼저 상태 정보(예: 사용자 세션 데이터)를 웹 서버 안에서 제거해야 한다.왜냐하면 서버마다 상태를 따로 가지고 있으면, 로드밸런서가 클라이언트 요청을 특정 서버로만 보낼 수밖에 없기 때문이다. 바람직한 전략은 이 상태 정보를 관계형 데이터베이스나 NoSQL 같은 지속성 저장소에 보관하고, 필요할 때 가져오는 방식이다. 1. 상태 정보 의존적인 아키텍처상태 정보를 보관하는 서버는 클라이언트 정보, 즉 상태를 유지하여 요청들 사이에 공유되도록 한다.사용자 A의 세션 정보나 프로파일 이미지 같은 상태 정보는 서버 1에 저장된다.사용자 A를..