Kevin's Story

'전체 글'에 해당되는 글 92건

  1. 클라우드란 무엇인가(4) - PaaS(Platform as a Service)

클라우드란 무엇인가(4) - PaaS(Platform as a Service)

Computing Story/Cloud Story

오늘은 지난 시간 클라우드에 대해 알아보았습니다. 오늘은 PaaS 즉Platform as a service 즉(이하 PaaS)에 대해서 이야기 해보려고 합니다.

 

1편 컴퓨팅 패러다임(Computing paradigm)

2편 가상화와 클라우드(Virtualization and Cloud)

3편 클라우드 유형: IaaS(Infrastructure as a Service)

4편 클라우드 유형: PaaS(Platform as a Service)

5편 클라우드 유형: SaaS(Service as a Service)

6편 미래 컴퓨팅 패러다임(Next generation paradigm)

 

아시는 분은 아시겠지만, PaaS은 주로 IaaS를 기반하여 동작하도록 되어있습니다. 오늘은 Platform as a service가 무엇인지 이야기하고, 세대별 PaaS가 어떤 솔루션과 특징이 있는지 알아보도록 하겠습니다.

PaaS(Platform as a service)

IaaS에서 전통적인 웹서비스 구축하는 경우 Infrastructure가 되는 부분을 구성하고 빌드한 바이너리 파일을 가상 서버(Virtual Machine: VM)에 배포하여 설치하고 구동시키는 그래서 성능이라는 이슈, 구성이라는 이슈와 같이 서비스에 필요한 복잡함 중요한 이슈로 자리잡았습니다.

 

Image  1   Cloud Application Platform and Developer Service Components (Alex & Lawrence, 2017)

물론 PaaS에서도 컨테이너의 성능에 대한 내용을 설정할 수 있습니다. 하지만 PaaS에서는 개발된 소스에서 부 터 배포 및 실행하여 서비스를 제공하는 하는 부분까지만 서비스를 위한 구성 요소를 고려하고 생각하지 않습니다. 또한 PaaS내에 개발과 운영을 하나로(DevOps) 할 수 있는 기능 빌드 및 배포(CI/CD), 서비스를 위한 DNS등 기능을 제공한다고 볼 수 있으며, 앱을 설치하고 실행하는 것에 용이하도록 Container기반으로 배포 및 라이프사이클 관리를 하기 때문에 IaaS적인 부분 관리 및 복구 부분을 가능하도록 하는 기능을 가지고있습니다.

 

Image  2   Cloud  서비스별 당신이 신경써야 할 것들  (Stephen & Muhammad, 2019)

<Image 2> 에서도 보는 바와 같이 PaaS에서는 Application, Data에 대한 내용만 신경쓰면 됩니다.

Precondition(전제조건)

기본적으로 PaaSIaaS Cloud서비스를 기반으로 동작하도록 하고 있습니다. 하지만, 가상화에 대한 운영은 IaaS Cloud서비스에서 관리하지만 해당 자원에서 동작하는 응용프로그램과 그 프로그램의 상태 등을 체크하고 관리하여 문제가 있는 응용프로그램은 격리하고 대신하는 응용프로그램을 다시 빌드하고 배포하는 등의 기능을 제공하는 것에 초점을 맞추어 운영 관리합니다. 이 것을 초점으로 다음을 설명하도록 하겠습니다.

 

또한, 다른 많은 PaaS 솔루션이 존재하지만, 가장 일반화가 가능(대부분 요소와 동작이 비슷하다)하다고 판단되는 Cloud Foundry를 기반으로 설명 드리도록 하겠습니다.

How to work in PaaS

Image  3  PaaS 는   어떻게   동작하는가 ? –  설치 및 배포  (Cornelia, 2013)

최초에 Cloud Controller에서 명령을 입력 받아 Messaging을 통하여 배포 처리를 하게 됩니다. 이 때 Blobstore에 응용프로그램을 빌드하도록 하고 그 결과물을 DEA(Droplet Execution Agent)-컨테이너라고 보셔도 무방할 것 같습니다-에 설치(배포 및 실행)하고, 설치된 정보(IP, Port, Host name, Domain name)Messaging을 통하여 Router에 등록하게 되고, 사용자는 Router에 등록된 도메인 네임을 통하여 서비스에 접근할 수 있도록 한다.

 

