다빈치 SW 공모전

'언택트 시대에 유용한 앱 혹은 서비스를 주제로한 SW 공모전으로
2020-2학기 비공학 전공 재학생 2인 이상이면 참가 가능합니다.

자세히 알아보기

캡스톤 디자인 경진대회

캡스톤 디자인 교과목 수행 결과물 또는 졸업 작품 심사
2019년 2학기, 2020년 1학기 중 한 학기 이상 캡스톤 디자인 교과목을
수강한 학생만 참가 가능합니다.

자세히 알아보기

PE연구활동 발표대회

PE연구/개발 활동을 수행하면서 얻어진 다양한 형태의 결과물
(논문형태의 결과보고서, 논문, 발명품, 작품, 콘텐츠 등)을 심사

자세히 알아보기

SW·AI 창업아이디어경진대회

SW 관련 전공 학부생 여러분!
반짝이는 SW창업 아이디어로 여러분의 미래를 바꾸십시오!

자세히 알아보기

SW·AI융합우수성과 발표회

SW융합전공 / 복수 전공 학생 여러분!
SW융합전공 / 복수전공을 이수하는 과정에서 얻어진 성과를 뽐내 주세요.

자세히 알아보기

다빈치 주니어 SW 작품대회

창의적인 아이디어와 소프트웨어를 활용한
멋진 SW 작품을 만들어 보세요!

자세히 알아보기

다빈치오픈소스 SW·AI 딥러닝 해커톤

4차 산업혁명을 견인하는 심층학습을 주제로한 SW·AI 딥러닝 해커톤으로
소프트웨어대학 재학생으로 구성된 2인 이하 팀으로 참가 가능합니다.

자세히 알아보기

코딩경진대회

소프트웨어 중심 대학으로서 중앙대학교의 소프트웨어 관련
교육 프로그램 성과를 공유합니다.

자세히 알아보기

PE연구활동 발표대회

  • 컴퓨터시스템연구실

    등록자
    박상현 (소프트웨어학부 | 3학년)

