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 中加入的 简单 featurepatch 直到现在还没有被接受。

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 用处也不大。