Mesos 0.22.0 新特性介绍
Mesos 0.22.0 于 2015.03.25 发布, 包含了几个新特性,但是看起来实用性都不强。包括:磁盘 quota, 限制 slave 下线频率, 支持服务发现信息等。
下面是官方 release note 列出来的几个主要特性:
- Disk Quota
- 支持 framework 使用显式的的任务状态更新,这是一个 API 层面的调整
- 限制 slave 被断开的频率,这里主要是从 mesos-master 的角度,以免软件的 Bug,导致 slave 被大规模下线
- 启动任务时支持 module hooks
- 匿名模块
- task info 中加入了用于服务发现的信息
下面是我对几个自认为比较有用的特性的简单解读,因为我们线上环境并没有采用 0.22.0,所以理解有限,难免有误,欢迎指正。
Disk Quota
Mesos 支持 POSIX disk 隔离,因为其实现上使用了 du
命令来定时查询每个 sandbox
的磁盘使用量,当然,在非 Linux 但是支持 POSIX 的操作系统上,可能不是使用 du
命令。
Disk quota 需要使用 mesos-slave 的两个参数来开启:
--isolation
指定posix/disk
--enforce_container_disk_quota
,默认关闭
磁盘使用量会以 --container_disk_watch_interval
指定的时间间隔检查一次,
并且可以通过 WEB 接口 /monitor/statistics.json
查看。
需要注意的,posix/disk
隔离只有在使用 mesos
作为容器化方法的时候才生效,使用
docker 并没有用,容器化方式使用 --containerizers
参数指定。
而现在,就 Docker 的火热程度来说,我想使用 docker 作为 mesos containerizer 方法应该在实际中非常常见。
所以,这个特性基本上很少用到。
其实,社区一直对 cpu hard limit 有很强烈的需求,包括我们也是: 在线离线业务混布如果不支持 cpu hard limit,离线任务几乎可以肯定的会影响在线任务的 响应时间。
而这个原计划在 mesos 0.23.0 中加入的 简单 feature, patch 直到现在还没有被接受。
Slave removal rate limit
限制健康检查失败的 slaves 下线速率,主要是考虑到可能由网络或者 bug 导致的大规模
slave 结点被断开。通过 master 的选项 --slave_removal_rate_limit
指定。例如:
$ --slave_removal_rate_limit=1/10mins,10 分钟内只能下线 1 个
$ --slave_removal_rate_limit=2/3hrs,3 小时内只能下线 2 个
这个特性在一定程度上还是比较有用的,但是考虑到如果是由于网络抖动等原因造成的, 那么 slave 在网络恢复时会自动重新注册,恢复 executor,所以只能算是一个 nice to have 的特性。
服务发现信息
Mesos 添加了 discovery info 可以让框架自定义这部分信息用来做服务发现, 所有这些信息会合 task 中的其它信息被 master 保存,并且可以通过 master 的接口查询,但是,目前来看,Marathon 作为 mesos 生态中最常用的 long-running service 框架,本身就已经支持类似功能了,所以直接使用 mesos 的服务发现信息看起来没有什么实际需求。
另外,mesos 社区还开发了 mesos-dns 这个项目,作为一个服务发现的组件。
从 mesosphere 对 mesos-dns 的介绍来看,mesos-dns 支持 mesos 任务内的服务发现, 也就是 service 和 client 都必须是运行在 mesos 集群里,以 mesos 任务的方式。 所以,这种用法也不常见,最常见的应用场景是将 service 运行在 mesos 中,而 client 很可能来自各个地方,包括外网用户。
所以,mesos-dns 用处也不大。