블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 
 

클라우드 컴퓨팅이 IaaS,PaaS,SaaS와 같은 서비스 제공자 입장
Private,Public 클라우드와 같은 사용 대상에 대한 입장에 대한 정의가 이제는 다 이루어졌고, 구축 및 서비스가 성숙해가는 단계에서 근래에 시트릭스에서 3P 라는 클라우드 컨셉을 발표했다.

기존 클라우드가

  • 기업 내부에서 사용하는 Private
  • 기업이 외부 자원을 사용하는 Public 이었다면
  • 여기에 하나 더해서 + Personal Cloud의 개념을 추가하여 발표하였다.


새로운 클라우드 컴퓨팅 개념이라기 보다는 기존에 있었던 형태의 서비스를 조금 관점을 바꿔서 체계화 시킨 것에 불과하지만, 이 체계화 자체가 의미를 갖는다.
Personal Cloud는 기업이 아니라 각각의 개인에게 클라우드 서비스를 제공한다는 개념이다. 즉 클라우드 컴퓨팅이 컴퓨팅 리소스를 서비스로 제공하는 개념인 만큼 개인에게 컴퓨팅 파워를 제공한다는 개념인데, 가장 보편적인 서비스가 Personal Storage Cloud이다. 인터넷을 통해서 스토리지 공간을 개인에게 제공하는 서비스로,
국내에는 네이버 NDrive, 다음 클라우드, KT uCloud, 해외에는 Microsoft SkyDrive, SugarSync, DropBox, Box.net 등이 대표적인 서비스로 꼽힌다.
이 서비스의 특징들은 개인에게 

  1. 스토리지 공간 제공
  2. 파일 동기화 서비스 제공 (슈가싱크, Microsoft의 LiveMesh)

하는 특징을 가지고 있다.
이 서비스들도 서비스 제공업자의 형태에 따라서 여러가지로 나뉘어 질 수 있는데,

1. 순수 스토리지 공간만 제공하는 스토리지 서비스 사업자
이는 슈가 싱크나 DropBox처럼 순수하게 개인에게 스토리지 서비스(+싱크 서비스)를 제공하는 모델

2. 스토리지 공간을 제공하면서 자사의 다른 서비스와 융합 시키는 형태
대규모 벤더가 이에 해당하는데, Microsoft의 SkyDrive는 인터넷 저장 공간으로도 사용을 하지만, Microsoft의 Office와 연동이 되서 문서를 클라우드에 저장하여 다른 디바이스에서도 그 문서를 공유할 수 있도록 해준다.
즉 개인 스토리지 공간을 단순하게 개인에게 파일 저장공간으로만 제공하는 것이 아니라, 자사가 가지고 있는 서비스나 애플리케이션과 융합하여 시너지를 불러내는 형태이다.

3. 스토리지 공간을 타사의 다른 서비스와 융합 시키는 형태
스토리지 공간을 자사의 애플리케이션이 아니라 타사의 애플리케이션과 연동하도록 지원해주는 형태로, Box.NET의 경우 Zoho나 SalesForce.COM과 같은 다른 클라우드 서비스와 연동을 통해서 자사의 스토리지 사용량을 올리는 형태이다.

특이한 iCloud
그 중에서 조금 재미있는 비지니스 모델을 보면 애플의 iCloud 모델을 볼 수 있는데, 애플의 iCloud 모델중에 일반 사용자에게 잘 노출 되지 않는 서비스가 "Document 공유" 라는 서비스 이다. 이 Document 공간은 개인이 사용하는 개별의 애플리케이션이 사용할 수 있는 스토리지 공간으로 예를 들어 메모 애플리케이션이 이 스토리지 공간에 메모를 저장하여 다른 디바이스에서도 접근하여 자신의 디바이스에서는 어디서든지 같은 컨텐츠를 접근할 수 있도록 하는 형태이다.
 기존의 에버노트등이 이미 클라우드를 이용하여 멀티 디바이스간의 컨텐츠 공유를 지원하는데, 이게 모가 새롭냐? 라고 생각할 수 있겠지만 기본적인 비지니스 모델이나 목적 자체가 다르다.
 다른 스토리지 모델이 스토리지 판매를 통해서 수익을 창출하거나 자사의 서비스의 가치를 높이는데 목적을 두는데 반해, iCloud의 Document 서비스는 개발자 생태계를 지원하여 품질 높은 App을 만들 수 있게 해주는데 그 목적을 두고 있다고 판단할 수 있다. 
 이유는 기존에도 에버노트와 같이 다른 클라우드 예를 들어 Azure나 Amazon 클라우드를 이용하여 스토리지를 사용할 수 있었지만, 스토리지 사용에 필요한 비용을 애플리케이션 개발업체가 부담해야 하는 비지니스 모델이었다. 한번 앱을 판매해서 수익을 창출하는 입장에서 매달 들어가는 스토리지 사용비는 당연히 부담이 될 수 밖에 없고 그로 인해서 대규모 서비스나 인기있는 서비스가 아니라면 선뜻 이런 클라우드 스토리지를 사용하기 어려웠다.
 애플이 여기서 사용한 재미있는 트릭은 iCloud는 개인에게 5GB의 스토리지를 무료로 제공한다. 이 스토리지 비용은 단말에 포함이 되어 있는 금액이고 5G 이상을 사용할때는 개인이 사용에 대한 금액을 지불한다. 눈치가 빠른 사람은 이미 이해했겠지만

