메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

클라우드에서 파일 공유 및 파일 잠금 개선하기

블록 스토리지를 수정하여 더욱 효율적인 IaaS(Infrastructure-as-a-Service) 제공하기

Ramanathan Sundarrajan, System Operations Senior Specialist, IBM
Ramanathan Sundarrajan (MydW profile) is an active member of IBM's Cloud Computing work group and performed lots of research on cloud innovations. Ramanathan monitored final-year student interns from the College of Engineering Guindy at Anna University; one result of that project is this article.
Kishorekumar Neelamegam, Systems Engineer/IT Architect, IBM
Kishorekumar Neelamegan brings more than 13 years of software development experience with a strong focus on integrating software into the Rational platform. A passionate evangelist on cloud, Kishore is a frequent participant on developerWorks: You can follow his activities through his MydW profile and MydW group, dW India IBMers.
V. T. Prabagaran, Intern, IBM
V.T. Prabagaran is a final-year student at College of Engineering Guindy, Anna University, Chennai, India.

요약:  블록 스토리지는 대부분의 파일 시스템의 주요 기반입니다. 파일 공유와 파일 잠금은 클라우드 데이터 자원 공유 및 레이스 조건 제거를 위한 중요 프로세스입니다. 효율적인 구현은 시스템 및 애플리케이션의 성능 레벨에 중요한 표시를 만들 수 있습니다. 이 기사에서는 오픈 소스 예제(클라우드 플랫폼 Eucalyptus와 해당 스토리지 컴포넌트 Walrus)를 사용하여 파일 공유 및 잠금 메커니즘을 개선하기 위해 블록 스토리지를 수정하는 방법을 설명합니다. 최고 수준의 IaaS(Infrastructure-as-a-Service) 플랫폼을 전달할 수 있도록 Eucalyptus를 설치하는 방법에 대해 살펴봅니다.

원문 게재일:  2010 년 7 월 28 일 번역 게재일:   2011 년 1 월 11 일
난이도:  중급 원문:  보기 PDF:  A4 and Letter (378KB | 22 pages)Get Adobe® Reader®
페이지뷰:  3109 회
의견:  


이 기사에서는 IaaS(Infrastructure-as-a-Service) 환경을 구현하는 클라우드 컴퓨팅을 위해 Eucalyptus 오픈 소스 프레임워크와 함께 포함된 스토리지 서비스 컴포넌트인 Walrus의 소스 코드에 대한 일부 수정사항에 대해 소개한다. Eucalyptus 환경에서 파일 공유 및 파일 잠금 메커니즘을 개선하기 위해 Walrus 소스 코드를 수정하고 다시 컴파일한 후 실행하는 방법에 대해 살펴본다.

이를 수행하기 위한 가장 적절한 이유는 클라우드 서비스의 이용자 또는 클라우드 애플리케이션 및 서비스의 개발자 및 설계자의 경우(특히 파일 공유 또는 잠금을 적용하는 경우) 이를 수행하면 애플리케이션 또는 서비스의 기능을 향상시켜 언급된 자원의 성능을 개선할 수 있고 이로 인해 자원에 대한 시간, 대역폭 및 계산 능력의 오버헤드 할당이 줄어든다는 것이다. 이를 수행하면 비용이 절감될 수 있다.

이 기사에서는 클러스터(이 경우에는 IBM® 블레이드 서버)에 Eucalyptus를 설치하는 방법을 단계별로 설명하며 이 기술은 개인용 컴퓨터나 랩탑 컴퓨터에서도 사용할 수 있다.

본 기사를 최대한 활용하려면 클라우드 컴퓨팅 개념, Java™ 기술 및 UNIX® 코딩 명령에 대한 충분한 이해 클러스터에 대한 작업 방법에 대한 기본적인 이해가 필요하다. 샘플 코드를 사용하려면 Eclipse 프레임워크에 대한 기본적인 이해가 필요하다. 참고자료 섹션에 이러한 기술에 대한 배경 정보의 링크가 있다.

클러스터에 Eucalyptus 설치하기

이 기사의 경우 Eclipse 3.4.2 및 Cent OS 5.4를 운영 체제로 사용했다.

설치하기 전에

