마이크로 서비스 아키텍처의 관점에서본 구글 앱엔진

Google의 “An Overview of App Engine” 에서 일부를 정리했음.

서비스: 앱엔진을 구성하는 빌딩 블록

최상위 레벨의 관점에서 봤을때, 앱엔진 어플리케이션은 하나 또는 그 이상의 서비스로 이루어져 있다. 각 서비스들은 다른 런타임상에서 실행되거나 성능에 관한 설정을 달리 할 수 있다. 서비스는 개발자들이 커다란 어플리케이션을 논리적인 컴포넌트 단위로 쪼갤수 있게 해준다. 이것들은 서로 Memcache와 같은 앱엔진의 기능들을 공유하고, 상호 안전하게 커뮤니케이션할 수 있다.
결국 서비스는 마이크로서비스와 같은 형태를 취하며, 다수의 서비스들을 이용해 어플리케이션을 구성할 수 있다.
하나의 어플리케이션은 다음과 같은 다양한 고객의 요청사항을 각기 다른 서비스를 통해 처리할 수 있다.

  • 모바일 장치로 부터의 API 요청.
  • 내부적인 작업. (관리자 기능)
  • 백엔드 처리. (지불에 관련된 파이프라인 또는 데이터 분석)

버전과 인스턴스

각 서비는 소스코드와 설정파일로 이루어져 있다. 서비스에는 항상 버전이 따른다. 당신이 서비스를 배포한다는 것은 특정 버전의 서비스를 배포한다는 것을 의미한다. 각, 서비스가 버전을 가짐으로써 구글 클라우드 플랫폼 콘솔을 통해 언제든지 클릭한번으로 롤백하거나, 점진적으로 새로운 버전의 서비스로 트래픽을 증가시킬 수 도 있다.
운영중인 서비스의 특정 버전은 하나 또는 그 이상의 인스턴스를 가진다. 앱엔진은 실행중인 인스턴스를 앱의 성능과 부하량에 따라 자동으로 늘리거나 줄이는 기능을 제공해 쉬고있는 인스턴스(idle)을 최소화 하여 비용을 절감하도록 도와준다.
아래 다이어그램은 실행중인 앱엔진 어플리케이션의 계층도를 보여준다.
app engine hierarchy

서비스간의 통신

모든 서비스와, 버전, 인스턴스는 “v1.my-service.my-app.appspot.com” 과 같이 고유의 URI를 가지고 있다. 사용자의 요청은 URL 어드레싱 규칙에 의해 특정 서비스/버전의 인스턴스로 라우팅된다.
URL Fetch API를 이용해 서비스간에 또는 외부의 엔드포인트로 요청을 전달할 수 있다.
모든 어플리케이션 서비스는 데이터스토어Memcache서비스의 상태를 공유한다. 또한, 서비스은 Task Queue를 이용해 작업을 할당하고 협업한다. 이러한, 공유 서비스에 접근하기 위해서는 상응하는 앱엔진 API를 사용해야 한다.

제한

서비스의 최대수는 앱의 가격정책에 따라 다르다.