티스토리 뷰

카테고리 없음

Cloud-Native

Quill. 2019. 2. 16. 13:20

클라우드 네이티브(Cloud Native)의 지향점이 안정성과 효율성, 빠른 변화대응이라고 하지만, 정작 CNCF(Cloud Native Computing Foundation)의 페이지가 이렇게 빨리 변할 것이라고는 생각하지 못했다. 다음과 같이 클라우드 네이티브의 정의 (Cloud Native Definition v1.0)가 공식 문서로 재탄생했다. 가장 크게 바뀐 내용은 컨테이너가 필수조건이 아니라는 것이다.

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.
https://github.com/cncf/toc/blob/master/DEFINITION.md

클라우드 네이티브 시스템(Cloud Native System)은 다음과 같은 조건을 만족해야 한다. 먼저, 컨테이너로 구성해야 한다. 이 말은 도커(Docker)와 같은 기술을 사용해야한다는 의미이기도 하지만 보다 깊은 뜻이 따로 있다. 핵심은 어플리케이션(Application/Service)을 소프트웨어 컨테이너(Software Container)로 격리(Isolation)시켜서 구동해야 한다. 그래서 개발 편의성을 높이고, 코드의 변경을 빠르게 반영할 수 있도록 해야 하며, 재사용을 높여서 생산성을 높이고, 운영방식을 단순화해야한다. 컨테이너로 격리하면, 옆의 다른 어플리케이션의 간섭없이 쉽고 빠르게 내가 원하는 컨테이너를 띄울 수 있다. 반대의 경우에는 원하는 컨테이너만 쉽게 빼낼 수 있다. 컨테이너는 사실상 프로세스이므로 가상기계(Virtual Machine)보다 적은 비용으로 어플리케이션을 실행할 수 있다. 여기서 말하는 비용은 실행 시간 및 소모자원 모두를 말한다. 그렇기 때문에 코드의 변화가 잦아도 빠르고 영리하게 적용할 수 있다. 그래서 개발 편의성을 높일 수 있고 코드 변경을 빠르게 반영할 수 있으며, 혹시 문제가 발생해도 쉽게 이전 상태로 돌릴 수 있다. 도커의 경우 도커 이미지(Docker Image)는 버전관리(Version Control)가 되고 공유가 된다. 따라서 다른 사람이 만들어 둔 이미지를 효율적으로 활용할 수 있기 때문에 재사용을 통한 생산성을 높일 수 있다. 게다가 최종 실행 이미지에 태그(Tag)를 붙여서 운영환경에 배포할 대상과 원상복구 할 순간을 지정할 수 있다. 이렇게 하면 운영환경에서의 많은 작업들을 단순하고 간결하게 만들어 준다. 따라서 개발할 때는 실전처럼 운영은 연습처럼 대응할 수 있다.

다음, 컨테이너는 중앙에서 효율적으로 관리할 수 있는 방식 및 도구를 활용해서 관리해야 한다. 도커가 처음 소개된 이후에 많은 시간이 흘렀으나 운영환경에서 도커를 적극적으로 활용하지 못했던 여러 가지 이유 중 가장 큰 것은 클러스터(Cluster) 기반의 오케스트레이션(Orchestration)이 잘 동작하지 않았기 때문이다. 쿠버네티스(Kubernetes), 메소스(Mesos)는 클러스터 환경에서 컨테이너를 관리하기 위한 도구로 발전했다. 그래서 이제 도커와 클러스터 관리도구가 만나 비로소 컨테이너를 효율적이면서도 안정적으로 활용할 수 있게 되었다. 도커는 표준을 만들었고 쿠버네티스는 시장을 만들었다.

마지막으로, 마이크로서비스(Micro-services)를 바탕으로 삼아야 한다. 마이크로서비스는 많은 사람들이 들어봤고, 알고 있는 단어가 되었다. 마이크로서비스를 지향해야 하는 가장 큰 이유는 변화하는 세상에 효율적이면서도 유연하게 대응해야 하기 때문이다. 이러한 원칙은 컨테이너(Container) 기술이라고 해서 달라지지 않는다. 앞에서 이야기한 특징과 연결해서 생각해보면 왜 마이크로서비스를 기반으로 해야 하는 지 쉽게 알 수 있다. 코드를 빠르게 반영해야 하고, 생산성을 높여야 하며, 운영을 단순화해서 안정적으로 유지해야 하는 이유는 소비자를 위해서다. 계속 변하는 시장상황에 빠르게 대응해서 기능을 개선하는 것과 예측하지 못한 오류를 빠르게 해결해서 소비자/사용자/고객이 불편함을 느끼지 않도록 대처하는 것을 동시에 해야 하기 때문이다. 마이크로서비스도 이와 같은 애자일 철학과 뜻을 같이한다. 서비스가 커지면 변화를 적용하는 것이 쉽지 않기 때문에 이러한 어려움을 피하기 위해 미리미리 작게 나누자고 말하는 것이다. 하나의 서비스가 다뤄야 하는 데이터가 엄청 커지면 새 시스템을 만들어서 정보를 옮기는 것조차 힘들다는 것은 지난 몇 십년간의 경험으로 충분히 알 수 있다. 마이크로서비스는 매우 규모가 크고 사용자가 많으며 계속해서 기능 개선을 해야 하는 어플리케이션 서비스에 적합하며, 이러한 어플리케이션을 보통 웹 스케일 어플리케이션(Web Scale Application)이라고 부른다. 마이크로서비스는 유연함이라는 장점을 가졌다, 하지만 복잡함과 장황함이라는 단점도 함께 갖고 있다. 클라우드 네이티브하다는 것은 규모와 속도 측면에서 압도적으로 크고 빨라야하는 것을 의미하기 때문에 마이크로서비스와 결이 같다.

아래에, CNCF에서 발표한 클라우드 네이티브 시스템(Cloud Native System)의 특징, 속성에 대한 설명이 있다.

Cloud native systems will have the following properties:
(a) Container packaged. Running applications and processes in software containers as an isolated unit of application deployment, and as a mechanism to achieve high levels of resource isolation. Improves overall developer experience, fosters code and component reuse and simplify operations for cloud native applications.
(b) Dynamically managed. Actively scheduled and actively managed by a central orchestrating process. Radically improve machine efficiency and resource utilization while reducing the cost associated with maintenance and operations.
(c) Micro-services oriented. Loosely coupled with dependencies explicitly described (e.g. through service endpoints). Significantly increase the overall agility and maintainability of applications. The foundation will shape the evolution of the technology to advance the state of the art for application management, and to make the technology ubiquitous and easily available through reliable interfaces.
https://www.cncf.io/about/charter/

공지사항