IBM 블레이드 서버는 광범위한 프로세서 기술 및 운영 체제를 지원하여 클라이언트가 단일 아키텍처에서 다양한 워크로드를 모두 실행할 수 있게 한다. 블레이드 서버는 복잡도를 줄이고 시스템 관리를 개선하며 총 소유 비용은 줄이면서 에너지 효율은 높인다. 여기서는 IBM LS20 BladeCenter® Server(참고자료)를 사용했다.

이 기사에서는 일반적으로 단일 클러스터 설치를 참조한다. 노드 제어기를 제외한 모든 컴포넌트는 프론트 엔드라고 하는 하나의 시스템에 있다. 달리 말하면 클라우드 제어기, 클러스터 제어기스토리지 제어기프론트 엔드 시스템에서 실행된다. 노드 제어기만 실행하는 시스템을 "노드"라고 한다.

관리자로 설치하기

CentOS에서 Eucalyptus 1.6.1을 설치하는 것은 매우 간단하다. 관리자로서 다음을 수행한다.

  1. eucalyptus-1.6.1-centos-i386.tar.gz 파일을 압축 해제한다.
  2. root 이외의 사용자로 로그인한 후 developerWorks wiki와 같이 이를 설치한다.

이러한 단계를 수행하고 나면 Eucalyptus가 설치된다. 대체 설치 방법은 Eucalyptus 웹 사이트에서 확인할 수 있다. 다음으로 Eucalyptus 관리 도구를 다운로드하여 가상 이미지를 관리한다. 번들 이미지 사용법은 wiki에서 설명한다.

그림 1에서는 Eucalyptus 설치를 구성하는 네 가지 상위 레벨 컴포넌트(각각 자체 웹 서비스 인터페이스를 가지고 있음)를 보여 준다.


그림 1. Eucalyptus의 네 가지 상위 레벨 컴포넌트
Eucalyptus의 네 가지 상위 레벨 컴포넌트

이들 컴포넌트는 노드 제어기, 클러스터 제어기, 스토리지 제어기(Walrus) 및 클라우드 제어기이다.

  • 노드 제어기는 실행되는 호스트에서 VM 인스턴스의 실행, 검사 및 종료를 제어한다.
  • 클러스터 제어기는 특정 노드 제어기에서 VM 실행에 대한 정보를 수집하고 VM 실행의 스케줄을 지정하며 가상 인스턴스 네트워크를 관리한다.
  • 스토리지 제어기(Walrus)는 Amazon의 S3 인터페이스를 구현하여 가상 시스템 이미지 및 사용자 데이터의 저장 및 액세스를 위한 메커니즘을 제공하는 put/get 스토리지 서비스이다.
  • 클라우드 제어기는 사용자 및 관리자를 위한 클라우드의 시작점이다. 클라우드 제어기는 노드 관리자를 쿼리하여 자원에 대한 정보를 확인하고 상위 레벨 스케줄링 의사결정을 작성하고 클러스터 제어기에 대한 요청을 작성하여 이를 구현한다.

Walrus 정보(스토리지 컴포넌트)

Walrus는 Amazon S3와 인터페이스가 호환되는 Eucalyptus와 함께 포함된 스토리지 서비스이다. Walrus를 사용하면 버킷오브젝트로 구성된 지속적인 데이터를 저장할 수 있다.

Walrus는 오브젝트 쓰기에 대한 잠금을 제공하지는 않지만 S3의 경우와 마찬가지로 동일한 오브젝트에 대해 동시에 쓰기가 수행되면 오브젝트의 지속적인 사본이 저장된다. 동일한 오브젝트에 대한 이전의 쓰기 조작이 진행 중일 때 오브젝트에 대한 쓰기 조작이 발생하면 이전의 쓰기 조작은 무효화된다.

현재 Walrus의 작동 방식

Walrus의 현재 버전은 일관되지 않은 데이터를 제공하며 오브젝트 잠금은 제공하지 않는다. 클라우드에서 이미지를 실행하려면 번들로 제공되는 이미지를 생성하여 클라우드에서 업로드해야 한다. Walrus는 스토리지 관리자 역할을 하여 사용자로부터 이미지를 수신한 후 버킷 및 오브젝트로 저장한다. 클라우드에서 이미지에 액세스하려는 경우 Walrus는 사용자가 업로드한 이미지를 확인하고 해독하는 태스크를 수행한다.