애플리케이션이 클라우드 저장소를 사용할 때 비용을 개발자가 지불하지 않고 개인에게 전가시킨 모델이다


는 것이다.
클라우드에 대한 사용비용을 절묘하게 사용자에게 전가 시킨 비지니스 모델로, 개발자의 경제적인 부담을 덜어주고
여기에 +해서 iPhone SDK에 이 클라우드 접근 기능을 단순화 하여 탑재해 놓음으로써 관리에 대한 기술적인 진입 장벽을 없앰과 더불어 개발자가 클라우드를 관리해야 하는 수고를 덜어준 것이다.

사실 다른 PIMS와 같은 서비스는 OutLook이나 Google mail, calendar가 있기 때문에 그다지 매력적이지 않다. Photo Stream도 일종의 샘플앱 정도의 개념이고, iCloud의 궁극적인 의미는

 개발자에게 클라우드를 무료로 줘서 애플리케이션 생태계를 윤택하게 함으로써 iOS의 생태계를 발전 시키고 이를 통해서 단말의 매출을 증대화 시키는데 있다.


3P 모델을 설명하다가 목표를 벗어나서 iCloud에 대해서 짚고 넘어갔는데, iCloud에 대한 분석 내용은 나중에 별도로 자세하게 포스팅 하겠다.

요즘 Personal Storage Service를 분석하다보니, Cloud Storage쪽을 많이 보게 되는데,
트렌드가 대부분 S3나 SWIFT같은 Blob Storage를 뒤에 넣고, 중간에 이를 File System으로 바꿔주는 서버 계층을 두고, Client에 마치 NDrive 처럼 Fuse를 이용해서 마운트 하는게 대세다.
CyberDuck같은 오픈 소스를 보면 KT SS나 Amazon S3등을 Storage로 저장해서 파일을 저장할 수 있게 해준다.

요즘 관심이 가는 부분이 이 구조에서 중간에 File System으로 바꿔주는 엔진 부분인데,
De-duplication쪽이 관심이다. 이유인 즉, SWIFT의 경우 데이타 안정성(무결성)을 보장하기 위해서 물리적으로 3Copy를 유지하기 때문에 Storage용량이 많이 소요되고, 이를 줄이는 방법은 De-duplication이 적절하다.

Deduplication이란, 파일을 여러개의 블럭(Chunk)로 나눈후에, 저장시에 나눠서 저장하고, Update될때는 변경된 Block만 저장하는 방식으로 파일이 일부만 변경되거나 여러명이 같은 파일을 사용할 경우 용량 절감 효과를 볼 수 있다.

S3나 SWIFT같은 Object Storage는 하나의 파일을 하나의 Object로 저장한다. 우리가 알고 있는 파일 시스템과 그 구조가 틀리기 때문에 중간 계층을 두는데, KT나 RackSpace의 파일 저장 서비스는 하나의 파일을 하나의 Object로 저장하는 구조지만, OpenDedup이나 몇몇 솔루션은 하나의 파일을 여러개의 Chunk로 나눈 후에, Chunk를 하나의 Object로 처리해서 저장한다.  이렇게 Chunk로 나눌 경우 Chunk를 동시에 전송해서 접근 속도를 높일 수 있고, dedup을 지원하여 스토리지 용량을 절약할 수 있지만, 반대로 Chunk를 나누고 계산하는 시간에 CPU가 많이 소요 되는 단점을 가지고 있다.

대표적인 오픈소스가 Opendedup이 있는데, 코드 구조가 정말 마음에 든다. :)
http://opendedup.org/
에 있다.
코드를 분석해보니 구조가 대충 다음과 같이 나온다.

 


크게 두개의 컴포넌트가 있는데, DedupFileEngine과 DedupStoreEngine이 있다. FileEngine은 파일단위의 관리를 하고, DedupStorageEngine은 실제 Storage 저장소에 저장되는 Chunk를 관리한다.

하나의 파일은 Dedup 파일이라는 클래스로 관리가 된다. Chunk단위로 나뉘어진 데이타는 WritableCacheBuffer라는 형태로 메모리에 저장되고, Disk에 Writing될때, HCServiceProxy라는 컴포넌트가 Routing을 해서 DedupStorageEngine으로 보낸다. 이때 Routing을 Chunk의 첫번째 Byte의 Hash값을 0~255로 계산하여 Routing을 한다.

파일에 대한 메타 정보 - 디렉토리,Path,LastAccess,Permission등은 MetaDataDedupFile이라는 저장공간에 저장이 되며, 이 컴포넌트는 JDBM이라는 오픈 소스를 사용한다.

이 DedupFile들은 묶음으로 DedupFileStore라는 곳에 저장된다.
파일 전송을 위해서 각 DedupFile은 DedupFileChannel을 가지고 있고, 클라이언트에 파일을 전송하는 Network interface로 사용된다.

OpenDedup은 이 파일 시스템을 NFS나 CIFS등으로 시스템에 Mount할 수 있는데, 이 파일 시스템을 Mount하는 것은 Open Source의 Fuse를 사용한다.