Clustering
한 번에 데이터베이스 서버를 여러 개 두어 서버 한 대가 죽었을 때 대비할 수 있는 분산 기법 중에 하나 입니다.
서버의 부하를 나눠서 감당하므로 CPU, Memory 등 관리 차원에서도 효율적으로 운영 할 수 있습니다.
구성 방법으로는 Active-Active, Active-Standby로 나누어 집니다.
Active-Active
Cluster를 구성하는 Component를 동시에 가동합니다.
데이터베이스 서버를 여러 대 한꺼번에 운영하므로 비용이 추가적으로 발생 됩니다.
Active-Standby
Cluster를 구성하는 Component 중 실제로 가동하는 것은 Active, 남은 것은 Standby합니다.
서버가 다운되었을 때 Standby 상태의 서버를 Active 상태로 전환 하는데 일부 지연 시간이 발생 합니다.
두 방식은 Storage를 서로 공유하기 때문에 병목현상이 발생 할 수 있으며,
다중화도 하지 않는 공통적인 단점을 가지고 있습니다.
Replication
Clustering의 단점인 단일 Storage에 대해 DB서버와 저장소를 세트로 구성하는 방식으로
여러 개의 DB를 수직적인 구조, 즉 Master, Slave로 구축하는 방식입니다.
Master와 Slave를 읽기와 쓰기라는 역할로 각기 배분하여 부하가 많이 발생하는 부분을 분리해 분산 처리 합니다.
데이터 무결성을 위해 동기적으로 처리되는거 같지만 비동기 방식으로 진행되어 지연 속도를 최소화 합니다.
다만 데이터가 많아지면 Slave를 늘려도 시간이 다수 소요되며 데이터 동기화에 의해서 스케일링에 한계가 존재한다는 단점을 가지고 있습니다.
Sharding
같은 테이블의 데이터를 특정 기준으로 나눠서 저장 및 검색하는 방법을 의미 합니다.
데이터 세트를 단일 데이터베이스만으로 저장하기에 너무 큰 경우 Sharding 방식을 활용합니다.
Shard key라고 알려진 key를 기준으로 데이터가 나뉘며 알고리즘에 따라 아래와 같이 구분됩니다.
Hash Sharding
Shard의 수 만큼 Hash 함수를 사용해 나온 결과에 따라 DB 서버에 저장하는 방식으로 구현이 매우 간단하다는 장점이 있습니다.
다만 확장성이 낮아 데이터베이스 서버가 추가 될 경우 Hash 함수가 변경되어야 하므로 기존에 저장되던 데이터의 정합성이 깨지게 된다는 단점이 있습니다.
Dynamic Sharding
Locator Service를 통해 테이블 형식의 데이터를 바탕으로 Shard를 결정해 적절히 저장하는 방식을 말합니다.
Hash Sharding 방식과 달리 단순히 키만 추가해주면 되므로 확장에 유연한 구조입니다.
Locator Service에 장애가 발생하면 나머지 Shard 또한 문제가 발생하게 된다는 단점이 있습니다.
Entity Group
Entity Group은 위의 Hash Sharding과 Dynamic Sharding의 Key-Value 형태를 지원하기 위해 나온 방법으로 연관성이 있는 Entity를 한 Shard에 두는 방식입니다.
같은 Shard에 있는 데이터를 조회할 때는 효과적이지만, 다른 Shard에 있는 데이터를 함께 조회할 때는 오히려 성능이 떨어지는 단점이 있습니다.
앞서 말씀 드린 Hash Sharding과 Dynamic Sharding 방식은 NoSQL에 최적화가 되어 있는 반면, 이 방식은 RDB에 최적화되어 이와 잘 어울리는 방식 입니다.
Hierarchical keys & Column-Oriented Databases
Column-oriented 데이터베이스에 대해 먼저 설명하자면,
기존의 Relational DBMS는 Row형으로 데이터를 저장하는 Row-Oriented 방식으로서 Row-Value 데이터를 연속적으로 저장하는 방식입니다.
반대로 Column-oriented 데이터베이스는 Column 방식으로 저장하면서 모든 Column들을 개별적인 데이터로 저장하기 때문에 압축에도 높은 효율을 얻을 수 있습니다.
계층적 Primary key로 행과 열이 쌍으로 존재하고, Primary key를 바탕으로 Shard로 분할되어 구성됩니다.
특정 데이터 집합의 연산이 필요한 경우 추가 메모리 소모 없이도 결과를 도출할 수 있으며, 이에 따라 성능이 크게 향상된다는 장점이 있습니다.
반대로 다수의 특정 위치의 Column을 조회하는 상황에서는 비효율적 입니다.
마치며
이렇게 데이터베이스 서버의 Multiplexing 관련하여 여러가지 기술의 특장점을 살펴 보았습니다.
데이터베이스의 관리에 있어 기본이면서 중요한 부분이다 보니 많은 분들이 이 글을 통해 조금이나마 도움이 되셨으면 좋겠습니다.
감사합니다.