✨ Clustering
여러 개의 DB 서버를 수평적인 구조로 구축하는 방식이다.
Clustering 방식에는 다음과 같은 것들이 있다.
Active-Active
- 서버의 중단 없이 서비스 제공 가능
- Storage 공유하기 때문에 병목이 생길 수 있음
- 여러 대의 서버가 운영되기 때문에 CPU 와 메모리 이용률이 올라갈 수 있음
Active-Standby
- Active 서버에 문제가 생길 경우 Standby 서버가 Active 서버로 전환하는 상태로 운영이 됨
- Stand By 전환 시 시간이 오래 걸릴 수 있다.
- Active-Active 방식에 비해 비용 절감이 가능하다.
✨ Replication
여러 개의 DB를 수직적인 구조(Primary-Secondary) 로 구축하는 방식이다. DB 서버 뿐 아니라 DB storage 도 여러개 만드는 방식이다.
Primary 는 쓰기 작업만을 처리, Secondary 는 Read 용도로만 사용해서 부하를 분산시키기도 한다.
장점으로는
- DB 요청의 대부분이 Read 이기 때문에 성능 상 이점이 있다.
- 비동기 방식으로 운영되어 지연 시간이 거의 없다.
단점으로는
- 노드들 간의 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다는 것이다.
- Primary 노드가 다운되면 복구 및 대처가 까다롭다.
✨ Sharding
테이블에 데이터 자체가 엄청나게 많을 경우, 위 Replication 에서 구성한 Slave DB가 N대가 되더라도 원하는 데이터를 테이블로부터 찾는데 많은 시간이 소요될 수 있다. 그때 필요한 게 Sharding 이다. 데이터를 어떻게 잘 분산해서 저장할까에 대한 개념이다.
샤딩은 수평 파티셔닝의 특수한 형태이다. 테이블을 Row 로 나눠서 Shard 로 분배한 것이다.
샤딩은 여러 서버에 스키마가 복제된다. 데이터는 Shard Key 를 기준으로 여러 노드들에 나누어 저장된다.
Shard Key 알고리즘에 따라 여러 Sharding 이 있을 수 있다.
1. Hash Sharding
- 구현 자체가 간단하다.
- DB 서버가 추가 될 경우 해시 함수가 변경되어야 하므로 기존에 저장되던 데이터들의 정합성이 깨지게 됨 -> 확장성이 떨어짐
- 공간에 대한 효율성 고려가 안 됨
2. Dynamic Sharding
- 위 Hash Sharding 에서 확장성 해결하기 위해 나옴
- Locator Service 사용
(Location Service 는 테이블 형식의 데이터를 바탕으로 샤드를 결정해서 적절히 저장하는 방식을 말한다.)
- 해시 샤딩과 달리 단순 키만 추가해주면 되기 때문에 확장성이 쉽다.
- Locator Service 에 종속적이기 때문에 Locator Service 에 문제가 생기면 나머지 샤드 또한 문제가 발생한다.
(Single Point Of Failure)
3. Entity Group
- 1번과 2번 방식은 nosql 에 좀 더 적합한 샤딩 방식
- Entity Group 의 경우 Rdbms 에 적합
- 관계가 되어 있는 entity 끼리 같은 샤드 내에 공유하도록 만드는 방식
- user 가 작성한 post, comment 같은 샤드 내에 위치하도록 함
- 다른 샤드내에 데이터 조회할 경우 데이터 조회 성능이 떨어질 수 있음
'Data > DB' 카테고리의 다른 글
[DB] MongoDB 에 대해 알아보자 | LIM (0) | 2023.03.26 |
---|---|
[DB] Dirty Read, Non-Repeatable Read, Phantom Read 예시 및 Snapshot Isolation Level | LIM (1) | 2023.02.17 |
[DB] DML, DDL, DCL | LIM (0) | 2023.02.12 |
Apache Druid 정의와 장단점 및 ES 와의 비교 | LIM (0) | 2022.12.30 |
[DATABASE] OLAP vs OLTP | LIM (0) | 2022.12.25 |
댓글