mesos解决的问题
节选自《Mesos大数据资源调度与大规模容器运行最佳实践》
在现代企业中,有许多分布式应用,大多数企业会为每个应用建立单独集群来为其提供相互隔离的运行环境。比如hadoop集群、kafka集群、zk集群等(通常还区分生产和测试环境)。这种静态划分的方式
- 资源的利用率比较低,比如生产环境很忙,测试环境很闲;或kafka很忙,hadoop较闲。但资源不能挪过去用。
- 每个应用都要重复实现分布式基础服务(zk解决了一致性问题)
- 加大了开发和运维人员的工作量。
上述情况就好像是在没有操作系统的电脑上开发程序,需要自己去管理所有的硬件设备。mesos通过为集群提供一个操作系统内核来解决上述问题。通过提供一种高层次的抽象,mesos可以让开发人员将分布式集群当成一台高性能电脑那样来开发程序。mesos提供了一系列构建大规模分布式系统的元语(是不是很熟悉),诸如资源分配、部署、监控及资源隔离,隐藏底层硬件设施相关的细节。开发人员只需要知道他们获取什么资源,而无需考虑如何获取这些资源,以对待一台计算机的方式来对待整个集群。同时,将所有资源汇集到一个资源池中来避免静态划分,提高可运维性及资源利用率。
补充
Spark 程序是如何跑起来的?资源管理器完成的任务是:
维护每台机器上的剩余资源量,并提供给应用,让应用能运行 Task 帮应用启动并运行 Executor 和 Scheduler 帮应用可靠地在 Scheduler 和 Executor 之间传递 Task 运行需要的信息,以及 Task 运行过程中的状态更新信息。
mesos和它的圈子
服务 | 角色 |
---|---|
mesos | 提供framework、scheduler、executor等基本抽象,类似os提供进程抽象 |
marathon | 类似init.d,运行长服务 |
chronos | 类似cron |
共享文件系统 | 类似于磁盘,在集群中(master、slave、scheduler、executor)有一个统一的视角来对待资源 |
一致性服务 | 这点是集群特有的 |
ip/port管理 | 这涉及到负载均衡、服务发现等 |
docker | 进程是地址空间隔离、docker是单机资源隔离,mesos基于此实现集群资源的隔离 |
隔离是mesos这种集群操作系统的基本需求,即运行的任务不能互相干扰。但光隔离是不够的,隔离的资源要分配,待执行的任务要调度。比如,docker将10台host变成了n个container,那么新来一个任务,部署在哪个机器等如何决定?
当然,docker除了隔离,其镜像概念也十分出色,但这已经不是集群操作系统的范畴了。