본문 바로가기
기술스택을 쌓아보자/데이터 엔지니어링

데이터 중심 애플리케이션 설계 - 파티셔닝

by 소리331 2023. 4. 24.
반응형

파티셔닝

  • 샤딩 : 데이터를 파티션으로 쪼갤 필요가 있다.
    • 파티션 : region, tablet, vnode, vbucket 처럼 서비스마다 쓰이는 용어가 다양하다.
  • 데이터 단위가 하나의 파티션에 속한다.
  • 파티셔닝을 원하는 주된 이유는 확장성이다. ⇒ 분산하여 질의 부하를 감소시킴
  • 트랜잭션 기반인지, 분석 기반인지에 따라 시스템을 튜닝하는 방법은 다르지만, 기본적으로 둘ㄷ ㅏ파티셔닝의 원칙이 적용된다.

파티셔닝과 복제

  • 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러노드에 적용한다.
  • 한 노드에 여러 파티션을 저장할 수도 있다.
    • 각 파티션마다 리더파티션이 있는 구조

키-값 데이터 파티셔닝

  • 파티셔닝의 목적은 질의부하를 노드사이에 고르게 분산시키는 것이다.
  • Skewed: 파티셔닝이 고르게 이루어지지 않아 질의 요청이 왜곡된 경우
    • 핫스팟: 불균형하게 부하가 높은 파티션
      • 해결하려면 레코드를 할당할 노드를 무작위로 선택하는 것인데, 단점은 어느 노드에 저장되었는지 알 수 없으므로 모든 노드에서 병렬적으로 질의를 해결해야한다.
      • 단순히 키-값 데이터 모델을 사용하는 것도 방법이다.

키 범위 기준 파티셔닝

  • 연속된 범위의 키를 할당하는 것이다.
  • 데이터가 고르게 분포하지 않을 수 있으므로 반드시 키 범위 크기가 동일할 필요는 없다.
  • 각 파티션 내에는 키를 정렬된 순서로 저장할 수 있다.
  • 특정 접근 패턴이 핫스팟을 유발할 수있다.
    • 키를 적절한 기준으로 잘 설정하는 것이 중요하다.

키의 해시값 기준 파티셔닝

  • 쏠림과 핫스팟을 해결하기 위해 해시 함수를 사용하는 경우도 있다.
  • 균일하게 분산되게 하는 것이다.
  • 암호적으로 강력할 필요는 없다.
  • 일관성 해싱이라고 부르기도 한다.
  • 질의는 효율적으로 분산할 수 있으나, 범위 질의를 효율적으로 실행할 수 있는 능력을 잃어버릴 수도 있다.
  • 이때 여러 칼럼을 포함하는 복합기본키를 지정하는것도 방법이다.(연속된 색인)

쏠린 작업부하와 핫스팟 완화

  • 앞의 것 또한 핫스팟을 ㅇ롼전히 해결할 수 없다. (누군가 똑같은 것을 계속 요청한다면?)
  • 어플에 따른 트레이드 오프를 꼼꼼히 따져볼 필요가 있다.

파티셔닝과 보조색인

  • 보조색인: 보통 레코드 식별이 아닌 특정한 값을 검색하는 수단이다.
  • 엘라스틱 서치 같은 검색서버에게는 존재의 이유이다.

문서 기준 보조 색인 파티셔닝

  • 파티션에 속하는 문서만 담당한다. 각 파티션이 완전히 독립적으로 동작한다.
  • 문서 파티셔닝 색인은 전역색인 혹은 지역색인이라고도한다(global index, local index)
  • 문서를 기준으로 해당 값의 위치를 찾는 것
  • 주의점: 동일한 색인값을 가진 문서가 동일한 파티션에 저장된다는 보장이 없다. 모든 파티션으로 질의를 보내서 얻은 결과를 모두 모아야 한다.
    • 이런식으로 질의하는 것을 scatter/gather라고 한다.

용어 기준 보조 색인 파티셔닝

  • 파티션별 색인도 만들고, 모든 파티션의 데이터를 담당하는 전역색인을 생성할 수 잇다.
  • 색인도 파티셔닝해야한다.
  • 용어 기준으로 파티셔닝 되었다 (color red)
  • 용어: 문서에 등장하는 모든 단어를 의미한다.
  • 여기서도 용어 자체 혹은 용어의 해시값을 사용할 수 있다.
  • 문서파티셔닝에 비해 전역색인은 읽기가 효율적이다. 원하는 용어를 포함하는 파티션으로만 요청을 보내면 되기 때문이다.
  • 다만 쓰기가 느리고 복잡하다는 단점이 있다.

파티션 재균형화

  • Rebalancing: 인프라를 변경해야하는 상황이 된다면 데이터와 요청이 한노드에서 다른 노드로 옮겨져야한다. 한 노드가 담당하던 부하를 다른 노드로 옮기는 과정을 재균형화 한다고 한다.

재균형화 전략

쓰면 안되는 방법: 해시값에 모드 n 연산을 실행

  • 파티션을 생성할때 범위값을 기준으로 하되, 이때 mod(나누기)를 쓰지 않는 이유는 무엇일까?
  • 문제는 노드 개수가 바뀌면 경계의 키가 노드를 옮겨야하기때문이다.
  • 데이터를 필요이상으로 이동한다.

파티션 개수 고정

  • 파티션을 노드 대수보다 많이 만들고 각 노드에 여러파티션을 할당하는 것이다.
  • 클러스터에 노드가 추가되면 파티션 몇개를 기존 노드에서 뺏어올 수 있다.
  • 파티션만 통째로 이동한다.
  • 전체 데이터셋의 크기변동이 심하다면 적절한 파티션 개수를 정하기 어렵다.

동적 파티셔닝

  • 파티션 데이터 개수가 전체 용량에 맞추어 조정된다는 이점이 있다.
  • 그러나 파티션 경계를 어디로 정해야하는지에 관한 사전정보가 없으므로 시작할 때에는 파티션이 하나라는 함정이 있다.

노드 비례 파티셔닝

  • 노드당 할당되는 파티션 개수를 고정한다.

운영: 자동 재균형화와 수동 재균형화

  • 자동? Or 수동? 이의 중간지점이 있다. 예를 들면 시스템이 할당을 제안하고, 이를 반영하려면 관리자가 확정해야하는 것이 그 예시이다.
  • 자동은 유지보수가 손이 덜 가므로 편리할 수 있다. 하지만 예측하기 어렵다.
  • 장애감지 시스템과 조합되면 위험해질 수도 있다.

요청 라우팅

  • 여태까지는 나누기에 대한 내용이었는데, 이를 어느 노드로 접속해야하는지 어떻게 알 수 있을까?
  • 일반적 문제인 서비스 찾기의 일종이다.

병렬 질의 실행

  • 분석용으로 자주 사용되는 대규모 병렬처리
반응형

댓글