이론 정리/대규모 시스템 설계 8

대규모 시스템 설계 공부 008

URL 단축기 설계 1단계 문제 이해 및 설계 범위 확정 질문 결과 기본적 기능이 아래와 같다고 한다. URL단축 : 주어진 긴 URL을 훨씬 짧게 줄인다. URL리디렉션 : 축약된 URL로 HTTP 요청이 오면 원래 URL로 안내 높은 가용성과 규모 확장성, 그리고 장애 감내가 요구됨 개략적 추정 쓰기 연산 : 매일 1억 개의 단축 URL생성 초당 쓰기 연산 : 1억/24/3600=1160 읽기 연산 : 읽기 연산과 쓰기 연산 비율은 10:1이라고 하자. 그 경우 읽기 연산은 초당 11600회 발생한다. URL단축 서비스를 10년간 운영한다고 가정하면 1억X365X10=3650억 개의 레코드를 보관해야 한다. 축약 전 URL의 평균 길이는 100이라고 하자 따라서 10년동안 필요한 저장 용량은 3650..

대규모 시스템 설계 공부 007

분산 시스템을 위한 유일 ID 생성기 설계 분산 시스템에서 사용될 유일 ID생성기를 설계할 때 'auto_increment 속성이 설정된 관계형 DB의 PK를 쓰면 되지 않을까?' 할 수도 있는데... 분산 환경에서 이 접근법은 통하지 않는다. DB서버 한 대로는 그 요구를 감당할 수 없을뿐 아니라 여러 DB서버를 쓰는 경우에는 지연시간을 낮추기가 무척 힘들 것이기 때문이다. -> Auto increment는 따로 동기화가 되어있지 않으면 각각의 분산 환경에서 동일한 ID가 나타날 수 있다. -> Auto increment 추가적인 단점은 외부에서 해당 시스템의 id를 예측하기 쉽다는 것이다...이는 트래픽의 파악과 SQL Injection에 취약해지기 쉽다는 단점을 낳는다. 1단계 문제 ..

대규모 시스템 설계 공부 006

키-값 저장소 설계 key-value 저장소는 noSql중 하나이다. 이 저장소에 저장되는 값은 고유 식별자를 키로 가져야 한다. 키와 값 사이의 이런 연결 관계를 키-값 쌍(pair)이라고 한다. 키-값 쌍에서의 키는 유일해야 하며 해당 키에 매달린 값은 키를 통해서만 접근 가능하다. 키는 텍스트일 수도, 해시 값일수도 있다. 당연히 키는 짧을수록 좋을 것이다(성능상) 값은 무엇이 오든 크게 상관 없다. 키-값 저장소를 한번 설계해 본다. 문제 이해 및 설계 범위 확정 완벽한 설계는 없다. 읽기, 쓰기 그리고 메모리 사용량 사이에 어떤 균형을 찾고, 데이터의 일관성과 가용성 사이에서 타협적 결정을 내린 설계를 만들었다면 쓸만한 답안일 것이다. 다음 특성을 갖는 키-값 저장소를 설계해 보자. 키-값 쌍의..

대규모 시스템 설계 공부 005

수평적 규모 확장을 의해 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다. 요청 또는 데이터를 균등하기 나누기 위해 보편적으로 사용하는 기술이 안정 해시이다. 이 해시 기술이 풀려고 하는 문제부터 좀 더 자세히 알아본다. 해시 키 재배치(rehash) 문제 N개의 캐시 서버가 있다고 할 때, 이 부하를 균등하게 나누는 보편적 방법이 해시 함수를 사용하는 것이다. serverIndex = hash(key)%N (N은 서버의 개수)예를 들어 4개의 서버를 사용한다고 할 때 주어진 각각의 키에 대해 해시 값과 서버 인덱스를 계산하면 이렇게 나온다. 특정 키가 보관된 서버를 알아내기 위해 나머지연산을 f(key)A%4와 같이 적용했다. 예를 들어 hash(key0)%4=1 이면 클라이언트는 캐시에 보관..