이미지를 저장하려는 경우에는 각 사용자에 대해 고유 버킷 이름을 가진 별도의 버킷이 작성된다. S3cmd를 사용하여 버킷 및 버킷 이름을 작성한다.

$ s3cmd mb s3://my-new-bucket-name

버킷이 작성되고 나면 파일(오브젝트라고 함)을 버킷에 업로드할 수 있다.

$ s3cmd put filename s3://my-new-bucket-name/filename

Walrus의 내부 작업에 대해 자세히 실펴보려면 Amazon S3의 S3cmd(참고자료)를 참조한다.

Walrus에 파일 잠금 소개하기

Walrus의 단점을 극복하기 위해 파일 잠금 메커니즘을 소개했다. 데이터 일관성을 유지하기 위해 읽기/쓰기 모드에서 파일에 액세스할 수 있는 기능을 제공했다.

user1이 쓰기 모드에서 파일에 액세스하려고 하는 경우 user1이 해당 파일을 해제할 때까지 다른 사용자가 이 파일에 액세스할 수 없도록 해당 오브젝트는 잠금 설정된다. 하지만 다른 사용자는 읽기 모드에서 파일에 액세스할 수 있다.

오브젝트를 요청한 순서를 사용하고 이에 따라 시스템이 요청을 처리할 수 있도록 하여 각 사용자의 쓰기 요청을 배치할 별도의 큐를 설계했다.

Walrus의 이미지 관리

Eucalyptus에서 VM 인스턴스를 실행하기 전에 다운로드하거나 작성한 VM 이미지에 Eucalyptus 신임 정보를 함께 제공한 후 이 이미지를 업로드하고 등록하여 이러한 이미지를 추가해야 한다.

VM 이미지를 실행 가능 엔티티로 사용하려면 Eucalyptus 관리자는 루트 파일 시스템 이미지와 커널/ramdisk 쌍을 Walrus(버킷 스토리지)에 추가한 후 업로드된 데이터를 Eucalyptus에 등록해야 한다. 각 이미지는 다음과 같은 EC2 호환 가능 명령을 사용하여 Walrus에 추가되고 Eucalyptus에 별도로 등록된다.

  • 루트 파일 시스템 이미지를 Walrus에 추가하려면 다음을 수행한다.
    1. 이미지 번들화:
      $ euca-bundle-image -i <vm image file>
      

    2. 번들 업로드:
      $ euca-upload-bundle -b <image bucket> -m /tmp/<vm image file>.manifest.xml
      

    3. 이미지 등록:
      $ euca-register <image bucket>/<vm image file>.manifest.xml
      

  • 커널을 Walrus에 추가한 후 Eucalyptus에 등록하려면 다음을 수행한다.
    1. 커널 번들화:
      $ euca-bundle-image -i <kernel file> --kernel true
      

    2. 번들 업로드:
      $ euca-upload-bundle -b <kernel bucket> -m /tmp/<kernel file>.manifest.xml
      

    3. 커널 등록:
      $ euca-register <kernel-bucket>/<kernel file>.manifest.xml
      


수정된 메커니즘 추가 설명

현재의 Eucalyptus는 파일 공유 메커니즘을 지원하지 않지만 여기서는 Eucalyptus에서 파일 공유를 구현하는 방법에 대해 설명한다. 여기서는 데이터 일관성 관리에 초점을 둔다.

각 사용자를 위해 별도의 가상 시스템 인스턴스가 작성된다. 현재 구현에서 Eucalyptus는 역시 여러 VM 인스턴스 사이의 파일 공유를 지원하지 않는다. 쓰기 모드에서 둘 이상의 사용자가 동시에 파일에 액세스하여 파일을 수정하는 경우에는 마지막으로 저장된 컨텐츠가 파일에서 업데이트된다.

먼저 볼륨이 작성되어 인스턴스에 연결되는 방법에 대해 살펴보자.

볼륨에 대해 작업하기

새 볼륨을 작성하기 전에 현재 가용성 영역에 대한 정보를 살펴본다.

