드랍박스, nDrive 등과 같은 클라우드 스토리지 서비스들은 데이터를 어떻게 저장하는지에 대한 이론적 내용과 실제 구현 내용을 살펴봅니다. 이 발표에서는 OpenStack 의 swift라는 Object Storage 를 이용하여 이론이 어떻게 구현되어있는지 알아봅니다.
1 of 70
Downloaded 70 times
More Related Content
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
1. Dropbox 와 같은 서비스는 어떻게 데이터를
저장할까?
경희대학교 동아리 ‘해커’
조성수
분산 스토리지의 원리와 이해
2. Dropbox 와 같은 서비스는 어떻게 데이터를
저장할까?
경희대학교 동아리 ‘해커’
조성수
분산 스토리지의 원리와 이해
뭘 말하고 싶은지 모르는 이상한 내용
3. 발표자 소개
• 경희대학교 컴퓨터공학과 3학년 재학
• A2Company 인턴
• 관심분야 : Backend, Cloud System
• Openstack Swift 서비스 구축 프로젝트 참가
• nexusz99 (at) gmail.com
4. 오늘 이야기할 내용
• 클라우드 서비스란?
• 클라우드(분산환경)에서의 중요 개념
• Consistent Hash Ring
• CAP 이론
• 분산 스토리지의 종류
• Openstack Swift
33. CAP 이론
• Consistency ( 일관성 )
• 데이터는 항상 일관성을 유지해야한다.
• 모든 관찰자는 같은 시간에 같은 데이터를 봐야한다.
• Availability (가용성)
• 모든 요청은 성공/실패든 상관없이 항상 응답을 받아야한다.
• 죽으면 안된다.
• Partition Tolerance ( 장애 대응 )
• 네트워크 장애와 같은 상황에서도 시스템은 서비스를 할 수
있어야한다.
35. CAP 이론 – 참고자료
• http://www.mimul.com/pebble/default/2012/07/03/1341276
539423.html.
• https://embian.wordpress.com/2013/06/27/nosql-2/
36. 분산 스토리지의 종류
• HDFS , NoSQL(Cassandra, MongoDB..)
• OwFS (네이버 자체 개발)
• “네이버는 어떻게 수천 테라바이트의 데이터를 저장할까?”
• http://deview.naver.com/files/2010/B1.pdf
• Openstack Swift (Object Storage)
• Ceph (https://ceph.com)
43. 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
45. Openstack Swift – Ring
• Ring을 구성하는 요소 : Zone, 서버IP, port, hdd No,
partition
https://julien.danjou.info/blog/2012/openstack-swift-consistency-analysis
46. Openstack Swift - Ring
• URL로 표현된 데이터를 Ring에 넣고 조회하면 해당 데이터가
저장된 서버 IP, port, hdd, partition 등의 정보를 얻을 수 있다.
• Ring 은 총 3가지로, Account / Container / Object 별로
나뉘어진다.
48. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
49. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
Ring에서 서버 조회
3개의 서버 정보가 나옴
50. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
3대에 서버에 모두
파일을 업로드
51. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
3대 모두 OK가 오면
모든 서버에 데이터가
안전하게
복제되어 저장되어 있다
52. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
만약 한대가 장애가 나서
저장을 못했더라도
일정 수 이상의 서버에저
저장되었으므로
데이터는 안전하다
(quorum)
quorum = (전체 복제 수 / 2) +
1
53. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
장애가 났던 서버가
나중에 살아나면 데몬이
알아서 데이터를 다시
복제해준다.
Daemon
Daemon
Daemon
54. Openstack Swift – CAP 이론
• Swift는 Consistency 를 100% 보장하지 않는다.
• 대신 가용성(A)와 장애 대응(P)를 보장해준다.
• C를 희생하고, AP를 가져간다. 하지만 언젠간 C가 보장된다.
• Openstack Swift는 Eventually Consistent 플랫폼이다.
• 아마존 S3도 동일 모델
55. Openstack Swift – Object 다운로드
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
3대에 서버에 모두
파일다운로드 요청
56. Openstack Swift – Object 저장
Proxy-Server
Ring
Object Server
Object Server
Object Server
Replicate : 3EA
Object Server
Object Server
가장 먼저 응답을 하는
서버의 데이터를
클라이언트에게
반환한다
57. Openstack Swift 사용하기
• 우선 서버가 총 10대.
• A/C/O 서버를 한 대로 구성하더라도 총 4대 서버 필요.
• VM 4개를 띄워도 됩니다. 그리고 구축을 합니다.
60. Openstack Swift 사용해보기
git clone https://git.openstack.org/openstack-dev/devstack
1. devstack 스크립트를 다운로드 받는다.
2. swift 관련 간단한 설정을 해준다.
3. 스크립트를 실행한다
cd devstack; ./stack.sh
62. 클라우드 시스템은 어떻게 개발하나요?
• 정말 제대로 개발하려면, 거대한 스케일의 분산 환경을
구축해야한다
• 하지만 돈이 없도 없고 분산 환경을 물리적으로 구축하면, 재
구축에 너무 많은 시간이 들어간다.
• 쉽고 빠르게 분산 환경을 만들어야한다.
63. 클라우드 시스템은 어떻게 개발하나요?
• 가상환경 ( Vagrant ) Virtual Machine
• 설치 자동화 ( chef, puppet 등.. )
• 여러대 VM 으로 분산환경을 구성하고, 설치 자동화를 통해
우리가 개발한 클라우드 시스템을 자동으로 설치하도록 한다.
64. 클라우드 시스템 개발 환경
• 경험상 대부분 터미널에서 VIM 으로 작업
• IDE로도 개발을 하기도 한다.
• 하지만 VIM
• Openstack 은 Devstack 이라는 개발환경을 제공
65. 클라우드 시스템은 어떻게 디버깅하나요?
• 분산 환경에서는 디버거를 붙여서 하기가 어렵다.
• 서버가 수~~십대니까
• 디버거를 붙여야한다면 1개 서버만 띄워서 로직을 확인한다.
• 분산 환경에서의 디버깅은 CONSOLE LOG !!