일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HBase
- docker
- boj
- OOM
- gradle
- 프로그래머스
- 문제풀이
- go
- 튜토리얼
- 알고리즘
- programmers
- 주키퍼
- DP
- 파이썬
- codewars
- 스칼라
- Python
- 리눅스
- zookeeper
- 자바
- Java
- scala
- 코드워
- dynamic programming
- 동적프로그래밍
- redis
- Linux
- golang
- Go언어
- leetcode
- Today
- Total
파이문
복제(replication)와 샤딩(sharding) 본문
데이터 분산 방법에는 크게 두 가지가 있다. 바로 복제(replication) 와 샤딩(sharding) 이다.
복제(replication)
복제는 같은 데이터를 복사해 여러 노드에 분산하는 방법이다.
복제에는 크게 마스터-슬레이브 (master-slave) 와 peer-to-peer 두 가지 방법이 있다.
마스터-슬레이브
마스터-슬레이브의 경우 여러 노드에 데이터를 복제하여 사용하는 방법이다. 이 때 노드를 마스터 노드와 슬레이브 노드라고 부르며, 모든 쓰기는 마스터에서 행하고 읽기는 마스터나 슬레이브에서 처리 된다. 쓰기가 실행 될 경우, 데이터는 마스터에서 슬레이브로 복제된다.
읽기를 마스터 노드와 슬레이브 노드에서 처리하므로, 읽기가 많이 발생하는 작업에서 성능 효과를 얻게 된다. (더 많은 읽기 요청을 처리하고 싶다면 스케일 업을 하면 된다.)
만약 마스터 노드가 문제가 생기면 다른 슬레이브 노드가 마스터 노드가 되는 방식을 사용할 수도 있다. 이럴 경우 쓰기 작업(마스터가 실행하는)이 실패해도 빠르게 복구 가능하다.
그러나, 어쩔 수 없는 단점도 존재하는데, 바로 쓰기 작업을 통한 변경사항을 모든 슬레이브에게 업데이트 하기 전에 다른 클라이언트에서 읽기 작업을 실행하는 시나리오가 생길 수도 있다는 것이다. 이럴 경우 데이터의 일관성이 사라지게 된다.
피어-투-피어
피어 투 피어 구조는 마스터를 두지 않고 모든 노드가 마스터이자 슬레이브가 되는 방법이다. 모든 복제본의 가중치는 똑같고, 읽기/쓰기 작업 역시 모든 노드가 서로 동기화 되며 실행된다. 그러나 역시 이 방식도 마스터-슬레이브 처럼 데이터 일관성을 해치는 경우가 발생한다. 서로 다른 클라이언트에서 서로 다른 노드의 같은 데이터에 읽기/쓰기 작업을 하는 경우가 될 것이다.
샤딩(sharding)
샤딩은 각 노드마다 다른 데이터를 놓는다. 즉, A데이터는 1번 노드에, B데이터는 2번 노드에 두는 형식으로 다른 데이터에 접근한다면 다른 노드에 접근하게 되는 것이다. 어떻게 보면 읽기 작업의 부하를 줄이는 방식이기도 하다. 그러나 이는 이상적인 방식이다. 접근해야 할 데이터가 서로 다른 노드에 있다면 각 노드에 접근해야 하는 것은 똑같다. 좋은 방법은 논리적으로 같이 접근해야할 것 같은 데이터는 하나의 노드에 두는 것이다. 함께 접근되는 빈도가 높은 데이터를 모으는 것이다.
'컴퓨터 과학 > 분산 시스템 및 빅데이터' 카테고리의 다른 글
HBase TTL (0) | 2020.10.20 |
---|---|
consensus algorithms (0) | 2020.01.31 |
[Zookeeper] 주키퍼를 통한 리더 선출 (0) | 2019.10.09 |
주키퍼 (Zookeeper) 살펴보기 (0) | 2019.09.22 |
Split Brain 이란? (0) | 2019.09.22 |