$ euca-describe-availability-zones

새 볼륨을 작성한다.

$ euca-create-volume --size <size of volume> -x <name of availability zone>

여기서 --size는 작성하려고 하는 볼륨의 크기를 나타내고 -x는 볼륨을 배치할 가용성 영역의 이름을 나타낸다.

다음 명령을 사용하여 볼륨을 인스턴스에 연결한다.

$ euca-attach-volume

예를 들어, vol-12345678 볼륨을 /dev/sdb에 있는 i-98765432 인스턴스에 연결하려면 다음 명령을 사용한다.

$ euca-attach-volume -i i-98765432 -d /dev/sdb vol-12345678

VM 인스턴스가 실행을 시작하면 두 개의 IP 주소가 이 인스턴스에 지정되어 있는 것을 볼 수 있다. SSH 키를 사용하여 IP 주소에 로그인한다.

$ ssh -i mykey.private root@<ip-address>

시나리오 양식으로 이에 대해 살펴보기

사용자 A와 사용자 B가 동일한 사용자 이름과 비밀번호를 사용하여 시스템 1과 시스템 2라는 두 개의 다른 시스템에 로그인한 후 두 시스템의 파일에 액세스를 시도한다고 가정해 보자.

A와 B는 둘 다 쓰기 모드에서 동시에 Elastic Fox를 통해 동일한 VM 인스턴스에 액세스를 시도한다. 인스턴스의 IP 주소를 사용하여 두 사용자 모두 ssh 명령을 통해 인스턴스에 액세스를 시도한다. B가 수정하는 파일을 A가 수정하면 B의 수정사항이 업데이트된다. 파일 쓰기의 상태는 일관되지 않는다.

수정된 Walrus 아키텍처는 데이터 파일 수정사항의 일관성을 유지하는 데 도움이 된다.


메커니즘 수정하기

클라우드와 해당 가상 네트워크의 아키텍처에 대해 살펴보자.


그림 2. 클라우드와 해당 가상 네트워크의 아키텍처
클라우드와 해당 가상 네트워크의 아키텍처

컴포넌트는 다음과 같다.

  • CLC(클라우드 제어기)는 클라이언트에 대한 인터페이스이며 상위 레벨 스케줄링을 수행하고 관리 플랫폼을 형성한다.
  • ccX는 특정 노드 제어기에 대한 수신 요청을 스케줄링하고 노드 제어기 세트에 대한 정보를 수집/보고하는 클러스터 제어기이다.
  • ncX는 VM 인스턴스를 호스트하는 시스템인 노드 제어기이다.
  • Walrus는 VM 이미지(종종 데이터)를 저장하기 위해 노드 제어기에서 사용하는 지속적 보조 스토리지이다.

그림 3에서는 사용자가 다른 사용자와 파일을 공유하는 방법을 보여 준다.


그림 3. 사용자의 파일 공유를 보여 주는 플로우 다이어그램
사용자의 파일 공유를 보여 주는 플로우 다이어그램

플로우 다이어그램의 해석(숫자를 따라 이동):

  1. 클라이언트가 로그인 ID 및 비밀번호를 사용하여 로그인한다.
  2. CLC가 데이터베이스에서 사용자 ID를 검사한 후 유효한 사용자를 위한 새 세션을 작성한다.
  3. CLC가 상태 메시지를 클라이언트에 리턴한다.
  4. 사용자가 소유하는 파일을 공유한다.
  5. 이제 CLC가 사용자가 실제로 파일을 소유하는지 여부를 검사하고 인증에 성공하면 새 사용자 ID를 공유 파일 액세스 목록에 추가한다.
  6. CLC가 이 메시지를 해당 CC에 전달한다.
  7. CC가 사용자의 가상 시스템 인스턴스를 호스트하는 NC를 찾은 후 이 메시지를 전달한다.
  8. NC가 이 파일을 지속적 공유 매체(Walrus)에 전송하여 사용자 간 공유를 활성화한다.
  9. 파일이 CC 및 CLC를 통해 Walrus에 전송된다.
  10. 파일이 Walrus에 전송된다.
  11. CLC가 성공 메시지를 클라이언트에 전달한다.

그림 4에서는 클라이언트가 파일에 대한 액세스를 요청하는 방법을 보여 준다.


그림 4. 클라이언트의 파일에 대한 액세스 요청을 보여 주는 플로우 다이어그램
클라이언트의 파일에 대한 액세스 요청을 보여 주는 플로우 다이어그램

이 플로우 다이어그램의 해석(숫자를 따라 이동):

  1. 사용자가 로그인 ID 및 비밀번호를 사용하여 로그인한다.
  2. CLC가 사용자 데이터베이스를 사용하여 이를 검사한 후 유효한 사용자를 위한 새 세션을 작성한다.
  3. CLC가 로그인 상태 메시지를 클라이언트에 리턴한다.
  4. 클라이언트가 파일을 요청한다.
  5. CLC가 파일에 대한 사용자 액세스를 확인하기 위한 요청을 사용자 디렉토리에 전송한다. 사용자 디렉토리는 파일 세부사항 및 사용자 액세스 데이터를 저장한다.
  6. CLC가 요청을 해당 CC에 전달한다.
  7. CC가 사용자를 위해 작성된 가상 시스템 인스턴스를 호스트하는 NC를 찾는다.

8, 9 및 10단계에서 NC는 CC 및 CLC를 통해 보안 채널을 사용하여 사용자에게 데이터를 전송한다.

노드 제어기의 내부는 어떤 모습인지 살펴볼 때가 된 것 같다. 모든 노드 제어기에는 하이퍼바이저가 실행되고 있다. 하이퍼바이저는 플랫폼 가상화 소프트웨어이다. 여기서는 호스트 하드웨어와 직접 상호작용하고 하이퍼바이저 위에서 게스트 운영 체제를 실행하고 LPAR에서 시스템 자원을 할당하여 CPU, 직접 액세스 스토리지 디바이스 및 메모리와 같은 실제 자원을 공유하는 유형 1 하이퍼바이저를 사용한다. (유형 1 하이퍼바이저는 IBM에 의해 1970년대 초기에 IBM System 370 프로세서와 함께 도입되었다.) 그림 5에서는 NC 및 해당 하이퍼바이저에서의 플로우를 보여 준다.


그림 5. 노드 제어기 내부
노드 제어기 내부

이 플로우 다이어그램의 해석(숫자를 따라 이동):

  1. CC로부터의 요청이 NC에 수신된다.
  2. 해당 노드에서 실행 중인 노드 제어기 모듈이 이 요청을 하이퍼바이저에 전달한다.
  3. 하이퍼바이저가 게스트 운영 체제의 도움으로 작업을 수행한다.
  4. 게스트 OS가 하이퍼바이저에 수행할 작업을 지시한다.
  5. 이제 하이퍼바이저가 하드웨어와 상호작용하여 작업을 완료한다.

Eucalyptus에 소개된 파일 공유가 어떤 도움이 되는지 살펴봤으니 이제 읽기/쓰기 모드에서의 파일 액세스라는 개념을 통해 데이터 일관성을 유지하는 것에 대해 살펴보자.

그림 6에서는 파일 액세스를 위한 쓰기 모드 시간 큐로 데이터 일관성을 개선하는 방법을 보여 준다.


그림 6. 쓰기 모드 시간 큐를 사용하여 일관성 개선하기
쓰기 모드 시간 큐를 사용하여 일관성 개선하기

그림 6에서는 시간 t에서 쓰기 모드에 있는 파일 F1에 대한 사용자 B의 요청과 시간 t+1에서 쓰기 모드에 있는 동일한 파일에 대한 사용자 C의 요청을 비교한다. 파일 일관성을 구현하기 위해 여기서는 선착순으로 요청을 배치하는 데 사용되는 큐를 설계했다.

B가 C와 먼저 비교된 파일을 요청했기 때문에 B는 큐의 맨 위에 배치되고 C는 큐에서 B 다음에 배치된다.

일반적으로 쓰기 모드에서 파일에 액세스하기 위해 사용자에 의해 요청이 작성되면 각 요청은 요청이 작성되는 시간을 사용하여 순서대로 배치된다. 첫 번째로 요청된 사용자는 큐의 맨 위에 배치된다. 다음으로 요청된 사용자는 첫 번째로 요청된 사용자 옆에 배치되는 식으로 배치가 진행된다.

