클라우드 컴퓨팅 & NoSQL/Azure

Microsoft 클라우스 서비스 Azure의 데이타 저장 서비스들에 대한 소개

Terry Cho 2010. 10. 20. 13:54

Azure Data Storage Service

요즘 어찌어찌 해서, 클라우드쪽과 특히 마이크로소프트의 클라우드 플랫폼인 Azure 쪽을 보고 있는데, 상당히 흥미롭다. 국내 기업을 대상으로 서비스를 제공하고 있지 않고 국내에 .NET 개발자층이 자바쪽에 비해서 두텁지 않은 관계로, 크게 이슈화는 못 되어가고 있는 것 같지만 기술적인 관점에서는 상당히 흥미롭다. Azure를 한마디로 이야기 하자면 넣을 수 있는 건 정말 다 넣었다. CRM,Exchange 등등과 같은 소프트웨어 서비스 기반의 Saas에서부터 Windows 기반의 Iaas 까지, 거기에 SNS 통합 인증, Windows Live Service등에서 제공되는 OPEN API Integration까지 참 많기는 많다.

하여간 자세한 이야기는 나중에 올리도록 하고, 오늘은 Azure Platform의 데이터 저장 서비스에 대해서 알아보고자 한다.

기업이 클라우드를 사용하려는 근본적인 이유와, 모든 클라우드 업체들이 내세우는 클라우드의 장점은 결국 비용이다. 쓴 만큼 지불하는 비용 구조를 제공하겠다는 것인데, 컴퓨팅에서 비용은 결국 컴퓨팅 파워 (CPU)와 저장소(Storage)비용이다. 그래서 클라우드 서비스들은 강력한 Storage 서비스등을 제공한다. Amazon도 SimpleDB,S3,EBS,RDS,SQS(엄밀하게는 Queue 서비스) 등의 다양한 서비스를 제공하고 있고, Microsoft의 Azure역시 다양한 형태의 Storage 서비스를 제공한다. 일반적으로 클라우드 상의 Storage 서비스는 RDBMS 처럼 OLTP를 지원하기 위한 고급 Feature들 보다는 대용량의 데이터를 저장할 수 있는 Scalability와 대용량 데이터를 Handling할 수 있는 Performance 에 초점이 맞춰져 있다.

일단 Microsoft의 Azure의 Storage 서비스를 보면 크게 아래와 같이 5가지 형태의 서비스를 제공한다.


Table Storage
말 그대로 테이블 형태로 데이터를 저장한다. 사용자당 여러 개의 테이블을 소유할 수 있으며, 각 테이블은 다수의 컬럼으로 정의된 행을 포함한다. 그냥 편하게 RDBMS의 하나의 테이블이나, 엑셀 테이블 하나 생각하면 된다.


그런데 이미 RDBMS나 다른 곳에서도 제공하는 테이블 데이터 구조를 왜 따로 정의했을까? 쉽게 생각하면 요즘 유행하는 NoSQL과 비슷한 사상으로 생각하면 된다. 복잡한 관계형 구조나 Query가 필요 없지만 데이터의 양이 상당히 크고 고성능의 접근성이 요구될 때 사용된다. 트위터가 데이타를 Cassandra와 같은 NoSQL DB에 저장하고 사용하는 것과 같이 이유이다. Amazon의 SimpleDB와 유사한 서비스로 생각하면 된다.

Blob Storage
다음은 Blob Storage이다. 이미지,동영상 또는 큰 사이즈의 Binary 데이터등을 저장하는데 사용되는 서비스이다.


특징은 대용량의 저장성을 보장하고, 특히 CDN (Contents Distribution Network – 일종의 웹캐슁 서비스와 비슷하게 생각하면 된다. 각 지역 마다 캐쉬 서버를 두고 컨텐츠를 그 캐쉬 서버에 복제해서 지역적인 차이로 인한 다운로드 속도를 절감해준다.)과의 연동을 통해서 Blob Data를 원거리에서 접근하는데 성능을 보장한다.

SNS 서비스에서 이미지,동영상 저장 서비스나, 일반 기업에서 Archiving 서비스 (경비 지출서에 영수증등을 스캔해서 몇 년동안 저장해야 하는 기업 내부 규정)등에 유용하게 사용될 수 있다.

Disk Storage
Disk Storage 서비스는 Blob Storage 서비스를 Disk로 Mount 해놓은 서비스이다. Blob Storage가 API를 통해서 접근한다면, Disk Storage는 Application 입장에서는 하나의 물리적인 디스크로 인식하고 접근할 수 있다. 접근 성능을 높이기 위해서 Local VM에 (Windows Virtual Machine) Local Cache를 둬서 성능을 보장한다.

Queue Storage Service
 Queue Storage는 우리가 일반적으로 프로그래밍에서 사용하는 Queue를 생각하면 된다. IBM의 MQ나 Java의 JMS와 같은 개념이다.


이러한 Queuing 서비스는 비동기식 처리 방식의 아키텍쳐를 구현할 때 매우 편리한데, 예를 들어 월말 정산을 한다던지, 리포트 생성과 같은 배치 처리를 하고자 할 때, 화면에서 Request를 받고 백그라운드에서 처리를 할 때 유용하게 사용된다. 자바에서 JMS – Message Driven Bean(EJB)와 같은 아키텍쳐를 구축할 수 있다.

SQL Azure
마지막으로 SQL Azure이다. MS SQL Azure는 쉽게 이해하면 MS SQL RDBMS를 통째로 클라우드에 올려놨다고 생각하면 된다. RDBMS를 클라우드에서 사용할 수 있는 것이다. Amazon의 경우 EC2에 Oracle 이미지를 올려놓고 사용할 수 있지만 클라우드 플랫폼 자체에 녹여놨다고 보기는 약간 어렵지 않을까?

SQL Azure 서비스 중에 하나 중 재미있는 것은 MS SQL Azure 노드간의 데이터 동기화나 MS SQL Azure 노드와 기업내의 SQL 서버간의 데이터 동기화가 가능하다. MS SQL 제품 내부에는 CDC (Change Data Capture) 기능을 가지고 있는데, 아마 이 모듈을 사용해서 구축된 듯하다. 이서비스의 이름은 SQL Azure Data Sync Service로, 이 CDC 기능을 쉽게 Wrapping해놔서, Web UI상에서 복제할 MS SQL Instance를 선택하고, 테이블을 선택하면 자동으로 복제가 진행된다. 아무래도 센터간 복제이기 때문에 실시간 복제는 불가능하리라 생각하고, 아래 동영상을 보니 스케쥴 기반으로 복제를 진행한다.

아래 동영상의 시연을 보면 약 1132건의 트렌젝션 (테이블 생성에서부터, 복제등을 포함해서) 미국에서 유럽 센터간 동기화를 수행하는데 11.4초 정도가 소요된다.

기업 내부에서 CDC를 통해서 데이터 베이스를 동기화 하는 경우는 근 실시간으로 이루어 지는데, Azure Data Sync Service를 통한 지역간 복제는 아무래도 복제 아키텍쳐를 스케쥴 기반으로 설계해야 한다.

 

Get Microsoft Silverlight