그렇다면, 만약 DEA에 설치 및 실행중인 응용프로그램에서 문제가 생기거나, 처리 요청이 과도하게 집중된다면 어떻게 처리할까? 사실 IaaS에서는 처리 요청이 집중되고 응답에 대한 일관된 반응을 위해서 Autoscale 기능을 활용하여 처리율을 높이는 노력이 있습니다. 그렇다면 PaaS에서는 어떻게 처리할까?

 

Image  4   Fault Tolerance  in PaaS  (Cornelia, 2013)

설치된 응용프로그램은 Messaging을 통하여 Health Manager에 상태(Desired State, Actual State)를 지속적으로 전송 또는 확인 받습니다. 만약 설치된 응용프로그램에서 원하는 상태 즉 잘못된 것을 인지하게 되면 Health ManagerCloud ControllerBlobstore를 통하여 응용프로그램을 다시 설치 및 실행(배포)할 것을 명령하게 되며, 새로 배포된 응용프로그램은 Messaging을 통하여 Router에 자신의 정보를 등록하도록 하게하며 서비스의 영속성을 유지하게 됩니다.

 

한 가지 주의할 것은 요즘 유행중인 Cloud Native(이하 MSA)기반의 소프트웨어 또는 프레임워크에서도 Fault tolerance 또는 High Availability를 제공하고 있고, PaaS에서도 위에서 설명한 것과 같이 동일 기능을 제공하고 있으며 형태와 기능 또한 비슷한 것을 알 수 있습니다.

 

하지만, 둘 간의 차이가 있다면 복구 방법이 될 것입니다. MSA기반에서는 문제가 되는 모듈을 Circuit Breaker Pattern이 동작하며 격리(isolation)하고, (누군가에 의해서) 재배포가 이루어지면 응용프로그램을 다시 Router기능을 하고 있는 곳에 Service Discovery 모듈에 의해서 등록하게 됩니다(중요한 것은 배포 요청을 직접 하고 있지 않는다는 것입니다).

 

반면, PaaS에서는 응용프로그램에서 문제가 생긴다면 Service Mesh에 등록되어있는 응용프로그램이 배포되어 있는 서버 정보를 격리하거나 하는 동작은 어려울 수 있습니다. 대신 Blobstore에서 응용프로그램을 다시 배포하도록 지시할 수 있습니다.

 

PaaS기반과 Software architecture 기반의 Fault tolerance, High Availability를 지원하는 방법의 차이에서 오는 차이점은 구분하고 생각할 필요가 있습니다(실제 이런 부분을 확실히 구분하지 못하는 분이 회의를 와서 PaaS가 있는데 MSA기반으로 해야 하느냐를 비지니스 적으로 방해하는 경험을 한 적이 있는데 개발자로서 참으로 답답했더랬습니다).

Generation of PaaS Solution

Image  5  History of PaaS

 구분

주요사례 등장 연도

특징

1세대

- Heroku(2007)
- Google App Engine(2008)

- 앱 환경을  포함한 소스코드를 자동 배포할 있는 서비스
- 'Heroku Button' 사례

2세대

- Cloud Foundry(2011)
- OpenShift(2011)

- 오픈 소스 PaaS 솔루션
- 1세대 PaaS 벤더의 종속성 탈피
- 자체적인 플랫폼-마켓플레이스 구축 가능
- Cloud Native App Microservice 개념화

3세대

- Kubernetes(2014)

- 컨테이너 플랫폼 CaaS

- AWS Lambda(2014)

- 서버리스 런타임 FaaS

Table 1 Generation of PaaS

 

PaaSIaaS 이 후 Google에서 Google App Engine이라는 PaaS 1세대 서비스를 출시하면서 시작되었다 보시면 될 것 같습니다. 앱 환경을 포함하여 소스코드를 자동으로 배포 하는 것에 주로 서비스 맞춰져 있었습니다.

 

