PaaS vs. CaaS

PaaS

PaaS가 나오기 전에 개발팀은 개발한 어플리케이션에 대해서 인프라를 구축하고 유지해야 했다. PaaS는 어플리케이션이 실행되는 플랫폼을 제공하기에 개발자에게는 전례없는 민첩성을 제공했다.
 PaaS는 생산성을 향상 시켰지만, 개발자의 선택을 제한 시켰다. 그러나 이런 제약에도 불구하고 인프라를 구축하고 유지해야 했던 기존 단점을 상쇄시키기에 충분 했기에 오랜 기간동안 많은 기업에서 선호했었다.

강점

  • 개발자에게 작업에 대한 오버 헤드가 발생하지 않음, 개발자는 코드만 집중할 수 있고 어플리케이션은 자동으로 배포됨
  • 12 factor 어플리케이션에 적합

단점

  • 기본적으로 Stateless 어플리케이션만 지원
  • 벤더를 기준으로 Resource가 제한 될 수 있음
  • 사용 편의성이 유연성을 희생 시킴
  • 많은 PaaS 제공 업체가 Enterprise에서 진전을 이루지 못한 이유는 제공하는 모델이 제한적이기 때문, 수 Peta byte의 데이터를 가진 수잭 개의 어플리케이션을 관리하는 조직의 경우 동그란 구멍에 정사각형 구멍을 맞추기 위해 비즈니스를 크게 변경하지 않고 모든 것을 관리할 수 있는 팀을 만드는 것이 효율적

CaaS

Container의 출현으로 PaaS를 무용지물로 탈바꿈 시켰다. Container를 사용하면 개발자가 어플리케이션 구성 요소를 쉽게 설명하고 Container 이미지를 작성할 수 있다. 이런 방식으로 구축 된 Container 이미지는 Middleware 또는 가상화 계층없이 모든 시스템에서 원할하게 실행되는데 필요한 모든 기능을 갖추고 있다. 따라서 일반적인 가상화 시스템보다는 효율적이다.
 Container와 같은 기술을 사용하면 어플리케이션이 플랫폼에 독립적으로 된다.

강점

  • 복잡한 엔터프라이즈 배포
  • Stateful and Stateless 어플리케이션 모두 이용 가능
  • Orchestration 지원
  • Container를 사용하여 Public Cloud로 Lift & Shift
  • VM 관리 대비 Container는 수백개가 존재해도 관리 할 운영체제는 단 하나

단점

  • 개발자가 어플리케이션을 배포하기 위한 작업을 숙지해야 함 (PaaS와 비교하여 자동화된 DevOps 지원이 부족)

PaaS의 미래

Container는 PaaS를 만들게 된 문제에 대해서 새로운 해결책을 만들었다. Container는 개발자가 PaaS를 사용하여 수행했던 많은 협약에서 자유롭게 해줄 것을 약속한다. 예를 들어서 Container 관리툴을 사용하여 어플리케이션을 배포할때 원하는 언어로 코드를 작성하고 원하는 구성 요소를 사용할 수 있지만, PaaS는 일반적으로 몇 가지 언어와 구성 요소로 제한한다.
 Container도 PaaS와 마찬가지로 운영 관점에서 관리가 필요하다. Container 관리 소프트웨어는 Container Deploy, Monitoring 및 관리를 위한 서비스를 제공함으로써 고정적 제약없이 PaaS가 할 수 있는 모든것을 할 수 있다.
 현재 PaaS를 사용하고 있는 일부 회사에서는 PaaS를 유지할 수 도 있다. 그러나 Container는 어플리케이션을 간단하고 다양한 프로세스로 제공하기에 많은 회사들이 Container로 전향을 한다.

Why Kubernetes?

Kubernetes는 AWS, Azure, GCP 또는 Private에서의 실행 여부에 관계없이 어디서나 실행할 수 있고, 동일하게 작동한다.
 Kubernetes는 PaaS가 아니며 PaaS를 구축하기 위한 기반이고, 커뮤니티에 의해 Kubernetes를 둘러싼 도구 및 애드온이 많이 생기고 있다.

모듈성을 통한 관리 향상

Container를 사용하면 어플리케이션을 명확하게 분리하여 더 작게 분해 할 수 있다. 개별 Container 이미지에 제공되는 추상화 계층을 통해서 분산 어플리케이션을 구축할 수 있다. 이런 모듈식 접근 방식은 의존성을 격리하고 작은 구성 요소를 잘 조율하게 광범위하게 사용할 수 있다.
 그러나 이런 부분은 Container 만으로 달성 할 수 없다. 통합하고 조율하는 시스템이 필요하고 Kubernetes는 단일 어플리케이션으로 제어 되는 Container Collection in Pods를 사용하여 지원한다. Container는 파일 시스템, Kernel name space 및 IP주소와 같은 자원을 공유함으로써 너무 많은 기능을 하나의 Container 이미지로 만드는 유혹을 제거한다.

배포 및 업데이트

Kubernetes 배포 컨트롤러는 여러가지 복잡한 관리 작업을 단순화 한다.

  • Scalability: Pod를 수평 확장 방식으로 배포 할 수 있고, 언제든지 확장/축소가 가능하다.
  • Visibility: Status Query기능을 사용하여 프로세스 및 실패한 배포를 식별한다.
  • Time savings: 언제든지 배포를 중지하고 다시 시작할 수 있다.
  • Version control: 최신 버전의 어플리케이션 이미지를 사용하여 배포 된 Pod를 업데이트하고 현재 버전이 안정적이지 않을 경우 이전 배포로 Rollback할 수 있다.

References: