728x90
반응형

Sharding

 

- 단일의 데이터를 다수의 데이터 베이스로 쪼개어 나누는 것을 의미

 

- 단일의 데이터 베이스에서 저장하기 너무 클 때 사용

 

- 데이터를 구간별로 쪼개어 나눔으로써 노드에 무겁게 가지고 있던 데이터를 빠르게 검증할 수 있어 빠른 트랜잭션 속드를 가질 수 있게 됨

 

- 샤드란 샤딩을 통해 나누어진 블록들의 구간을 샤드라 함 (각각의 샤드는 데이터의 복사본이 아니라 데이터 그 자체)

 

- Elasticsearch는 분산 데이터베이스(분산 검색엔진)이기때문에 이렇게 데이터를 나누어 저장하는 방식으로 대용량 데이터에 대한 분산처리를 가능하게 함

 

 

 

 

샤딩의 종류

 

네트워크 샤딩

 

- 임의로 네트워크가 무작위로 노드를 샘플링하여 블록 단위로 샤드를 형성

 

- 하지만 네트워크가 샤드의 구성원에 대한 동의를 구하지 않아 구성원들이 원하는 방향으로 가지 않는 경우, 구성원들의 불만을 해결하지 못하는 단점을 가지고 있음

 

 

트랜잭션 샤딩

 

- 트랙잭션 해시의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랙잭션의 유효성을 확인

 

- 하지만 사용자가 악의적인 경우 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있음

 

- 또한 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로간에 통신이 필요 (통신 비용 발생)

 

 

스테이트 샤딩

 

- Account-Based Model로 상태가 지정된 블록체인에서 이 특정 샤드는 상태의 일부만을 유지

 

- 하지만 교차분할 트랜잭션을 수행하지 못하도록 제한이 되어 있음

 

- 또한 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 이상 오프라인 샤드에 대한 트랙재션의 유효성을 검사하지 못함

 

- 오프라인 샤드를 유지하기 위해 백업 노드를 갖게된다면 중앙집중식이 되어 보안성에 위협

 

- 네트워크가 한 번씩 재편성될 때 한번에 네트워크를 전환하게 되면 일부 동기화가 완료될때 까지 전체 시스템을 사용할 수 없게 될 수도 있음

 

 

 

샤딩의 문제점

 

- 중앙화의 문제와 보안성의 문제를 가지게 됨

 

- 보안의 문제는 1% Attack의 문제가 생길 수 있음

 

- 100개의 샤드 시스템에서는 오직 1%의 Hash Rate로 샤드를 지배할 수 있음

 

- 샤드간의 커뮤니케이션이 너무 빈번하게 일어난다면 커뮤니케이션으로 인한 지연시간의 문제가 발생

 

 

 

샤드와 파티셔닝의 차이 (트랜잭션 샤딩)

 

- 파티셔닝이란 퍼포먼스(Performance), 가용성(Availability), 또는 정비용이성(Maintainability)를 목적으로 논리적인 데이터 엘리먼트들을 다수의 엔티티(Table)로 쪼개는 행위를 의미

 

 

샤딩

 

- 수평 파티셔닝과 동일

 

- 데이터 베이스를 샤딩하게되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고 각각의 샤드에 어떤 데이터가 저장될지를 샤드키를 기준으로 분리

 

- 예를 들어 0~10번 고객의 정보는 하나의 샤드에 저장하고 11~20번 고객의 정보는 다른 샤드에 저장하고 하였을때 DBA는 데이터 엑세스 패턴과 저장 공간 이슈(로드의 적절한 분산, 데이터의 균등한 저장)를 고려하여 적절한 샤드키를 결정

 

 

 

파티셔닝

 

- 수직 파티셔닝과 동일

 

- 하나의 엔티티에 저장된 데이터들을 다수의 엔티티들로 분리하는 것을 의미

 

- 예를 들어 한 고객은 하나의 청구 주소를 가지고 있을 수 있는데 DBA는 데이터의 유연성을 위해 다른 데이터베이스로 정보를 이동하거나 보안의 이슈등을 이유로 Customerld를 참조하도록 하고 청구 주소 정보를 다른 테이블로 분리할 수 있음 (퍼포먼스나 공간적인 이유로 인해)

 

 

 

정리

 

- 파티셔닝은 퍼포먼스, 가용성, 정비용이성등의 목적을 위해 논리적인 엔티티들을 다른 물리적인 엔티티들로 나누는 것을 의미

 

- 수평 파티셔닝 또는 샤딩은 스키마 복제 후 샤드키를 기준으로 데이터키를 나누는 것을 의미 

 

- 수직 파티셔닝은 스키마를 나누고 데이터가 따라 옮겨가는 것을 의미

 

 

 

Replica

 

- 또 다른 형태의 샤드

 

- Elasticsearch에서 Replica의 기본값은 1인데 이때 값이 1이라는 것은 Primary Shard가 1개라는 것을 의미하지 않고 Primary Shard와 동일한 복제복이 1개 있다는 것을 의미

 

- Replica의 개수는 Primary Shard를 제외한 복제본의 개수

 

- Replica가 필요한 이유는 검색성능과 장애복구

 

 

 

참조 URL

 

https://medium.com/@sobly/%EC%83%A4%EB%94%A9%EC%9D%B4%EB%9E%80-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%B4%EB%B3%B4%EC%9E%90-7732bcbe0bb8

http://theeye.pe.kr/archives/1917

https://brownbears.tistory.com/4

반응형

'Other' 카테고리의 다른 글

Git  (0) 2019.04.09
Gradle  (0) 2019.04.09
Memcached  (0) 2019.04.09
Redis  (0) 2019.04.09
AAA Protocol  (0) 2019.04.09

+ Recent posts