대규모 시스템 설계 공부 004

study004 tags: Tag(가상 면접 사례로 배우는 대규모 시스템 설계 기초) 처리율 제한 장치의 설계 처리율 제한 장치 네트워크에서 처리율 제한 장치란 클라이언트 또는 서비스가 보내는 트래픽의 처리율을 제어하기 위한 장치이다. HTTP를 예로 들면 이 장치는 특정 기간 내에 전송되는 클라리언트의 요청 횟수를 제한한다. API요청 횟수가 제한 장치에 정의된 임계치(threshold)를 넘어서면 추가로 도달한 모든 호출은 처리가 중단된다. 예를 들면 사용자는 초당 2회 이상 새 글을 올릴 수 없다. 같은 IP주소로는 하루에 10개 이상의 계정을 생성할 수 없다. 같은 디바이스로는 주당 5회 이상 리워드를 요청할 수 없다. 이런 처리율 제한 장치를 설계하는 방법에 관해 알아본다.. 그리고 그 전에 이..

대규모 시스템 설계 공부 003

시스템 설계 면접 공략법 일단 시스템 설계 면접은 면접에서 실제 서버에서 쓰이는 만큼 복잡하고 어려운 설계를 요구하지 않는다. 설계 기술을 시연하고, 그 과정에서 결정들에 대한 방어 능력을 보이고, 면접관의 피드백을 건설적인 방법으로 처리할 자질이 있음을 보이는 자리이다. 따라서 해당 시스템 설계 면접에서 면접관이 찾고자 하는 것은 기술적 측면의 평가 지원자가 협력에 적합한 사람인지 평가 압박이 심한 상황도 잘 헤쳐나갈 자질이 있는지, 모호한 문제를 건설적으로 해결할 능력이 있는지 평가 좋은 질문을 던질 능력이 있는지 평가 이라고 한다. 또 한가지 중요한 것은 설계의 순수성(purity)에 집착한 나머지 타협적 결정(tradeoff)를 도외시하고 과도한 엔지니어링(over-engineering)을 하게 ..

대규모 시스템 설계 공부 002

시스템 용량이나 성능 요구사항을 개략적으로 추정하는 방법 이 개략적 규모 추정을 효과적으로 해내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 한다. 2의 제곱수 데이터 양의 계산 결과를 얻으려면 볼륨의 단위를 2의 제곱수로 어떻게 표현하는지를 우선 알아야 한다. 이게 데이터 볼륨 단위들이다. 응답지연 값 2010년 공개된 통상적인 컴퓨터에서 연산들의 응답지연 값이다. 이 내용들을 분석하면 이런 결론이 나온다. 메모리는 빠르고, 디스크는 느리다. 디스크 탐색은 가능한 한 피할것. 단순한 압축 알고리즘은 빠르다. 인터넷으로 데이터를 보내기 전에 가능하면 압축하라. 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고받는 데에는 시간이 걸린다. 가용성 관련 수치들 고가용성(hi..

대규모 시스템 설계 공부 001

사용자 수에 따른 시스템의 확장성에 관하여 알아본다. 단일 서버 모든 웹, 앱, DB, 캐시 등이 한개의 서버에서 실행되는 사례이다. 사용자가 도메인 이름을 통해 웹사이트 접속. 이 때 도메인 이름을 도메인 이름 서비스(DNS)에 질의하여 IP로 변환하는데, 이 DNS는 외부 서비스를 사용하게 되므로 해당 서비스의 일부는 아님. DNS조회를 통한 IP주소 반환 해당 주소로 HTTP요청 전달 요청 결과 반환 해당 사진에서 웹 브라우저 / 모바일 앱 의 두 종류 단말로부터 요청이 들어온다. 웹 브라우저 BE(자바, 파이썬 등) 과 FE(HTML, JS) 사용 모바일 앱 모바일 앱과 웹 서버간 통신을 위해서는 HTTP프로토콜 이용 반환 응답은 주로 JSON이 사용된다. DB 트래픽 처리 서버(웹계층)과 DB서..