"알고리즘 샤딩"의 두 판 사이의 차이
54번째 줄: | 54번째 줄: | ||
|align=center|2 | |align=center|2 | ||
|} | |} | ||
+ | : 5개의 서버 (0-4) 클러스터를 가지고 있고 서버 4를 서비스에서 제외시키는 경우를 알 수 있으며, 요청은 나머지 4대의 서버로 완전히 재분배 되고, 노드 변경시 일관성을 제공하는 두 가지 알고리즘이다. | ||
+ | |||
+ | * '''조회 링 알고리즘''' | ||
+ | : 서버 노드 수보다 훨씬 많은 양의 요소가있는 배열을 사용하여 링을 형성한다. 설명을 위해 5개의 노드에 25개의 슬롯을 사용하지만 실제 비율은 훨씬 높아야하고, 정확한 수는 시뮬레이션을 실행하여 확인할 수 있다. 그런 다음 서버 노드 번호를이 배열에 무작위로 배치하여, 정상 모드에서 로드를 균등하게 분배하려면 링을 채우는 알고리즘이 모든 노드가 슬롯의 동일한 점유율을 갖도록해야한다. | ||
+ | :{|class=wikitable width=600 | ||
+ | |+ | ||
+ | |align=center|0 | ||
+ | |align=center|1 | ||
+ | |align=center|2 | ||
+ | |align=center|3 | ||
+ | |align=center|4 | ||
+ | |align=center|5 | ||
+ | |align=center|6 | ||
+ | |align=center|7 | ||
+ | |align=center|8 | ||
+ | |align=center|9 | ||
+ | |align=center|10 | ||
+ | |align=center|11 | ||
+ | |align=center|12 | ||
+ | |align=center|13 | ||
+ | |align=center|14 | ||
+ | |align=center|15 | ||
+ | |align=center|16 | ||
+ | |align=center|17 | ||
+ | |align=center|18 | ||
+ | |align=center|19 | ||
+ | |align=center|20 | ||
+ | |align=center|21 | ||
+ | |align=center|22 | ||
+ | |align=center|23 | ||
+ | |align=center|24 | ||
+ | |- | ||
+ | |align=center|3 | ||
+ | |align=center|1 | ||
+ | |align=center|4 | ||
+ | |align=center|2 | ||
+ | |align=center|0 | ||
+ | |align=center|3 | ||
+ | |align=center|0 | ||
+ | |align=center|2 | ||
+ | |align=center|4 | ||
+ | |align=center|1 | ||
+ | |align=center|2 | ||
+ | |align=center|3 | ||
+ | |align=center|4 | ||
+ | |align=center|0 | ||
+ | |align=center|1 | ||
+ | |align=center|3 | ||
+ | |align=center|2 | ||
+ | |align=center|1 | ||
+ | |align=center|0 | ||
+ | |align=center|4 | ||
+ | |align=center|3 | ||
+ | |align=center|1 | ||
+ | |align=center|4 | ||
+ | |align=center|0 | ||
+ | |align=center|2 | ||
+ | |} | ||
+ | |||
+ | |||
+ | |||
2019년 9월 17일 (화) 19:34 판
알고리즘 샤딩(Algorithm Sharding)은 데이터베이스 아이디를 단순하게 나누어 샤딩하는 방식이다.
개요
특징
샤딩을 분류하는 한 가지 방법은 알고리즘 대동 적이다. 알고리즘 샤딩에서 클라이언트는 도움 없이 주어진 파티션의 데이터베이스를 결정할 수 있고, 동적 샤딩에서 별도의 로케이터 서비스는 노드 간의 파티션을 추적한다. 알고리즘 샤딩 데이터베이스는 샤딩 기능 (partition_key)-> database_id를 사용하여 데이터를 찾고, 간단한 샤딩 함수는 일 수 있다. 파티션 키가 제공되는 한 단일 데이터베이스 내에서 읽기가 수행되어, 파티션 키가 없는 쿼리는 모든 데이터베이스 노드를 검색해야 하며, 파티션되지 않은 쿼리는 클러스터 크기와 관련하여 확장되지 않음으로 사용하지 않는 것이 좋다. 알고리즘 샤딩은 샤딩 기능만으로 데이터를 배포하여, 페이로드 크기 또는 공간 활용도는 고려하지 않는다. 데이터를 균일하게 분배하려면 각 파티션의 크기가 비슷해야 하고, 세분화 된 파티션은 핫스팟을 줄이며, 단일 데이터베이스에는 많은 파티션이 포함되어, 데이터베이스 간의 데이터 합계는 통계적으로 비슷할 것이다. 이러한 이유로 알고리즘 샤딩은 값이 같은 키-값 데이터베이스에 적합하며, 데이터 리 샤딩은 어려울 수 있다. 샤딩 기능을 업데이트하고 클러스터에서 데이터를 이동해야 하기 때문에 일관성과 가용성을 유지하면서 동시에 두 가지를 모두 수행하는 것은 어렵다. 샤딩 기능을 영리하게 선택하면 전송되는 데이터의 양을 줄일 수 있어, 일관된 해싱은 이러한 알고리즘이다. 시스템의 예로는, 맴케시드(mem cached)가 있다. 맴케시드는 자체적으로 샤딩 되지 않지만, 클라이언트 라이브러리가 클러스터 내에서 데이터를 분배할 것으로 예상되며, 이러한 논리는 응용 프로그램 수준에서 구현하기가 매우 쉽다.[1]
- 장점
- 같은 값을 가지는 key-value 데이터베이스에 적합하다.
- 단점
- 클러스터를 포함하는 노드 갯수가 변하게 되면 리샤딩(Resharding)이 필요하며, 해시 키로 분산되기 때문에 공간에 대한 효율이 부족하다.
- 샤딩 알고리즘
- 클러스터의 서버 수가 일정한 경우 모든 서버에 균일하고 일관되게 트래픽을 분산시키는 것은 어렵지 않으나 실제 환경에서는 유지 관리를 위해 항상 서버를 사용하지 않아야 하며, 좋은 샤딩 알고리즘의 과제는 요청의 완전한 재배포를 피하는 것이다. 아래 표는 간단한 모듈 식 알고리즘을 사용하며, 서비스중인 서버 수로 나누고 키를 나누어, 나머지는 요청을받는 서버이다.
키 396562 673665 115181 650428 804339 394035 280572 108093 938266 125314 5 노드 2 0 1 3 4 0 2 3 1 4 4 노드 2 1 1 0 3 3 0 1 2 2
- 5개의 서버 (0-4) 클러스터를 가지고 있고 서버 4를 서비스에서 제외시키는 경우를 알 수 있으며, 요청은 나머지 4대의 서버로 완전히 재분배 되고, 노드 변경시 일관성을 제공하는 두 가지 알고리즘이다.
- 조회 링 알고리즘
- 서버 노드 수보다 훨씬 많은 양의 요소가있는 배열을 사용하여 링을 형성한다. 설명을 위해 5개의 노드에 25개의 슬롯을 사용하지만 실제 비율은 훨씬 높아야하고, 정확한 수는 시뮬레이션을 실행하여 확인할 수 있다. 그런 다음 서버 노드 번호를이 배열에 무작위로 배치하여, 정상 모드에서 로드를 균등하게 분배하려면 링을 채우는 알고리즘이 모든 노드가 슬롯의 동일한 점유율을 갖도록해야한다.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 3 1 4 2 0 3 0 2 4 1 2 3 4 0 1 3 2 1 0 4 3 1 4 0 2
활용
블록 플로우
기본 크로스 샤드 트랜잭션을 지원하는 새로운 샤딩 프로토콜은, 크로스 샤드 TX에 2단계 커밋이 필요하지 않으며, 이를 블록 플로우라고한다. 일반적인 알고리즘 샤딩 이지만 이더 리움에 적용될 수 있다. 블록 플로우에서는 먼저 샤드 주소를 그룹으로 분할한 다음 입력 주소 및 출력 주소를 기반으로 모든 트랜잭션을 샤드로 분배한다. 샤드 는 그룹 에서 그룹 까지의 트랜잭션으로 구성되어 있다고 가정하면, 그룹 의 경우 샤드 및 의 트랜잭션만 다운로드하면되므로 총 샤드 대신 샤드가 필요하며, 확장성에 이바지한다. 그룹 에서 그룹 로의 트랜잭션은 샤드 에 직접 제출되며, 이는 2단계 커밋을 피하는 첫 번째 방법이다. 특정 데이터 구조 + 최종 알고리즘을 사용하여 모든 샤드에 대한 합의에 도달하여, 데이터 구조 덕분에 알고리즘은 1% 공격 대신 51% 공격을 받는다. 이 샤딩 알고리즘을 사용하는 비용은 샤드 종속성을 저장하는 새로운 데이터 구조를 위해 추가 스토리지가 필요하며 비용은 블록당 약 이고, 수퍼 노드는 필요하지 않지만 풀 노드는 각 그룹당 하나의 노드로 구성되어 완전한 원장을 구성한다. 또한 스마트 계약 확장을 위한 혁신적인 기능으로, 현명한 계약을 토큰 부분과 데이터 부분으로 분해한 다음 토큰 수준 프로그래밍을 위한 스크립팅 언어를 제공하면, 데이터 부분에 내장된 VM 언어를 원하지 않기 때문에 실질적인 절충안이다.
시스템에는 샤드가 있으며 는 주소 그룹의 수이고, 각 주소 그룹마다 샤드가 있어, 이 설정에서 크로스 샤드 트랜잭션은 그룹 간 트랜잭션이 된다. 토큰 기반 접근 방식과 같은 상태 기반이 아닌 UTXOs + 데이터를 확장하는 것이 주정부 계약을 확장하기보다 훨씬 쉽다는 것을 알았으므로 처음에 결정적인 디자인 절충안이었다. 애플리케이션은 UTXO와 함께 데이터 블록을 사용하여 상태를 가질 수 있어, 일부 응용 프로그램은 기존 블록체인과 거의 동일한 샤드 를 고수 할 수도 있고, 응용 프로그램의 일반성을 잃어버렸지만 훨씬 간단한 확장 가능한 솔루션이다. 종속성은 방향성 비순환 그래프를 형성하며, DAG는 각 샤드의 포크를 결정하는 데 사용되고, 예를 들어 최신 블록 는 최신 블록 를 종속성으로 사용하고 최신 블록 는 최신 블록 를 종속성으로 사용한다. 이 두 개의 최신 블록 를 동시에 만들 수 있으나 최신 블록 에 대한 종속성으로 함께 사용될 수 있다. 블록 시간은 다른 샤드에 대해 약간 무작위이므로 가능한 한 많은 블록을 포함하기 위해 다른 행의 최신 블록을 사용하고, 예를 들어, 개의 개별 노드에 분산된 전체 수퍼 체인에 대한 견해를 결정해, 종속성 구성은 뷰가 올바른지 확인한다.[2]
각주
- ↑ 김재영, 〈샤딩 작동 방식〉, 《미디엄》, 2014-12-06
- ↑ 청왕, 〈BlockFlow : 단일 단계 크로스 샤드 트랜잭션으로 새로운 샤딩 알고리즘 소개〉, 《EthResearch》, 2019-02-18
참고자료
- DevBlog, 〈(Databases) Database Sharding(샤딩)이란?〉, 《티스토리》, 2019-01-29
- 청왕, 〈BlockFlow : 단일 단계 크로스 샤드 트랜잭션으로 새로운 샤딩 알고리즘 소개〉, 《EthResearch》, 2019-02-18
- 김재영, 〈샤딩 작동 방식〉, 《미디엄》, 2014-12-06
같이 보기