DevOps & SRE/AWS & Cloud

[클라우드 인프라와 API의 구조] 5. 서버 리소스를 제어하는 방법

반응형

그림으로 배우는 클라우드 인프라와 API의 구조

서버 리소스를 제어하는 방법

5장에서는 클라우드 환경에서 서버를 구축하는 과정이 어떻게 이루어지는지?

1. 먼저 서버 리소스란 무엇일까요?

가상 서버(인스턴스)를 의미.

서버 리소스는 타입 (리소스의 스펙), 이미지 (서버를 기동할 이미지)로 구성.

  • 타입 (AWS의 경우 인스턴스 유형)
  • 이미지 (AWS의 경우 AMI)

 

 

2. 서버를 생성하기 까지의 과정?

2-1. 인증

인증 절차

인증 서버로 부터 인증을 요청하고 성공시 토큰엔드포인트를 받아옴.

이때 받아온 토큰을 인증이 필요한 Request Header에 포함해서 요청

여기서 엔드포인트는 인증이 성공한 후에 접속할 엔드포인트를 의미. (가상 서버를 생성하는 엔드포인트)

엔드포인트 개념상, 매번 리소스 제어 요청시 인증을 요청하는 방식 같은데... 최초 로그인시 한번만 토큰을 받아오는 것이 아니라, 매번 리소스 제어 요청시 토큰을 받아오는 방식일지? 궁금합니다! 혹은 오픈스택에서만 이러한 방식인지??.

 

 

2-2. 템플릿 이미지 유효성 검증

해당 템플릿 이미지가 사용가능한지 확인하는 절차. (요청된 해당 이미지가 없거나, 접근 권한이 없거나 하면 에러)

  • 이 과정을 생략해도 큰 문제는 없지만, 문제가 있을 경우 차후 서버를 생성하는 시점에 에러가 발생하게 되서 ⇒ 디버깅 어려움... 가능한 예외는 빠르게 던지자....

 

2-3. 가상 서버의 생성

생성할 가상 서버의 조건 정보를 body에 담아 생성 요청 후, UUID를 반환받는다. (이 UUID는 어디에 쓰이는 지는 이따 설명)

  • 조건 정보에는 서버의 이름, 플레이버 (인스턴스 유형), 템플릿 이미지 등이 포함됨.

 

이때, 아직 실제로 가상 서버는 만들어지지 않은 상태로, 가상 서버를 생성해달라고 요청만 한 상태이다. (메시징 큐를 이용한 비동기 처리로 작동하기 때문)

 

 

2-4. 가상 서버의 상태 확인

비동기적으로 처리하였기 때문에, 사용자는 즉시 가상 서버의 상태를 받아올 수 없음.

따라서 가상 서버 생성을 요청하고, 처리가 완료될 때 까지 주기적으로 GET API로 서버의 상태를 확인하는 방식으로 서버의 상태를 확인. (Polling 방식)

 

 

3. 가상 서버를 생성하는 작업 (내부 동작) with 오픈스택

가상 서버를 생성하는 작업 내부 동작

3-1. 가상 서버를 생성하는 API가 실행되면 메시지 큐에 서버 생성 요청 메시지를 전달.

  • AMQP 메시지 큐(MQ) 프로토콜 사용

 

3-2. 이후, 가상 서버의 구성 정보와 상태 정보가 구성 관리 데이터베이스에 저장된다.

  • 초기에는 Status: Building 으로 생성 중인 상태

 

3-3. 스케줄러 혹은 컨덕터가 메시지 큐에서 요청 메시지를 꺼내서 처리.

  • 이때 스케쥴러 프로세서를 다중화해서 처리하면 가용성이 높아짐. (분산 처리 가능)
  • 여러 스케줄러가 동시에 동작하는 상황에서도 하나의 요청은 반드시 한 번만 처리되도록 보장. (AMQP의 특징 때문인가용???)

 

3-4. 상태관리 데이터베이스 가상 서버에 필요한 리소스를 가진 호스트를 찾음.

  • 상태 관리 데이터베이스에서 각 호스트들의 리소스 사용 상태를 기록하고 주기적으로 갱신.
  • 이때, CPU 코어 개수와 메모리 용량 등을 고려해서 선택
  • 만약 호스트가 부족하면 가상 서버 상태를 ERROR로 기록

 

3-5. 찾은 호스트에게 가상 서버를 기동하도록 지시

  • 이때도 메시지 큐를 이용해서 비동기적으로 처리된다.

 

3-6. 가상 서버를 생성하고 기동까지 성공하면 구성 관리 데이터베이스의 상태를 ACTIVE로 갱신해서, 클라이언트로 하여금 성공하였음을 확인할 수 있게 함.

 

 

이로써 알 수 있는 클라우드의 API의 핵심 키워드

  • 상태 변경 ⇒ 비동기 (메시지 큐와 스케쥴러를 이용)
  • 상태 확인 ⇒ Polling (구성 관리 데이터베이스 등을 이용)
반응형