Program against your datacenter
like it’s a single pool of resources
Apache Mesos는 Mesosphere DC / OS의 심장부에있는 오픈 소스 분산 시스템 커널입니다.
전체 데이터 센터를 단일 컴퓨팅 리소스 풀로 추상화하여 분산 시스템 실행을 간소화합니다.
기존의 분산환경에서는 특정 머신이 어떤 일을 할 것인지 정해져있고, 이용자가 각 머신에게 명령을 내려 작업을 수행시키곤했다. 반면 Mesos에서는 프레임워크에 명령을 내리게 되고, Mesos 시스템이 알아서 작업을 분배해서 실행하게된다.
Why Mesos?
가장 큰 이유는 자원(CPU, Memory, Disk I/O…)의 효율적인 사용이 가능해진다는 것이다. 머신 별로 정해진 일을 하도록 지정하는 기존의 방식을 Static Partitioning이라고 한다면, Mesos를 이용하면 자원의 Elastic Sharing이 가능해진다.
출처 : mesosphere
여러 대의 머신의 자원을 묶어 하나의 풀처럼 관리함으로서 자원의 종류에 따라, 작업의 시간대에 따라 최대의 자원효율을 뽑아낼 수 있다.
분산시스템커널이니 당연히 Scalability나 High-Availability와 같은 특징들을 가지고 있다.
-
Massive Scale에서 입증된 생산성
UC 버클리에 만들어진 Mesos는 매우 대규모로 운영되도록 설계되었다.
Twitter 및 Airbnb의 엄청난 부하로 테스트되고 개선되었으며, 현재는 세계에서 가장 큰 응용 프로그램 중 일부를 지원
-
컨테이너 및 빅 데이터 지원
Mesos는 다양한 유형의 작업 부하를 지원하여 진정한 최신 응용 프로그램을 구축합니다.
이러한 분산 작업 부하에는 컨테이너 오케스트레이션 (Mesos 컨테이너, Docker 및 Kubernetes), 분석 (Spark), Big Data 기술 (Kafka, Cassandra) 등이 포함된다.
-
확장 성, 최첨단 아키텍처
Mesos의 아키텍처를 통해 기존 플랫폼과 새로운 분산 기술을 동일한 플랫폼에서 실행할 수 있다.
2 레벨 아키텍처를 사용하면 조직에서 앱에 자체 운영 논리를 구축하여 운영을 대폭 단순화 할 수 있습니다.
Architecture
Mesos는 크게 Framework, Master, Agent로 구성된다.
Framework
Task를 스케쥴링하고 Master에게 Task 실행을 요청하는 일을 한다. 여기서 Task는 프로세스나 Docker 컨테이너를 의미한다. Framework는 주어진 API를 이용해 Scheduler와 Executor를 작성하여 만들 수 있는데, 자세한건 여기를 참조하면 되겠다. 하지만 실제로 Framework를 작성할 일은 없고 이후에 다시 설명하겠지만 잘만들어진 Framework인 Marathon이나 Chronos 같은 것들을 이용한다.
Master
Agent 자원을 관리하며 Framework에게는 사용할 수 있는 자원 정보를 알려준다. Framework가 Task 수행을 요청하면 다시 Agent에게 Task를 수행을 요청하는 역할을 한다. 예를 들어 Master가 Framework에게 “현재 네가 사용할 수 있는 자원은 CPU 16개, Memroy 32GB야”라고 알려주면 Framework는 “CPU 2개, Memroy 4GB가 필요한 웹서버를 4개 띄워줘”라고 요청을 하게 되고, Master는 적절한 Agent(들)을 골라서 해당 작업을 수행시킨다.
Master는 Active-StandBy 방식으로 구성되어있다. Zoo-Keeper를 이용해 하나의 서버만 Leader로 선출해서 사용한다.
Agent
이미 앞에서 다 설명했지만 Agent는 실제로 Task를 수행하는 노드이다. Zoo-Keeper 주소를 알고 있기 때문에 Master의 주소도 알 수가 있고, 스스로가 Master 서버에 직접 연결하여 본인의 자원 정보를 알린다.
DC/OS
Data Center Operating System으로 Mesos에 몇 가지 프레임워크를 얹인 시스템이다.
Marathon
Mesos Framework for Docker Orchestration. DockerSwarm이나 Kubernetes와 같은 역할을 한다. Marathon에서는 App이라는 이름으로 Mesos Task를 생성하게 되는데, App은 도커이미지 + 각종설정으로 구성된다. 자원의 양, 컨테이너 개수, 네트워크 설정, 환경변수 등을 설정 할 수 있. HAProxy로 로드밸런싱이 가능하고 RESTful API를 통해서 쉽게 App을 생성/수정/실행/중단 등을 요청 할 수 있다.
Chronos
Linux에서 사용하던 Cron의 분산환경 버전이다. Marathon이 Long-running task에 적합하다면, Chronos는 주기적으로 수행되는 Short-running task에 적합하다.