[IN01-01] Erasure Coding란?
2021-04-30 작성중
개요 : Erasure Coding (EC)
Minio를 공부하며 나오는 개념중에 "Erasure Code" 단어를 접하게 되는데. 이에 대한 내용을 참고하고자 정리한다.
Erasure Coding ( 이하 EC )란? 데이터를 특수한 알고리즘( * EC코덱 )으로 인코딩 하여 복제, 이후 데이터 손실이 발생하였을 때 이를 디코딩하여 원본 데이터를 복구하는 기법이다.
자세한 수행 단계는 다음과 같다.
1) 원본 데이터를 N개의 데이터로 분할 (데이터셀)
2) 분할된 데이터를 이용하여 EC코덱 알고리즘으로 K개의 검증 데이터를 생성(페리티셀)
3) 데이터셀 또는 페리티셀의 손상이 발생될 경우 서로 디코딩(대조,검증)을 통한 데이터 복구
위와 같은 단계를 통해 N개(데이터셀) 중 일부 데이터 손상이 최대 K개(페리티셀)를 넘지 않으면, K개의 페리티 셀을 통해 데이터 복구가 가능하다. 반대로 K개 페리티셀 중 일부 데이터가 손상되어도 N개의 데이터셀이 정상일 경우 페리티셀을 복구 할 수 있다.
예시
아래의 이미지는 원본 데이터를 이용하여 1~16까지의 데이터셀을 생성하고, 이에대한 8개의 페리티 셀을 EC를 통해 인코딩한 상황이다. 즉 데이터에 대한 50% 손상까지 복구가 가능하도록 대비한 내용이다.
Erasure Coding 과 RAID의 차이
EC와 RAID는 동일한 측면이 있으나 세부적으로 보았을 때 차이점이 확실하다.
대표적인 차이점은 다음과 같습니다.
Parity 생성을 위한 Overhead 차이
RAID 6의 경우 사용 가능한 용량은 " [총 디스크 용량] - [페리티 용량] = [실제사용가능 용량]" 을 쓸 수 있습니다.
예로 5개의 디스크 사용시, 디스크 2개분의 용량이 페리티 기록(더블 페리티)으로 사용됩니다.
이로 인한 가용 공간이 적어지며, 페리티 기록 작업으로 성능저하가 발생할 수 있습니다.
추가적으로 디스크 장애 발생 시, RAID 재구축 및 복구를 위한 많은 시간이 소요될 수 있습니다.
Erasure Coding의 경우 생성하고자 하는 페리티 데이터 개수를 지정할 수 있으므로 복구를 위한 페리티 기록 용량을
절약할 수 있습니다. 또한 RAID와 같이 Disk Array 재구축 작업이 필요하지 않으므로 복구 작업시간을 절약할 수 있습니다.
대표적인 EC 형태는 "Half Code"라고하여 데이터의 50% 정도를 인코딩하여 페리티로 기록합니다.
Parity 보존 위치의 차이
RAID는 보존위치가 Disk Array 내에 존재해야 하지만 Erasure Coding의 경우 페리티 기록은 어디서나 저장 할 수 있습니다.
이에 필요한 경우 가져와 데이터 손상 복구에 사용할 수 있습니다.
위와 같은 내용을 비교하였을때 "Erasure Coding"은 다음과 같은 상황에서 많은 장점으로 고려될 수 있습니다.
- 대규모 용량 데이터를 전체 백업하기에는 시간이 부족하거나 어려운 경우
- 복구를 위한 페리티 기록 공간을 별도로 보존하고자 하는 경우
정리하며
Erasure Coding은 데이터 손상을 복구하기 위한 방법으로 많은 이점을 가지고 있으나, 해당 방식은 복구를 위한 방법이지 "백업"을 대체하기위한 방법으로 생각해서는 안된다.
이점을 정확히 구분하여 주의해야한다는 것을 간과하지 말아야 한다.
마지막으로 Erasure Coding은 데이터 보호를 위한 도구로 많은 이점이 있다는 것은 알 수 있다.
* MinIO의 Object Storage 데이터 복구 방안으로 "Erasure Coding"이 사용된다.
공부하며 작성한 부분으로 부족한 부분이 있다면 댓글 남겨주세요. 댓글을 통해 참고하여 추가 또는 수정할 생각입니다.