Load Balancer 란 무엇인가? 로드 밸런서의 임무는 사용 가능한 서버 풀에서 모든 클라이언트의 요청을 공정하게 나누는 것이다. 로드 밸런서는 서버 과부하나 충돌을 방지하기 위해 이 작업을 수행한다. 로드 밸런싱 계층은 방화벽 다음으로 데이터 센터 내에서 첫 번째 접촉 지점이다. 서비스가 초당 수백 또는 수천 개의 요청을 처리하는 경우 로드...
Grokking Modern System Design - DNS
DNS란 무엇인가? DNS(Domain Name System)는 인간에게 친숙한 도메인 이름을 기계가 읽을 수 있는 IP 주소에 매핑하는 인터넷의 이름 지정 서비스이다. 사용자가 브라우저에 도메인 이름을 입력하면 브라우저는 DNS 인프라에 요청하여 도메인 이름을 IP 주소로 변환해야 한다. 원하는 IP 주소를 얻으면 사용자의 요청이 대상 웹 서버로 ...
Grokking Modern System Design - 비기능적 시스템 특성
가용성이란 무엇인가? 가용성은 클라이언트가 일부 서비스나 인프라에 액세스할 수 있고 정상적인 조건에서 작동되는 시간의 비율이다. 예를 들어, 서비스 가용성이 100% 라면 해당 서비스가 항상 의도한 대로 작동하고 응답(정상적으로 작동)한다는 의미이다. 가용성 측정 수학적으로 가용성 $A$ 는 비율이다. $A$ 값이 높을수록 좋으며 이는 공식으로 ...
Grokking Modern System Design - 추상화
추상화란 무엇인가? 추상화는 필요하지 않은 세부 사항을 난독화 하는 기술이다. 츠상화는 내면의 복잡성을 숨겨서 우리가 설정한 목표에 대해 더 폭넓게 이해하고 그에 집중할 수 있게 해주기 때문에 매우 중요하다 데이터베이스 추상화 트랜잭션은 동시 사용자가 데이터를 읽거나 쓰거나 변경할 때 문제가 되는 많은 결과를 숨기고 성공할 경우 커밋하고 실패할 ...
Distributed Systems - Sharing Problems and their Solution
공유의 문제점 공유는 고 가용성, 성능, 확장성을 저해하는 주요 요인 중 하나이다. 예를 들어, 다양한 파티션이 독립적인 오류 모드를 가질 수 있으므로 파티셔닝을 통해 공유를 줄여 시스템의 전체 가용성을 높일 수 있다. 그리고 단일 데이터 항목을 볼 땐 복제를 통해 공유를 늘려 가용성을 높일 수 있다. 공유 줄이기 공유를 줄이는 것은 적절하게 ...
Distributed Systems - Data Synchronisation
여러 곳에 데이터를 저장해야 하는 필요성 동일한 데이터를 여러 장소에 저장하고 잠재적으로 다른 형식을 저장해야 하는 경우가 있다. 이를 구체화된 뷰(Materialized view) 라고 한다. 다음 이러한 사계의 몇가지 에이다 영구 데이터 저장소에 있는 데이터도 별도의 인 메모리 저장소에 캐시해야 읽기 작업이 짧은 대기 시간으로 캐시에서 ...
Distributed Systems - Coordination Patterns
Orchestration 오케스트레이션은 단일 중앙 시스템이 다양한 다른 시스템의 실행을 조정하는 역할을 담당하므로 스타 토폴로지와 유사한 모습을 보인다. 이때 중앙 시스템을 오케스트레이터 라고 부른다. Choreography Choreography 에서 시스템은 외부 코디네이터가 없어도 서로 조정된다. 이들은 본질적으로 체인에 배치되며 각 ...
Distributed Systems - Communication Patterns
분산 시스템과 다른 시스템의 주요 차이점 중 하나는 다양한 노드가 네트워크 경계를 넘어 데이터를 교환해야 한다는 점이다. Serialization and Deserialization# 모든 노드에는 메모리에 있는 데이터를 네트워크를 통해 전송할 수 있는 형식으로 변환하는 방법이 필요하며 네트워크에서 수신된 데이터를 다시 적절한 메모리 내의 표현으로...
Distributed Systems - Ordering
소프트웨어 시스템에서 시간의 주요 사용 사례 중 하나는 다양한 이벤트의 순서를 결정하는 것이다. 중앙 집중형과 분산 시스템에서 이벤트의 순서를 지정하는데 있어 시계의 존재에 대해서 차이가 존재한다. 중앙집중형에는 노드가 하나뿐 이므로 시계도 하나뿐이다. 이는 보편적으로 단일한 시간 차원을 유지할 수 있기때문에 단일 노드에서의 다양한 이벤트의 순서를...
Distributed Systems - 원자성
원자성 보장의 어려움 원자성을 보장하는 것은 분산 시스템 뿐만 아니라 일반적으로 어려운 작업이다. 구성요소가 소프트워에의 구성요소인지 하드웨어의 구성요소인지 관계없이 구성요소가 예기치 않게 실패할 수 있기 때문이다. 원자성을 달성하는 일반적인 방법은 저널링(journalling) 또는 미리 쓰기(write-ahead logging) 방법이 있다. ...