ݺߣ

ݺߣShare a Scribd company logo
Dropbox 와 같은 서비스는 어떻게 데이터를
저장할까?
경희대학교 동아리 ‘해커’
조성수
분산 스토리지의 원리와 이해
Dropbox 와 같은 서비스는 어떻게 데이터를
저장할까?
경희대학교 동아리 ‘해커’
조성수
분산 스토리지의 원리와 이해
뭘 말하고 싶은지 모르는 이상한 내용
발표자 소개
• 경희대학교 컴퓨터공학과 3학년 재학
• A2Company 인턴
• 관심분야 : Backend, Cloud System
• Openstack Swift 서비스 구축 프로젝트 참가
• nexusz99 (at) gmail.com
오늘 이야기할 내용
• 클라우드 서비스란?
• 클라우드(분산환경)에서의 중요 개념
• Consistent Hash Ring
• CAP 이론
• 분산 스토리지의 종류
• Openstack Swift
클라우드랶?
클라우드랶?
클라우드랶?
클라우드란 정확히 무엇일까?
클라우드랶?
수도 서비스에 비유해보겠습니다
클라우드랶?
과거의 수도시설은 우물이나 집마다 있는 펌프
클라우드랶?
물을 퍼올리기 위한 모든 장치를 ‘개인’이 해결해야한다
클라우드랶?
하지만 수도시설이 만들어지고 난 뒤부터는 집에 수도만
연결하고 고민없이 사용하면 된다
클라우드랶?
물이 ‘서비스’화 되었다
클라우드랶?
그럼 클라우드로 다시 넘어가서, 클라우드랶?
클라우드랶?
개인 혹은 기업이 소유하고 관리했던 컴퓨팅자원을 누군가가 ‘서비스’로
제공해주게 되었고, 우리는 서비스를 이용하여 그 자원을 사용한다.
서비스가 어떻게 이루어지는지 우리는 신경쓸 필요 없다. 서비스 내부는 구름넘어
저편으로..
클라우드 서비스의 형태
https://cloudcelebrity.wordpress.com/2011/11/22/introduction-to-cloud-services-iaas-paas-saas/
대표적인 클라우드의 종류
클라우드 스토리지란?
클라우드 스토리지의 기본
분산환경
분산환경의 특징
• 사용자의 요청이 어느 서버로 갈 지 모른다.
• 사용자의 데이터가 어느 서버에 저장되어 있는지 모른다.
• 서버들이 물리적으로 분산되어 있다.
• 하지만, 클라우드는 어느 서버로 요청을 보낼 것인지, 데이터가
어디에 저장되어 있는지 알아야한다
분산환경
수 십 / 수 백대의 서버 중 어느 서버에 데이터를 저장할 것인지
어떻게 결정할까?
Consistent Hash Ring
Consistent Hash Ring
여러 대의 서버가 있을 때, 데이터를 어느 서버에 저장해야할 지
혹은 요청을 어느 서버로 보내야하는지 결정하는 알고리즘
Consistent Hash Ring
Consistent Hash Ring
Hash Ring 위에 서버들을 배치한다
Consistent Hash Ring
데이터가 오면, 그 데이터의 해시값을 구한 뒤 시계방향으로 가까운 서버에
배치한다
Consistent Hash Ring
만약 새로운 서버가 배치되면, 동일 데이터가 배치되는 서버가
달라진다
Consistent Hash Ring
만약 새로운 서버가 배치되면, 동일 데이터가 배치되는 서버가
달라진다
Consistent Hash Ring
앞에서 설명한 모델은 매우 단순한 형태
분산 서비스마다 Consistent Hash Ring 을 구현한 방식이 각기
다르다.
Consistent Hash Ring 의 사용 예
• Ring 을 클라이언트가 가지고 있는 경우
1.1.1.1 2.2.2.2 3.3.3.3
client
1.1.1.1
2.2.2.2
3.3.3.3
Server Cluster
Consistent Hash Ring 의 사용 예
• Proxy 가지고 있는 경우
1.1.1.1 2.2.2.2 3.3.3.3
client
1.1.1.1
2.2.2.2
3.3.3.3
Server Cluster
proxy
Consistent Hash Ring
좀 더 공부하고 싶고 구현이 궁금하다면 memcached 를 써보고
분석해보시는 것을 추천
CAP 이론
• 분산 시스템의 주요한 3가지 요소에 대한 설명
CAP 이론
• Consistency ( 일관성 )
• 데이터는 항상 일관성을 유지해야한다.
• 모든 관찰자는 같은 시간에 같은 데이터를 봐야한다.
• Availability (가용성)
• 모든 요청은 성공/실패든 상관없이 항상 응답을 받아야한다.
• 죽으면 안된다.
• Partition Tolerance ( 장애 대응 )
• 네트워크 장애와 같은 상황에서도 시스템은 서비스를 할 수
있어야한다.
CAP 이론
CAP 이론 – 참고자료
• http://www.mimul.com/pebble/default/2012/07/03/1341276
539423.html.
• https://embian.wordpress.com/2013/06/27/nosql-2/
분산 스토리지의 종류
• HDFS , NoSQL(Cassandra, MongoDB..)
• OwFS (네이버 자체 개발)
• “네이버는 어떻게 수천 테라바이트의 데이터를 저장할까?”
• http://deview.naver.com/files/2010/B1.pdf
• Openstack Swift (Object Storage)
• Ceph (https://ceph.com)
Openstack Swift
Openstack Swift 자료 구조
http://www.ixiacom.com/about-us/news-events/corporate-blog/swift-openstack-swift
Openstack Swift
X 4
X 6
Daemon
Openstack Swift
Proxy-Server
Account Server
Container Server
Object Server
A/C/O Server
A/C/O Server
A/C/O Server
Ring
Openstack Swift
Proxy-Server
Daemon
Daemon
Daemon
Openstack Swift
Python
Openstack Swift 특징
• 모든 서버가 HTTP를 제공한다. 그리고 서버/클라이언트 통신
간에 REST API를 제공한다.
• 모든 데이터는 URL로 표현할 수 있다.
• /account/container/object
• 예 : /User_nxz/testcontainer/test.txt
• REST API 예)
• Request : PUT /User_nxz/testcontainer/test.txt
• Response : 201 Created
Openstack Swift
Proxy-Server
Daemon
Daemon
Daemon
Ring
Openstack Swift – Ring
• Ring을 구성하는 요소 : Zone, 서버IP, port, hdd No,
partition
https://julien.danjou.info/blog/2012/openstack-swift-consistency-analysis
Openstack Swift - Ring
• URL로 표현된 데이터를 Ring에 넣고 조회하면 해당 데이터가
저장된 서버 IP, port, hdd, partition 등의 정보를 얻을 수 있다.
• Ring 은 총 3가지로, Account / Container / Object 별로
나뉘어진다.
Openstack Swift Architecture
http://www.slideshare.net/HuiCheng2/kt-ucloud-storage-by-jaesuk-ahn
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
Ring에서 서버 조회
3개의 서버 정보가 나옴
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
3대에 서버에 모두
파일을 업로드
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
3대 모두 OK가 오면
모든 서버에 데이터가
안전하게
복제되어 저장되어 있다
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
만약 한대가 장애가 나서
저장을 못했더라도
일정 수 이상의 서버에저
저장되었으므로
데이터는 안전하다
(quorum)
quorum = (전체 복제 수 / 2) +
1
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
장애가 났던 서버가
나중에 살아나면 데몬이
알아서 데이터를 다시
복제해준다.
Daemon
Daemon
Daemon
Openstack Swift – CAP 이론
• Swift는 Consistency 를 100% 보장하지 않는다.
• 대신 가용성(A)와 장애 대응(P)를 보장해준다.
• C를 희생하고, AP를 가져간다. 하지만 언젠간 C가 보장된다.
• Openstack Swift는 Eventually Consistent 플랫폼이다.
• 아마존 S3도 동일 모델
Openstack Swift – Object 다운로드
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
3대에 서버에 모두
파일다운로드 요청
Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
가장 먼저 응답을 하는
서버의 데이터를
클라이언트에게
반환한다
Openstack Swift 사용하기
• 우선 서버가 총 10대.
• A/C/O 서버를 한 대로 구성하더라도 총 4대 서버 필요.
• VM 4개를 띄워도 됩니다. 그리고 구축을 합니다.
Openstack Swift 사용하기
Openstack Swift 사용해보기
One Click, Install Openstack
Openstack Swift 사용해보기
git clone https://git.openstack.org/openstack-dev/devstack
1. devstack 스크립트를 다운로드 받는다.
2. swift 관련 간단한 설정을 해준다.
3. 스크립트를 실행한다
cd devstack; ./stack.sh
Openstack Swift 사용해보기
SWIFT
최소 2core, 2GB VM 으로 간단하게 swift 환경 구축
클라우드 시스템은 어떻게 개발하나요?
• 정말 제대로 개발하려면, 거대한 스케일의 분산 환경을
구축해야한다
• 하지만 돈이 없도 없고 분산 환경을 물리적으로 구축하면, 재
구축에 너무 많은 시간이 들어간다.
• 쉽고 빠르게 분산 환경을 만들어야한다.
클라우드 시스템은 어떻게 개발하나요?
• 가상환경 ( Vagrant ) Virtual Machine
• 설치 자동화 ( chef, puppet 등.. )
• 여러대 VM 으로 분산환경을 구성하고, 설치 자동화를 통해
우리가 개발한 클라우드 시스템을 자동으로 설치하도록 한다.
클라우드 시스템 개발 환경
• 경험상 대부분 터미널에서 VIM 으로 작업
• IDE로도 개발을 하기도 한다.
• 하지만 VIM
• Openstack 은 Devstack 이라는 개발환경을 제공
클라우드 시스템은 어떻게 디버깅하나요?
• 분산 환경에서는 디버거를 붙여서 하기가 어렵다.
• 서버가 수~~십대니까
• 디버거를 붙여야한다면 1개 서버만 띄워서 로직을 확인한다.
• 분산 환경에서의 디버깅은 CONSOLE LOG !!
클라우드 시스템은 어떻게 디버깅하나요?
클라우드 시스템은 어떻게 개발하나요?
http://www.soscon.net/download/day28/ST3/F_28_1400_조성수.pdf
클라우드 시스템은 어떻게 개발하나요?
http://onoffmix.com/event/57240
클라우드 시스템은 어떻게 개발하나요?
http://onoffmix.com/event/57240
Thank you!

More Related Content

Dropbox와 같은 시스템은 파일을 어떻게 저장할까?