기술스택을 쌓아보자/데이터 엔지니어링
데이터 중심 애플리케이션 설계 - 파티셔닝
소리331
2023. 4. 24. 08:30
반응형
파티셔닝
- 샤딩 : 데이터를 파티션으로 쪼갤 필요가 있다.
- 파티션 : region, tablet, vnode, vbucket 처럼 서비스마다 쓰이는 용어가 다양하다.
- 데이터 단위가 하나의 파티션에 속한다.
- 파티셔닝을 원하는 주된 이유는 확장성이다. ⇒ 분산하여 질의 부하를 감소시킴
- 트랜잭션 기반인지, 분석 기반인지에 따라 시스템을 튜닝하는 방법은 다르지만, 기본적으로 둘ㄷ ㅏ파티셔닝의 원칙이 적용된다.
파티셔닝과 복제
- 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러노드에 적용한다.
- 한 노드에 여러 파티션을 저장할 수도 있다.
- 각 파티션마다 리더파티션이 있는 구조
키-값 데이터 파티셔닝
- 파티셔닝의 목적은 질의부하를 노드사이에 고르게 분산시키는 것이다.
- Skewed: 파티셔닝이 고르게 이루어지지 않아 질의 요청이 왜곡된 경우
- 핫스팟: 불균형하게 부하가 높은 파티션
- 해결하려면 레코드를 할당할 노드를 무작위로 선택하는 것인데, 단점은 어느 노드에 저장되었는지 알 수 없으므로 모든 노드에서 병렬적으로 질의를 해결해야한다.
- 단순히 키-값 데이터 모델을 사용하는 것도 방법이다.
- 핫스팟: 불균형하게 부하가 높은 파티션
키 범위 기준 파티셔닝
- 연속된 범위의 키를 할당하는 것이다.
- 데이터가 고르게 분포하지 않을 수 있으므로 반드시 키 범위 크기가 동일할 필요는 없다.
- 각 파티션 내에는 키를 정렬된 순서로 저장할 수 있다.
- 특정 접근 패턴이 핫스팟을 유발할 수있다.
- 키를 적절한 기준으로 잘 설정하는 것이 중요하다.
키의 해시값 기준 파티셔닝
- 쏠림과 핫스팟을 해결하기 위해 해시 함수를 사용하는 경우도 있다.
- 균일하게 분산되게 하는 것이다.
- 암호적으로 강력할 필요는 없다.
- 일관성 해싱이라고 부르기도 한다.
- 질의는 효율적으로 분산할 수 있으나, 범위 질의를 효율적으로 실행할 수 있는 능력을 잃어버릴 수도 있다.
- 이때 여러 칼럼을 포함하는 복합기본키를 지정하는것도 방법이다.(연속된 색인)
쏠린 작업부하와 핫스팟 완화
- 앞의 것 또한 핫스팟을 ㅇ롼전히 해결할 수 없다. (누군가 똑같은 것을 계속 요청한다면?)
- 어플에 따른 트레이드 오프를 꼼꼼히 따져볼 필요가 있다.
파티셔닝과 보조색인
- 보조색인: 보통 레코드 식별이 아닌 특정한 값을 검색하는 수단이다.
- 엘라스틱 서치 같은 검색서버에게는 존재의 이유이다.
문서 기준 보조 색인 파티셔닝
- 파티션에 속하는 문서만 담당한다. 각 파티션이 완전히 독립적으로 동작한다.
- 문서 파티셔닝 색인은 전역색인 혹은 지역색인이라고도한다(global index, local index)
- 문서를 기준으로 해당 값의 위치를 찾는 것
- 주의점: 동일한 색인값을 가진 문서가 동일한 파티션에 저장된다는 보장이 없다. 모든 파티션으로 질의를 보내서 얻은 결과를 모두 모아야 한다.
- 이런식으로 질의하는 것을 scatter/gather라고 한다.
용어 기준 보조 색인 파티셔닝
- 파티션별 색인도 만들고, 모든 파티션의 데이터를 담당하는 전역색인을 생성할 수 잇다.
- 색인도 파티셔닝해야한다.
- 용어 기준으로 파티셔닝 되었다 (color red)
- 용어: 문서에 등장하는 모든 단어를 의미한다.
- 여기서도 용어 자체 혹은 용어의 해시값을 사용할 수 있다.
- 문서파티셔닝에 비해 전역색인은 읽기가 효율적이다. 원하는 용어를 포함하는 파티션으로만 요청을 보내면 되기 때문이다.
- 다만 쓰기가 느리고 복잡하다는 단점이 있다.
파티션 재균형화
- Rebalancing: 인프라를 변경해야하는 상황이 된다면 데이터와 요청이 한노드에서 다른 노드로 옮겨져야한다. 한 노드가 담당하던 부하를 다른 노드로 옮기는 과정을 재균형화 한다고 한다.
재균형화 전략
쓰면 안되는 방법: 해시값에 모드 n 연산을 실행
- 파티션을 생성할때 범위값을 기준으로 하되, 이때 mod(나누기)를 쓰지 않는 이유는 무엇일까?
- 문제는 노드 개수가 바뀌면 경계의 키가 노드를 옮겨야하기때문이다.
- 데이터를 필요이상으로 이동한다.
파티션 개수 고정
- 파티션을 노드 대수보다 많이 만들고 각 노드에 여러파티션을 할당하는 것이다.
- 클러스터에 노드가 추가되면 파티션 몇개를 기존 노드에서 뺏어올 수 있다.
- 파티션만 통째로 이동한다.
- 전체 데이터셋의 크기변동이 심하다면 적절한 파티션 개수를 정하기 어렵다.
동적 파티셔닝
- 파티션 데이터 개수가 전체 용량에 맞추어 조정된다는 이점이 있다.
- 그러나 파티션 경계를 어디로 정해야하는지에 관한 사전정보가 없으므로 시작할 때에는 파티션이 하나라는 함정이 있다.
노드 비례 파티셔닝
- 노드당 할당되는 파티션 개수를 고정한다.
운영: 자동 재균형화와 수동 재균형화
- 자동? Or 수동? 이의 중간지점이 있다. 예를 들면 시스템이 할당을 제안하고, 이를 반영하려면 관리자가 확정해야하는 것이 그 예시이다.
- 자동은 유지보수가 손이 덜 가므로 편리할 수 있다. 하지만 예측하기 어렵다.
- 장애감지 시스템과 조합되면 위험해질 수도 있다.
요청 라우팅
- 여태까지는 나누기에 대한 내용이었는데, 이를 어느 노드로 접속해야하는지 어떻게 알 수 있을까?
- 일반적 문제인 서비스 찾기의 일종이다.
병렬 질의 실행
- 분석용으로 자주 사용되는 대규모 병렬처리
반응형