2세대 PaaS 부 터 지금의 모습을 조금 씩 갖춰져가기 시작합니다. 하지만 <Image 5>, <Table 1> 에서 보는 것과 같이 Docker가 후에 더해지고, Cloud Native 기반의 MSA개발 방법론이 유행하며 지금까지 오게 되었습니다. Docker서비스의 유행은 3세대에 접어들면 Kubernetes(k8s)의 개발로 이어졌고 지금은 2세대 PaaS서비스들이 Kubernetes를 바탕으로 서비스를 지원하고 있음을 공표하고 있습니다(요즘에는 K8S 지원안되는 PaaS는 조금 뒤쳐진 감을 주는 것이 당연합니다).

 

e.g.) OpenShift4.3 버전에서 부 터 자체 Engine을 거두고 Kubernetes를 기반으로 서비스를 지원하고 있다.

 

그리고, 3세대의 또 다른 형태로 FaaS(Function as a Service)를 들 수 있다. 저로서는 SaaS라고 볼 수 있지만, Functional하게 동작할 수 있는 Language를 제공하고 특정 URL의 요청이 있으면 작성된 Function이 실행되고 답을 돌려주는 서비스가 나타나게 됩니다. 대표적인 서비스가 AWSLamda입니다. 또 다른 이름으로는 Serverless라고 말하며, 실행 시간에 비래하여 요금을 부과하는 기능을 제공하는 SaaS형태와 유사한 FaaS 서비스를 제공하고 있습니다.

List of PaaS Solution

Open-source

  • OKD-Computing platform as a service product from Red Hat previously known as OpenShift Origin
  • Micro-Platform for cloud native development
  • Dokku-Smallest PaaS implementation you’ve ever seen
  • CapRover-App/database deployment platform and web server package
  • Flynn-Simple, turnkey solution to cloud, containers, ops
  • AppScale GTS-Open Source Implementation of Google App Engine
  • CloudFoundry-Part of the Pivotal Initiative
  • Tsuru-Extensible and open source Platform as a Service software

Commercial or Enterprise

  • AWS Lambda
  • Plesk
  • Salesforce Platform
  • Platform.sh
  • Salesforce Heroku
  • Render
  • Google App Engine
  • SAP Integration Suite
  • Red Hat OpenShift

Conclusion(결론)

앞서 설명한 것과 같인 PaaS는 프로그램을 서비스 하는데 있어서 IaaS영역 이하를 신경쓰지 않아도 서비스를 빌드 및 배포하고 서비스하며, 문제발생시 빌드 및 배포를 자동화하여 서비스의 고가용성(High Availability)을 제공하고 됩니다. 이를 위해서 다양한 영역의 서비스 지원을 위한 기능 등을 제공하고 애플리케이션 제공에 집중할 수 있도록 플랫폼을 제공하는 것이 PaaS라고 볼 수 있습니다.

 

물론 PaaSCPI라고 하는 현재는 표준이라 말할 수 있는 기능을 통하여 IaaS와 연동하고 있습니다. PaaSIaaS를 기반하여 제공된다는 것을 기억해야 합니다. 또한, 다음 편인 SaaS도 기본적으로 PaaS를 기반하고 있습니다. 다음 SaaS편에서 또 뵙겠습니다.

 

인용 참고 자료

BIBLIOGRAPHYSamJohnston. (2008). Infrastructure as a service. 검색됨: Wikipedia: https://en.wikipedia.org/wiki/Infrastructure_as_a_service

AlexWilliams, & LawrenceEHecht. (2017-04-20). Platforms, Containers and the Semantics of PaaS - The New Stack. 검색됨: THE NEW STACK: https://thenewstack.io/semantics-of-paas/

StephenWatts, & MuhammadRaza. (2019-06-15). SaaS vs PaaS vs IaaS: Whats The Difference & How To Choose. 검색됨: BMC Blogs: https://www.bmc.com/blogs/saas-vs-paas-vs-iaas-whats-the-difference-and-how-to-choose/

CorneliaDavis. (2013-11-21). Cloud Foundry Technical Overview. 검색됨: slide share: https://www.slideshare.net/cdavisafc/cloud-foundry-technical-overview