NoSQL은 수평 확장에 어울린다.
수직 확장
- 단일 서버를 예시로 들자면, 장비 증축 없이 그 서버의 스펙을 늘리는 것이다.
- 확장 시 서비스 종료가 필수적이다.
- 더 많은 비용이 발생한다.
- 한대에서 읽기 쓰기 모두 처리하기 때문에 복잡성이 낮고, 관리도 쉽고..
수평 확장
- 단일 서버에서 서버 갯수를 늘리는 것
- 확장 시 서비스 중단 없이 가능
NoSQL의 분산 방법에는 복제(replication)와 샤딩(sharding)이 있다.
- 복제 : 같은 데이터를 복사해서 여러 노드에 배치(master - slave, peer to peer)
- 샤딩 : 각 노드마다 다른 데이터를 배치
샤딩
- 데이터를 여러 노드에 배치한다.
- 여러명이 각자 다른 데이터를 요청해도 각각의 노드들이 읽기와 쓰기를 처리하니 부하도 적다. (매우 이상적인 가정)
- 노드에 어떻게 데이터들을 분배해야 효율적일까...
1. 물리적인 위치를 고려한다. 어떤 제품이 특정 위치에서 선호도가 높다면, 가까운 데이터 센터에 있는 노드에 놓자
2. 순차적으로 읽힐 데이터들을 함께 두자.
- NoSQL DB에서 제공하는 자동 샤딩을 사용하자. 데이터를 각 샤드에 할당하고 올바른 샤드에 접근하도록 보장해준다.
- DB 설계 시 처음부터 샤딩 선택을 고려하자. 단일 노드에서 시작해 샤딩을 적용하려면 데이터도 옮기고 해야된다...
마스터-슬레이브 복제
- 마스터는 데이터를 분배해주고 업데이트를 처리한다. + 읽기 + 쓰기
- 나머지들은 슬레이브, 읽기 + 쓰기 처리
- 읽기가 많은 형태에서 도움이 많이 된다. 쓰기는 마스터가 혼자 담당하고 슬레이브들한테 읽으라고 시키면 되기 때문
- 읽기 복원력이 좋음 -> 마스터가 실패해도 슬레이브가 읽거나, 슬레이브가 실패해도 마스터가 읽으면 된다.
- 변경 사항이 모든 슬레이브에 전파되기 전에 서로 다른 클라이언트가 서로 다른 슬레이브에서 각각 다른 값을 볼 수 있다.
- 마스터가 단일 실패 지점이 될 수 있음
피어 투 피어
- 모든 노드에서 데이터 읽고 쓰고, 노드 쓰기가 발생하면 노드끼리 데이터를 주고 받음
- 어떤 노드가 뻗어도 다른 노드가 처리하면 되서 가용성이 아주 좋다.
- 하지만 여러 노드에서 동시에 동일한 레코드를 업데이트 하면 쓰기 충돌 위험 발생함
+)
마스터-슬레이브 복제는 업데이트 충돌 발생을 줄임
피어-투-피어 복제는 한 노드에 모든 쓰기 부담을 지우지 않도록 하여 단일 실패 지점이 생기지 않음
샤딩이랑 복제 섞어서 쓸 수 있음
'IT' 카테고리의 다른 글
리눅스 서버에서 파일 시스템 mount / unmount 하기 (0) | 2023.11.03 |
---|---|
문서(document) 데이터베이스 / 대표적인 것은 몽고DB (0) | 2023.10.29 |
Ubuntu ssh 접속 오류 해결(REMOTE HOST IDENTIFICATION HAS CHANGED!) (1) | 2023.09.09 |
37회차 CPPG 합격 수기(초시 합격) (0) | 2022.12.21 |
정보처리기사, 정보처리산업기사 취득 후기 (0) | 2022.08.20 |
댓글