개발 8

Key-value Store #1 - Scalability & Replication

Introduction to key-value stores 키값 저장소는 분산 해시테이블이다. 키는 해시함수를 사용해 생성되며 고유하다. 보통 값의 크기를 비교적 작게 (KB to MB) 유지하는 것이 선호된다. 전통적 DB 를 강한 일관성과 높은 가용성을 유지하면서 분산 환경으로 확장시키는것을 어려운 일이다. 많은 서비스들이 전통적인 OLTP DB 대신 primary key 를 통한 저장소 접근을 사용하고 있다. Design of a Key-value store Requirements Functional Configurable service 여러 일관성 모델을 사용할 수 있도록 서비스를 설정 가능하게 만들어야 한다. 가용성, 일관성, 비용효율성, 성능 사이의 트레이드오프를 제어할 수 있도록 해야한다. ..

System Design 2023.06.02

Databases #3 - Data Partitioning

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Databases 챕터 내용을 정리한 글입니다. Why do we partition data? Data 는 조직에서 주요한 자산이고, 늘어나는 데이터와 동시성 읽기/쓰기 트래픽은 전통적 DB 가 확장성을 가지길 요한다. 전통적인 DB는 range query, secondary index, 트랜잭션 등의 속성때문에 매력적이다. 단일 노드 기반 DB 는 로드를 처리하기에 충분하지 않아서 데이터를 여러 노드로 분산시키면서도 RDB 의 좋은 특징들을 유지할 필요가 있는데, 실제로는 분산 DB 가 단일노드DB 의 특징을 가지게 하는 것은 어려운 일로 판명되었다. NoSQL 과 같은 시스템으로 데이터를..

System Design 2023.06.01

Databases #2 - Data Replication

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Databases 챕터 내용을 정리한 글입니다. 데이터는 전체 비즈니스를 이끌어가는 조직의 주요 자산이다. 데이터는 뭐가 중요하고 어떤 변화가 필요한지에 대한 비즈니스적 인사이트를 제공한다. 조직은 또한 클라이언트의 정보를 안전하게 저장하고 서빙해야 한다. 온라인 비즈니스를 성공적으로 운영하려면 다양한 조건에서 필요한 데이터에 제때 액세스 할 수 있어야 한다. 데이터 저장소에는 다음과 같은 특성들이 필요하다. 이는 하나의 노드만으로는 달성하기 어렵다. 장애시 가용성 - 일부 디스크, 노드, 네트워크 및 전력 중지 확장성 - 읽기, 쓰기 및 기타 작업 증가 성능 - 클라이언트의 짧은 대기시간 ..

System Design 2023.04.16

Databases #1 - RDB vs NoSQL

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Databases 챕터 내용을 정리한 글입니다. Introduction to Databases Problem statement DB 없이 소프트웨어 앱을 만들 수 있을까? 왓츠앱 같은 앱을 생각해보면 사람들은 친구들과 대화하기 위해 앱을 사용한다. 그렇다면 사람들의 이름이나 메시지같은 정보를 어디에, 어떻게 영구 저장하고, 가져올 수 있을까? 단순히 파일 하나를 사용해서 정보들을 저장할 수 있다. 하지만 이런 구현은 제약사항들이 있다. Limitations of file storage 서로 다른 유저들이 동시에 파일에 접근하도록 할 수 없다 각 유저들에게 서로 다른 권한을 부여할 수 없다 확..

System Design 2023.04.16

Load Balancer #3 - Advanced Details of Load Balancers

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Load Balancer 챕터 내용을 정리한 글입니다. What is local load balancing? 로컬 LB 는 데이터센터 내에 존재하고 리버스 프록시같이 동작하며 들어오는 요청들을 가용서버들에게 분산시킨다. 들어오는 요청들은 가상 IP 주소 (VIP, Virtual IP) 를 사용하는 LB 에 원활하게 연결된다. Algorithms of load balancers 로컬 로드밸런서에 사용되는 잘 알려진 알고리즘들은 아래와 같은 것들이 있다. 이 외에도 randomized 나 weighted least connection 알고리즘 등이 있다. Round-robin schedulin..

System Design 2023.03.29

Load Balancer #2 - Global and Local Load Balancing

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Load Balancer 챕터 내용을 정리한 글입니다. Introduction 지난 레슨에서 로드밸런싱은 데이터센터 내에서만 동작하는 것으로 보여졌다. 하지만 로드밸런싱은 글로벌과 로컬 스케일 둘 다에 필요한데, 두 경우가 어떻게 다른지 알아보자. Global server load balancing (GSLB) GSLB 는 여러 지역에 걸쳐 트래픽 부하를 분산시킨다 Local load balancing 데이터 센터 내에서 일어나는 로드밸런싱을 말한다. 이 경우는 데이터센터 내의 서버들의 효율성과 더 나은 자원 활용에 중점을 둔다 Global server load balancing GSLB ..

System Design 2023.03.26

Load Balancer #1 - Introduction to Load Balancers

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Load Balancer 챕터 내용을 정리한 글입니다. What is load balancing? 일반적인 데이터 센터에는 초당 백만건 정도의 요청이 도착할 수 있다. 이러한 요청들을 처리하기 위해서는 수천 또는 수십억대의 서버들이 부하를 나눠갖기 위해 협업해야 한다. load balancer (LB) 는 클라이언트의 요청을 사용 가능한 서버들에 균등하게 분배하는 일을 한다. 이를 통해 서버가 과부하되거나 죽는걸 방지한다. 로드밸런싱 레이어는 방화벽 이후 데이터센터 내에서 처음 마주치는 부분이다. 서비스가 초당 수백~수천건의 요청만 처리해도 된다면 로드밸런서가 필요 없을수도 있다. 하지만 ..

System Design 2023.03.26

Domain Name System

본 글은 educative.io 의 Grokking Modern System Design Interview 코스의 Domain Name System 챕터 내용을 정리한 글입니다. The origin of DNS 휴대전화는 고유의 전화번호가 각 사용자에게 연결되어있다. 친구에게 전화를 하려면 우리는 먼저 친구의 전화번호를 기억해야한다. 이렇게 기억해야할 연락처가 늘어나면서, 우리는 전화번호부를 관리하여 연락처들을 관리하고, 필요한 경우에 원하는 사람에게 전화를 할 수 있다. 비슷하게 컴퓨터들도 고유한 IP 주소로 서로를 구별할 수 있다. 특정 머신이 호스팅하는 웹사이트를 방문하기 위해 IP 주소를 사용한다. 하지만 사람들이 도메인 네임을 방문하기 위해 IP 주소를 일일이 기억하긴 어렵기 때문에 전화번호부와..

System Design 2023.03.19