Mesos intro
-
Upload
dennis-zhuang -
Category
Technology
-
view
608 -
download
1
Transcript of Mesos intro
Apache Mesos 解读庄晓丹 2015-08-14
解决什么问题?• 普通 PC 组成的集群服务已经成为主要的运算平台
• 我们使⽤用 Hadoop,Dryad,Spark,MPI 等等不同框架来进⾏行分布式计算或者存储。
• 每个框架要求的资源不同
• 每个框架的调度不同
• ⾯面临的问题
• 提⾼高集群机器利⽤用率
• 数据共享
• 可扩展,可伸缩:节点,不同版本的框架
解决什么问题?
• 当前的解决办法⽆无法令⼈人满意
• 集群静态分区,不同分区跑不同的框架
• 启⽤用⼀一组 VMs 给每个框架
Mesos• Mesos = Data center kernel
• Scalability to 10,000s of nodes
• Fault-tolerant replicated master and slaves using ZooKeeper
• Support for Docker containers
• Native isolation between tasks with Linux Containers
• Multi-resource scheduling (memory, CPU, disk, and ports)
• Java, Python and C++ APIs for developing new parallel applications
• Web UI for viewing cluster state
Architecture
Resource offer
资源分配• 去中⼼心化调度,调度交给框架,保持 mesos 轻量简单,并使得框架调度性能最⼤大化。
• Resource Offer 资源分配策略,默认提供公平和严格优先两种策略。
• 资源调度⾯面临的问题:⼤大部分 task 很快,但是少部分⻓长期运⾏行的 task 可能占据了集群的⼤大部分资源:
• revoke task,关停任务
• 给每个框架保证最低限额
隔离
• 使⽤用 OS 容器技术,⽐比如 Linux Container,Solaris Projects 等。
可扩展和健壮• Resource offer 可以被 Reject
• 避免频繁 Reject,提供 Filter
• Only offer nodes from List L
• Only offer nodes with at least R resource free
• Resource Offer 接受控制,超时和限量
容灾• Master 轻状态:
• 活跃的 Slaves
• 活跃的框架
• 运⾏行的 Task
• 可以很快地从 slave 和 schedulers 重建这些信息
• 利⽤用 Zookeeper 选举 master
• 框架调度器容灾:框架允许注册多个调度器,⼀一个失败,另⼀一个将被唤醒,这样就可以直接利⽤用框架的容灾策略。
APIs
⿎鼓励框架
• 短任务:资源分配容易,减少重复调度
• 灵活伸缩
• Do not accept unknown resorces
实现: Apache mesos• http://mesos.apache.org/
• 10000 ⾏行 C++ 代码,运⾏行在 Linux,OSX,Solaris 平台上,⽀支持 Java,C++,Python 语⾔言框架
• Hadoop 适配: 1500 ⾏行代码
• MPI 适配: 360 ⾏行代码
• Spark 适配: 1300 ⾏行代码
Benchmark
In both cases, the overhead of using Mesos was less than 4%.
Benchmark
其他数据• 扩展到 50000 个 slave,受限于 EC2 的⺴⽹网络。
• 200 ~ 4000 个 Slave,Master 恢复平均耗时: 4 ~8 秒
• 隔离:30% VS. 550% 的延迟对⽐比
• Media Wiki web server
• 256 个进程的 spin 循环
Marathon• Mesos framework
• Deploy and manage containers (including Docker) on top of Apache Mesos at scale.
API 为例• 打包 API Jars
• 构建 docker image
• 推送到 docker 仓库
• 调⽤用 marathon API 部署
• Marathon 请求 mesos 分配资源,接受后请求 mesos slave 执⾏行任务
• Mesos slave executor 从 docker 仓库拉取指定 image,并启动容器运⾏行,并检测是否正常
• slave 告知 marathon 调度器节点启动,调度器更新 upstream 元信息
• Nginx 每隔 5 秒检测 upstream 元信息,如果有变化就 reload
Marathon API
https://github.com/leancloud/uluru-platform/blob/master/deploy/marathon/uluru-api-prod-ucloud.json
更多
• http://mesos.apache.org/
• http://mesos.berkeley.edu/mesos_tech_report.pdf
• https://mesosphere.github.io/marathon