Intro
클라우드 컴퓨팅 기술이 발전하고 보다 쉽게 서버를 확장할 수 있게 되면서 변경 가능한 서버, 확장 가능한 서버를 위한 설계가 중요시 되고 있습니다. “Pets vs Cattle”은 한마디로 변경 불가능한(Immutable)인프라와 변경 가능한(Mutable)인프라에 대한 개념이라고 할 수 있습니다. 오늘은 “Pets vs Cattle”이 무엇이고 탄생 배경이 어떻게 되는지 알아 보도록 하겠습니다.
탄생 배경
Pets vs Cattle 서비스 모델은 Microsoft의 엔지니어인 Bill Baker가 Scaling SQL Server 2012라는 프레젠테이션을 통해 이 것을 처음 소개했습니다.
Bill은 이 발표에서 클라우드나 클라우드 컴퓨팅에 대해 이야기하지 않았습니다. 그의 발표는 대부분 "스케일업" 대 "스케일아웃" 아키텍처에 관한 것이었습니다.
시간이 지나면서 많은 사람들이 이 컨셉에 대해 이야기를 하기 시작했고, 오늘날에 인프라 서버를 운영하는 개념으로 정립 되었습니다.
Pets은 무엇이고 Cattle은 무엇인가
Pets
은 사랑스럽게 잘 돌봐주어야 하는 존재입니다. 이를 서버에 비유해보면 만약 서버가 다운이라도 되면 관리자가 전체 점검을 수행하고, 서버를 재부팅하고 로그를 하나하나 확인하고 구성 요소를 교체하여 전반적인 상태를 확인합니다. 또한 항상 이상이없는지 문제 및 성능을 모니터링합니다. 마치 애완 동물에게 하는 것처럼 헌신해야 하며 손이 많이 갑니다.
- 절대 다운될 수 없는 필수 또는 고유한 시스템
- 일반적으로 수동으로 구축, 관리
반면에 Cattle
은 가축인 소들을 의미 합니다. 소들의 귀에 고유한 번호가 적혀져 있는 것처럼 서버들도 각각의 식별번호로 태그가 지정됩니다. 만약 서버가 다운되면 다른 서버로 교체가 가능하고 스케일아웃이 언제든지 가능합니다.
- 자동화된 도구를 사용
- 장애가 발생시 서버를 다시 시작하거나 자동화를 통해 사람의 개입없이 해결
컨테이너에서의 Pets과 Cattle
2015년 Bernard Golden은 이 Pets과 Cattle에서 Cattle을 소가아닌 닭으로 표현하여 유연한 환경에 필요한 컨테이너를 설명했습니다.
닭은 소와 달리 몸집이 작고 공간이 거의 필요하지 않습니다. 즉, 소비하는 리소스를 최소화하면서 더 많이 사용할 수 있습니다. 게다가 닭은 소보다 수명이 훨씬 짧습니다. 클러스터(소) 인스턴스의 수명은 며칠입니다. 용기(닭)의 수명은 분 단위로 측정됩니다.
공간 뿐만아니라 속도라는 요소도 관련되어 있습니다. 물리적 서버는 프로비저닝 및 구성에 가장 오랜 시간이 걸리고 VM(적절한 자동화가 적용된 상태)과 컨테이너가 그 다음입니다. 잘 설계된 컨테이너 모델에 가까울수록 구성 요소 중 하나를 더 빨리 제거하고 교체합니다. 이 모든 것이 기본 제공자와 함께 제공되어 조직이 애플리케이션 소비자의 요구를 충족하기 위해 양방향(스케일업 및 스케일아웃)으로 빠르게 확장할 수 있습니다.
Cattle의 핵심
우선 궁극적으로 서버의 폐기 가능성에 초점을 맞추는 것이 Cattle 개념의 가장 중요한 컨셉입니다. Cattle은 서버를 폐기 할 수 있는 인프라를 말하며 따라서 구성 변경을 최소화하고 프로그램을 가능한 가장 작은 구성 요소로 분해하며 자동화를 활용하여 이러한 모든 움직이는 요들소을 제어할 수 있어야 합니다. 즉, 확장 가능하고 안전하며 유연한 인프라를 만드는 것이 핵심인 것입니다.
이러한 인프라를 위해서는 Cloud
, Infra as a code
, Container ochestration
가 필수 요소라고 할 수 있습니다.
변경 가능한(Mutable) 인프라와 변경할 수 없는(Immutable) 인프라
좀 더 나아가서 변경 가능한 인프라와 변경할 수 없는 인프라에 대해 간단히 알아보도록 하겠습니다. 위에서 설명드린 Cattle은 변경할 수 없는(Imutable)인프라이며 Pets은 변경 가능한(Mutable)인프라 입니다.
온프레미스 데이터 센터와 클라우드에서 서버를 처리하는 방법에는 차이가 있습니다. 유지 관리해야 하고 파괴할 수 없는 기존의 온프레미스 서버와 달리 클라우드의 서버는 임시 서버로 처리됩니다.
- 변경 가능한 인프라: 서버를 수동으로 수정할 수 있습니다. 서버에 로그인하여 구성을 변경하고 패키지를 설치/수정할 수 있습니다.
- 불변 인프라: 일단 배포되면 서버를 수정할 수 없습니다. 구성을 변경해야 하는 경우 기존 이미지를 업데이트하고 새 서버를 가동하여 이전 이미지를 교체할 수 있습니다. 서버가 실행되는 동안에는 구성 또는 코드 변경이 허용되지 않습니다.
'IT > DevOps' 카테고리의 다른 글
[DevOps] docker build시 "failed to solve with frontend dockerfile.v0: failed to read dockerfile ..." 오류 (0) | 2022.07.02 |
---|---|
[Docker] docker proxy설정하는 방법 (0) | 2022.05.31 |
Atlantis 란? (Terraform Pull Request Automation) (0) | 2022.05.11 |
[Git] 폴더 화살표 모양에 클릭 안되는 문제 해결 (0) | 2022.02.16 |
[CI/CD] Github Action과 친해지기 - frontend/backend소스 빌드배포자동화 (0) | 2021.11.18 |