728x90
데이터베이스 샤딩
- 대규모 데이터베이스를 여러 머신에 저장하는 프로세스이다.
- 단일 머신 또는 데이터베이스 서버는 제한된 양의 데이터만 저장하고 처리할 수 있다. 데이터베이스 샤딩은 데이터를 샤드라고 하는 더 작은 청크로 분할하고 여러 데이터베이스 서버에 저장함으로써 이러한 한계를 극복한다.
- 모든 데이터베이스 서버의 기본 기술은 일반적으로 동일하며 함께 작동하여 대량의 데이터를 저장하고 처리한다.
샤딩
- 분할된 데이터 청크를 논리적 샤드라고 한다. 논리적 샤드를 저장하는 시스템을 물리적 샤드 또는 데이터베이스 노드라고 한다. 하나의 물리적 샤드는 여러 개의 논리적 샤드를 포함할 수 있다.
샤드 키
- 소프트웨어 개발자는 샤드 키를 사용하여 데이터 세트를 분할하는 방법을 결정한다.
- 데이터 세트의 열은 함께 그룹화되어 샤드를 구성하게 될 데이터 행을 결정한다.
- 데이터베이스 설계자는 기존 열에서 샤드 키를 선택하거나 새 샤드 키를 만든다.
비공유 아키텍처
- 데이터베이스 샤딩은 비공유 아키텍처를 기반으로 작동한다.
- 각 물리적 샤드는 독립적으로 작동하여 다른 샤드를 인식하지 못한다.
- 요청한 데이터가 들어 있는 물리적 샤드만 해당 데이터를 병렬로 처리한다.
- 소프트웨어 계층은 이러한 여러 샤드에서의 데이터 저장 및 액세스를 조율한다. 예를 들어 일부 유형의 데이터베이스 기술에는 자동 샤딩 기능이 내장되어 있다. 소프트웨어 개발자가 올바른 샤드에서 정보를 저장하거나 검색하는 샤딩 코드를 애플리케이션에 작성할 수도 있다.
중요한 이유
- 애플리케이션이 성장함에 따라 애플리케이션 사용자 수와 애플리케이션에 저장되는 데이터의 양도 시간이 길수록 증가한다.
- 데이터 볼륨이 너무 커지고 애플리케이션을 사용하여 동시에 정보를 읽거나 저장하려고 하는 사용자가 너무 많아지면 데이터베이스에서 병목 현상이 발생한다. 이로인해 애플리케이션 속도가 느려지고 고객 경험에 영향을 미치게 된다. 이에 대한 솔루션의 하나로, 여러 샤드에서 더 작은 데이터 세트를 병렬로 처리하는 데이터베이스 샤딩을 사용하면 이 문제를 해결할 수 있다.
이점
응답 시간 개선
- 대규모의 단일 데이터베이스에서는 데이터를 검색하는 데 시간이 오래 걸린다. 데이터베이스 관리 시스템은 올바른 데이터를 찾기 위해 여러 행을 검색해야 한다.
- 그에 비해 데이터 샤드는 전체 데이터베이스보다 행 수가 적다. 따라서 샤딩된 데이터베이스에서는 특정 정보를 검색하거나 쿼리를 실행하는 데 걸리는 시간이 단축된다.
전체 서비스 중단 방지
- 데이터베이스를 호스팅하는 컴퓨터에서 장애가 발생하면 데이터베이스를 사용하는 애플리케이션에서도 오류가 발생한다.
- 데이터베이스 샤딩은 데이터베이스의 일부를 다른 컴퓨터에 배포함으로써 이 같은 문제를 방지한다. 컴퓨터 중 하나에서 장애가 발생하더라도 정상 작동하는 다른 샤드를 사용하여 작동할 수 있으므로 애플리케이션이 중단되지 않는다.
- 또한, 샤딩은 샤드 간 데이터 복자와 함께 사용되는 경우가 많다. 즉, 샤드 중 하나를 사용할 수 없게 되더라도 대체 샤드에서 데이터에 액세스하고 복원할 수 있다.
효율적인 크기 조정
- 데이터베이스가 확장되면 더 많은 컴퓨팅 리소스를 소비하고 결국 스토리지의 최대 용량에 도달하게 된다. 이 경우 조직은 데이터베이스 샤딩을 사용하여 더 많은 컴퓨팅 리소스를 추가함으로써 데이터베이스의 확장을 지원할 수 있다.
- 유지 관리를 위해 애플리케이션을 종료하지 않고도 런타임에 새 샤드를 추가할 수 있다.
샤딩 방법
범위 기반 샤딩
- 범위 기반 샤딩 또는 동적 샤딩은 값의 범위에 따라 데이터베이스 행을 분할한다. 그러면 데이터베이스 설계자가 각 범위에 샤드 키를 할당한다.
- 장점
- 구현의 이점이 있다.
- 단점
- 데이터 값에 따라 단일 물리적 노드에서 데이터가 오버로드될 수 있다.
해시 샤딩
- 해시 함수라는 수학 공식을 사용하여 데이터베이스의 각 행에 샤드 키를 할당한다.
- 해시 함수는 행에서 정보를 가져와 해시 값을 산출한다.
- 애플리케이션은 이 해시 값을 샤드 키로 사용하고 해당하는 물리적 샤드에 정보를 저장한다.
- 소프트웨어 개발자는 해시 샤딩을 사용하여 데이터베이스의 정보를 여러 샤드 간에 고르게 분산할 수 있다.
- 장점
- 물리적 샤드 간 데이터를 고르게 분산한다.
- 단점
- 정보의 의미에 따라 데이터베이스를 분할하지는 않기 때문에 소프트웨어 개발자가 컴퓨팅 환경에 물리적 샤드를 더 추가할 때 해시 값을 재할당하는 데 어려움을 겪을 수 있다.
디렉터리 샤딩
- 조회 테이블을 사용하여 데이터베이스 정보를 해당하는 물리적 샤드와 매칭한다.
- 조회 테이블은 데이터베이스 열을 샤드 키에 연결하는 스프레드시트의 테이블과 같다.
- 장점
- 유연성이 좋다. 각 샤드는 데이터베이스의 의미 있는 표현이며 범위에 의해 제한되지 않는다.
- 단점
- 조회 테이블에 잘못된 정보가 포함되어 있으면 디렉터리 샤딩이 실패한다.
지리적 샤딩
- 지리적 위치에 따라 데이터베이스 정보를 분할하고 저장한다.
- 장점
- 샤드와 요청하는 고객 간의 거리가 짧아 애플리케이션이 정보를 더 빠르게 검색할 수 있다.
- 데이터 액세스 패턴이 주로 지리적 위치를 기반으로 하는 경우 이 기법이 효과적이다.
- 단점
- 데이터가 고르지 않게 분산될 수 있다.
고른 데이터 분산을 위해 최적화하는 방법
- 다른 샤드의 로드가 낮은데 특정 물리적 샤드에서만 데이터 오버로드가 발생하면, 해당 샤드는 데이터베이스 핫스팟이 된다. 핫스팟이 발생하면 데이터베이스의 검색 프로세스 속도가 저하되므로 데이터 샤딩의 의미가 사라진다.
- 샤드 키를 적절히 선택하면 여러 샤드에 데이터를 고르게 분산할 수 있다. 데이터베이스 설계자는 샤드 키를 선택할 때 다음 요소를 고려해야 한다.
카디널리티
- 카디널리티는 샤드 키의 가능한 값을 설명한다.
- 별도의 열 지향 데이터베이스에 따라 가능한 최대 샤드 수를 결정한다. 예를 들어 데이터베이스 설계자가 예/아니요 값을 가지는 데이터 필드를 샤드 키로 선택할 경우 샤드 수는 2개로 제한된다.
빈도
- 특정 샤드에 특정 정보가 저장될 확률이다.
단순 변화
- 샤드 키의 변화율이다.
- 샤드 키가 단순 증가하거나 단순 감소하면 샤드의 균형이 맞지 않게 된다.
문제점
데이터 핫스팟
- 데이터 분포가 고르지 않아 일부 샤드가 불균형하게 된다. 예를 들어 A로 시작하는 고객 이름을 포함하는 단일 물리적 샤드는 다른 샤드보다 많은 데이터를 수신한다. 따라서 이 물리적 샤드는 다른 샤드보다 더 많은 컴퓨팅 리소스를 사용한다.
운영 복잡성
- 데이터베이스 샤딩은 운영의 복잡성을 유발한다. 개발자가 단일 데이터베이스를 관리하는 것이 아니라 여러 데이터베이스 노드를 관리해야 한다. 정보를 검색할 떄 개발자는 여러 샤드를 쿼리하고 정보를 결합해야 한다. 이러한 검색 작업은 분석을 복잡하게 만들 수 있다.
인프라 비용
- 조직에서 물리적 샤드로 추가하는 컴퓨터가 많을수록 인프라 비용이 더 많이 발생한다. 온프레미스 데이터 센터의 시스템 수를 늘리면 유지 관리 비용이 가중될 수 있다.
애플리케이션 복잡성
- 대부분의 데이터베이스 관리 시스템에는 샤딩 기능이 내장되어 있지 않다. 따라서 데이터베이스 설계자와 소프트웨어 개발자가 데이터베이스를 수동으로 분할하고 분산하고 관리해야 한다.
728x90
'Dev' 카테고리의 다른 글
젠킨스(Jenkins) (0) | 2024.08.09 |
---|---|
오토스케일링(AutoScaling) (0) | 2024.08.08 |
배치 파일과 도스 명령어 (0) | 2024.08.05 |
RedMine (0) | 2024.07.23 |
SVN(Subversion) (1) | 2024.07.22 |