그림 7에서는 데이터 일관성을 개선하기 위해 공유/잠금 레벨을 판별하는 데 필요한 사용자 요청 함수의 추가된 판별자(읽기 또는 쓰기)를 보여 준다.


그림 7. 읽기/쓰기 판별자를 사용하여 일관성 개선하기
읽기/쓰기 판별자를 사용하여 일관성 개선하기

그림 7에서는 파일 액세스가 제공되는 모드(사용자가 쓰기와 읽기 중 어느 것을 위해 액세스하는지 여부)를 표시하기 위해 사용자가 파일에 액세스하는 시간 프레임에 필드를 추가했다.

쓰기 액세스 큐에서 사용자 B는 먼저 사용자 C와 비교하여 쓰기 모드에서 파일에 액세스하도록 요청하기 때문에 사용자 B는 큐의 맨 위에 있다. 사용자 B에게는 쓰기 액세스가 제공된다. 사용자 C는 사용자 B가 파일 잠금을 해제하면 쓰기 액세스 권한을 가진다. 하지만 사용자 C는 사용자 B가 쓰기 모드에서 파일의 잠금 설정 상태를 유지하는 동안 읽기 모드에서 해당 파일에 액세스할 수 있다.

일반적으로 쓰기 모드에서 둘 이상의 사용자가 동시에 파일에 액세스하는 경우 첫 번째 사용자에게는 해당 파일에 대한 쓰기 모드 액세스 권한이 부여되고 나머지 사용자 쓰기 모드 액세스 요청은 큐에 저장된다. 하지만 읽기 모드 액세스는 다른 모든 사용자에게 제공된다. 쓰기 액세스 권한을 가진 첫 번째 사용자가 파일을 해제하면 큐에서 맨 위에 있는 사용자에게 쓰기 모드 액세스 권한이 부여된다.


수정된 코드 수정, 다시 컴파일 및 실행하기

개념에 대해 살펴보고 이제 실제 수정 단계인 이 부분에 이르렀다. 수정 단계는 매우 단순하다.

  1. 작업 공간을 작성한 후 clc 폴더를 Eucalyptus 소스로부터 복사한다.

    그림 8. 작업 공간 폴더 선택
    작업 공간 폴더 선택

  2. File > Import를 클릭하여 소스를 가져온다.

    그림 9. 가져오기 소스 선택
    가져오기 소스 선택

  3. General > Existing Projects into Workspace를 선택한다.

    그림 10. Existing Projects 선택
    Existing Projects 선택

  4. 루트 디렉토리 경로를 root/java/workspace/clc로 선택한다.

    그림 11. 루트 디렉토리 경로 선택
    루트 디렉토리 경로 선택

  5. Finish를 클릭한다.

    그림 12. 루트 디렉토리와 프로젝트가 성공적으로 추가되면 Finish 클릭하기
    이 그림과 같이 표시되면 Finish 클릭하기

  6. 왼쪽에는 프로젝트의 컨텐츠를 나열하는 "package"라는 탭이 표시된다. 이제 build.xml을 마우스 오른쪽 단추로 클릭한다.

    그림 13. 빌드 준비 완료 ...
    빌드 준비 완료 ...

  7. Ant 빌드를 실행한다.

    그림 14. ... 성공적으로 실행되었다.
    ... 성공적으로 실행되었다.

빌드 성공이 표시된다. 간단한 작업이었다.


애플리케이션 구현하기

애플리케이션 자체에 몇 가지 파일이 포함되어 있지만 여기서는 주요 부분에 대해서만 다루고 이를 기반으로 자체 애플리케이션을 작성하는 것은 사용자에게 맡긴다.

파일 공유 및 잠금 메커니즘을 구현하기 위해 여기서는 WalrusVirtualBlockManager라는 클래스를 작성했다. 이 코드는 Eucalyptus에서 파일 잠금 메커니즘을 구현한다. Listing 1은 소스 코드이다.


Listing 1. WalrusVirtualBlockManager