작품사진

  • 참여 목적 및 참여 당시 활동 목표
  • Ceph는 오브젝트 기반의 분산 스토리지로 Ceph cluster는 오브젝트를 저장하는 데이터 저장소인 OSD, Ceph cluster 내 연결을 확인하고 저장된 데이터를 관리하는 Ceph Monitor, 와 MDS(Metadata Server)로 구성되어 있다. 이러한 분산 스토리지에 데이터를 저장할 때 일반적으로 데이터 사본을 3개 만들어서 저장한다. 만약 이러한 조치 없이 저장한다면, OSD에 저장된 데이터가 정상 또는 오류인지 알 수 없다. 또한 데이터가 저장되어 있는 OSD가 고장 났을 때 OSD가 복구하기 전까지 데이터 복구를 할 수 없으며, 데이터를 사용할 수 없다. 또한, 두 개의 데이터 사본만 생성해 서로 다른 OSD에 저장되어 있을 때 클러스터에서 데이터가 저장된 OSD중 한 OSD에 대한 동기화가 되지 않을 경우 Split brain problem이라는 분산 시스템 내에 저장된 데이터의 무결성을 입증할 수 없는 문제가 발생한다. 따라서 Ceph에서 이러한 문제를 발생하는 것을 막기 위해 데이터 사본을 3개 이상 만들어서 저장하도록 한다. 데이터 사본을 3개 생성해서 저장할 때 3개의 서로 다른 OSD에 저장하기 때문에 데이터 손실에 대한 보호 측면에서 좋으며, 앞서 언급한 상황들을 해결할 수 있다. 하지만 데이터 저장할 때 사본을 3개 만들어서 저장하기 때문에 스토리지를 1/3밖에 활용하지 못한다는 단점이 있다.
    분산 스토리지의 기본 데이터 저장 방식은 이러한 단점이 있기 때문에, 분산 스토리지에 데이터를 저장할 때 발생할 수 있는 문제를 최소화하면서 스토리지 활용도를 높일 수 있는 방법에 대해 탐구하고 싶어서 PE 연구 활동에 참여하게 되었다.
  • 연구 및 학습활동 결과
  • Ceph에서 데이터 사본을 3개 이상 생성해 저장하는 기본 데이터 저장 방식 이외에 Erasure code을 이용해 데이터 저장하는 방식인 Erasure coding이 있다. Erasure coding은 데이터를 조각으로 나누고 이를 통해 패리티 조각을 생성한 다음 분산 스토리지에 저장한다. 이는 RAID5, RAID6에서 데이터 비트에 패리티 비트를 추가해 데이터를 저장한 것과 유사하다. 그래서 Erasure coding을 통해 데이터를 저장하면 Replicated pool을 사용했을 때보다 적은 스토리지를 사용할 수 있으며, 일정량까지의 손실을 복구할 수 있다.
     Ceph에서 Erasure coding을 사용하는 경우 Primary OSD개념이 존재한다. 사용자가 데이터를 Erasure code pool을 저장하면 데이터는 Ceph cluster내 CRUSH 알고리즘을 통해 선택된 OSD들 중 Primary OSD에 전송된다. Primary OSD는 사용자로부터 전달받은 데이터를 Reed-Solomon 기법 또는 Cauchy 기법 등을 이용한 Erasure code 연산을 통해 K개의 데이터 조각과 M개의 패리티 조각을 생성한다. 이후 생성된 조각들을 Primary OSD와 나머지 (K+M -1)개의 OSD에 나누어 저장한다. 사용자가 Erasure coding을 통해 저장된 데이터 읽기를 원할 경우, Primary OSD는 나머지 OSD에 저장된 모든 데이터 조각과 패리티 조각들을 요청한다. 이후 Primary OSD는 데이터 조각들을 합쳐 사용자에게 데이터를 제공한다. 만약 데이터 조각이나 패리티 조각을 저장한 OSD들 중 M개 이하의 OSD가 고장났을 때 사용자가 데이터 읽기를 했을 경우, 나머지 조각들을 이용해 Erasure code 연산을 통해 데이터 복구를 할 수 있으므로, 사용자에게 데이터를 제공할 수 있다.
     
    Erasure coding에서 패리티 조각을 생성하고 복구할 때에는 Reed-solomon, Cauchy등의 기법을 사용한다. Reed-solomon 기법은 데이터 조각들과 Encode matrix의 곱을 통해 패리티 조각을 생성하는 알고리즘이다. 우선 Vandermonde (int rows, int cols) 함수를 통해 그림 1에 있는 Encode matrix를 생성한다. 생성된 Encode matrix와 데이터 조각들의 행렬 곱을 통해 패리티 조각을 생성한다.
     만약 그림 2처럼 Encoded data에서 0행 데이터 조각과 4행 데이터 조각이 OSD 고장으로 인해 손실된 경우에는 그림 3처럼 남아 있는 조각들에 대한 Encode matrix의 역행렬을 만들고, 그림 4처럼 만들어진 역행렬과 나머지 데이터 조각들의 행렬 곱을 하면 손실된 데이터를 구할 수 있다.
     Cauchy 기법은 기존 Reed-Solomon 기법에서 사용되는 Encode matrix 대신 Cauchy matrix 생성 수식을 통해 Cauchy matrix를 생성한다. 그리고 생성된 Cauchy matrix와 데이터 조각들과 행렬 곱 연산대신 XOR 연산을 통해 패리티 조각들을 생성한다. Cauchy 기법은 XOR 연산을 통해 기존 행렬 곱보다 계산이 적기 때문에 Reed-Solomon 보다 더 나은 성능을 보여준다.

    그림1.png
     Erasure coding에서 패리티 조각들의 구성을 정할 수 있는 플러그인이 있다. 주로 사용되는 플러그인은 Jerasure, LRC(Locally Repairable erasure code), SHEC(Shingled Erasure coding)가 있다.
     Jerasure은 Erasure coding의 기본 플러그인으로 쓰이며, 전체 데이터 조각들을 가지고 Reed-solomon, 또는 Cauchy 기법을 사용해 패리티 조각들을 생성한다. 전체 OSD들의 부분집합마다 별도의 패리티 조각을 생성하는 다른 플러그인 비해 패리티 조각을 적게 만들기 때문에 스토리지 활용성은 높은 장점이 있다. 하지만 복구할 때 데이터와 연관된 조각들이 저장되어 있는 전체 OSD를 사용하므로 고장난 OSD와 관련된 조각들이 저장되어 있는 OSD를 사용하는 다른 플러그인에 비해 I/O가 크기 때문에 느린 단점이 있다.

    LRC는 Jerasure 플러그인의 패리티 조각을 생성하는 방법에 더해 전체 OSD들의 부분집합마다 별도의 패리티 조각을 생성한다. 만약 한 부분집합에 속한 OSD가 고장 났을 경우 부분집합에 해당되는 패리티를 참고하므로 데이터 복구할 때 I/O를 줄일 수 있으므로 네트워킹 부하를 줄일 수 있는 장점이 있다.
    SHEC는 L개의 OSD마다 패리티 조각을 생성하도록 해서 LRC플러그인과 비슷하게 복구할 때 I/O를 줄일 수 있다.
    Jerasure, LRC, SHEC 중에서 스토리지를 가장 효율적으로 사용할 수 있는 플러그인은 데이터를 저장할 때 패리티 조각을 가장 적게 만들 수 있는 Jerasure이다. 그리고 OSD 고장이 잦는 환경에서는 LRC또는 SHEC를 이용하면 복구할 때 관련된 조각들만 참고해서 I/O을 줄일 수 있다.
     
    사용자가 설정한 K, M 값과, 패리티 조각을 구성하는 방법을 정하는 Erasure 플러그인, 패리티 조각을 생성하는 기법을 정해 스토리지 활용을 자유롭게 할 수 있었으며, 이를 이용하면 Replicated pool를 이용한 환경보다 스토리지 사용성을 높일 수 있다.

  • 참여 소감 및 향후 계획
  •  학부 과정에서는 접하기 힘든 분산 스토리지라는 주제를 통해 새로운 지식을 접할 수 있었으며, 분산 스토리지에서 기본 데이터 저장방식의 스토리지를 제대로 활용하지 못하는 문제점과 이를 보완하는 Erasure coding에 대해 탐구하면서 학부에서 배우고 있는 운영체제 학습하는데 많은 도움이 되었다. 분산 스토리지에서 스토리지 활용성을 높이는 방법을 탐구를 한 이후, 이를 활용해 Ceph에서 데이터를 편리하게 저장하는 방법에 대해 탐구할 계획이다.
  • 증빙자료

중앙대학교 다빈치 sw tech fair 참가신청 닫기