package edu.ucsb.eucalyptus.cloud.ws;
import org.apache.log4j.Logger;
import edu.ucsb.eucalyptus.cloud.entities.ObjectInfo;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.*;
import edu.ucsb.eucalyptus.cloud.entities.ObjectInfo;
public class WalrusVirtualBlockManager
{
    private static Logger LOG = Logger.getLogger(WalrusVirtualBlockManager.class);
    public static Map<ObjectInfo,ReentrantLock> 
           storagelockMap = new HashMap<ObjectInfo,ReentrantLock>();
    private static WalrusVirtualBlockManager virtualBlockMgr;
    private WalrusVirtualBlockManager()
    {
    
    }
    public static WalrusVirtualBlockManager getInstance()
    {
        VirtualBlockMgr = new WalrusVirtualBlockManager();
        return virtualBlockMgr;
    }
    public ReentrantLock lock(ObjectInfo info)
{
ReentrantLock lck = new ReentrantLock();
storagelockMap.put(info,lck);
return lck;
}
  public void unlock(ObjectInfo info)  
  {
    ReentrantLock lck = storagelockMap.get(info); 
    lck.unlock();
    clear(info);
  }
  public void clear(ObjectInfo info)
  {
    storagelockMap.remove(info);    
  }
  public void clearAll()
  {
      for(Map.Entry<ObjectInfo,ReentrantLock> entry : storagelockMap.entrySet())
      {
       unlock(entry.getKey());       
  }
      storagelockMap.clear();
}
}


Walrus를 사용하지 않는 경우는 어떨까?

이 수정된 블록 스토리지 기술은 다른 클라우드 플랫폼에도 적합할 수 있다. 예를 들어, Cassandra에서는 데이터가 복제된다. 즉, 데이터 소스의 최신 버전이 클러스터의 일부 노드에 있지만 이전 버전은 여전히 다른 노드에 있다. 목표는 결국 모든 노드가 최신 버전에 액세스하는 것이다. 파일 오브젝트 잠금은 사용할 수 없지만 데이터 일관성을 유지하기 위해 이 기사에서 수행했던 방법으로 수정된 블록 스토리지 기술을 여기에 소개할 수 있다. Cassandra가 Digg, Facebook, Twitter 및 기타 사이트에서 작동되는 것을 확인했다.


결론

이제 클러스터에서 Eucalyptus를 설치하는 방법과 Walrus 소스 코드를 수정하여 클라우드에서 파일 공유 및 파일 잠금 메커니즘을 구현 또는 개선하는 방법에 대해 알고 있다.


참고자료

교육

제품 및 기술 얻기

토론

  • Twitter의 Eucalyptus 소식을 팔로우(follow)하자. developerWorks도 팔로우(follow)할 수 있다.

  • My developerWorks의 Developer Cloud group은 Smart Business Development and Test on the IBM Cloud를 위한 커뮤니티이다.

  • 연결, 공유 및 협업을 위한 전문가 네트워크이자 통합 커뮤니티 도구 세트인 My developerWorks를 통해 developerWorks 커뮤니티(개발자 블로그, 그룹, 포럼, 팟 캐스트, 프로파일, 뉴스레터, 위키 및 커뮤니티 주제)에 참여하자.

필자소개

Ramanathan Sundarrajan (MydW profile) is an active member of IBM's Cloud Computing work group and performed lots of research on cloud innovations. Ramanathan monitored final-year student interns from the College of Engineering Guindy at Anna University; one result of that project is this article.

Kishorekumar Neelamegan brings more than 13 years of software development experience with a strong focus on integrating software into the Rational platform. A passionate evangelist on cloud, Kishore is a frequent participant on developerWorks: You can follow his activities through his MydW profile and MydW group, dW India IBMers.

V.T. Prabagaran is a final-year student at College of Engineering Guindy, Anna University, Chennai, India.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=, 오픈 소스, 자바
ArticleID=607058
ArticleTitle=클라우드에서 파일 공유 및 파일 잠금 개선하기
publish-date=07282010
author1-email=raman123@in.ibm.com
author1-email-cc=
author2-email=kineelam@in.ibm.com
author2-email-cc=
author3-email=mydw@us.ibm.com
author3-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.