4 服务编排 - Mesos

 

初见

Program against your datacenter, like it's a single pool of resources.

在你的数据中心上运行程序,就像运行在单个的资源池一样

Apache Mesos abstrcts CPU, memory, storage, and other compute resources away from machines (physical or vitual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.

Mesos会从机器(物理机、虚拟机)上抽取CPU、内存、硬盘等资源,构建一个方便部署、高效运转的可容错的分布式系统

原理

调度框架

两级调度架构

第一级调度:Mesos master一行

由Mesos master调用Mesos Slave,每个Slave启动的时候都会注册到master,master协调全部Slave,以及确定Slave的资源

第二级调度:由Framework组件组成(红色虚线部分)

Framework包括:调度器执行器

Framework被注册到Messos,以使用Messos集群中的资源

调度流程

注:Agent === Slave

执行步骤

第一步:Slave 1 向master汇报它的空闲资源(4个cpu,4g内存)

第二步:

第三步:framework的调度器,和master说:需要在slave上运行两个任务(共占用3个cpu,3g内存)

第四步:master向slave下发任务,分配资源给framework的执行器。之后由执行器启动这两个任务(Executor和Task)

说明

此时,还有1g内存和1个cpu没用,可以分配给其他任务来运行

总结

  1. framework的调度器:用来和mesos master谈判资源的:「我需要多少资源,你的资源够不够,给我哪个资源用」
  2. 然后把执行器发给slave,在slave上执行
    1. 执行器:可以理解为一段代码,可以和slave对接的代码

隔离模块

目的:实现同一个slave上运行多个任务

机制:进程隔离机制(如使用Docker本身的隔离机制)

资源邀约和分配

策略

资源邀约:

1 由master向注册在上面的framework发送资源邀约,包含:

2 由master提供资源给其framework,分配策略对所有的framework通用

3 如果资源情况不满足,framework可以拒绝资源邀约,master将邀约发送给其他framework

4 slave定期向master报告其可用资源


任务类型:

mesos上可以运行不同的资源类型,取决于你的framework。如:

  1. 马拉松Marathon,适合运行长期的服务,如web服务、缓存、数据库
  2. Co....,适合运行周期性的作业,如数据备份、数据导出

常用Framework

Marathon

Mesos + Marathon 对比 原始Linux内核

说明:

  1. Marathon + Mesos相当于系统内核
  2. Marthon相当于内核中的外壳管理程序,如systemd
  3. 区别:Mesos不只是一台机器的内核,它可以调度成千上万个机器的内核,实际上它是一个数据中心的内核


Mesos服务整合:mesos、Marathon、负载均衡、服务发现

流程一(黑线)服务如何运行:资源邀约&运行任务(调度器和执行器的工作过程)

  1. 报告资源
  2. Mesos向framework(马拉松)发送邀约
  3. framework发送任务和资源请求(在哪个slave上运行,需要多少个CPU和内存),把执行器发给master
  4. master向slave发送执行器
  5. slave调度执行器,启动任务
    1. 例一:tomcat web服务
    2. 例二:dubbo服务

流程二(蓝线)客户端如何访问:服务运行起来后,客户端获取响应的过程

  1. 客户端访问web服务,通过Marathon-lb(marathon提供的一个负载均衡和服务发现的实现,基于HAProxy,会订阅Marathon的一个事件,知道Marathon上运行的所有程序信息,与Marathon有通讯)
  2. HAProxy访问到具体的Slave,把执行的结果回传给Client

流程

解决服务编排问题

服务发现、负载均衡

:所有服务的注册中心,决定某个任务具体运行在哪个Slave的哪个端口上,它对每个服务的具体信息都清楚

:可以理解为Nginx,其HAProxy和Nginx的功能相似。区别:Nginx的配置是手动配置的,HAProxy的配置是根据Marathon-loadbalance动态更新其配置的

以上,实现了服务发现和负责均衡功能

服务部署

流程:

  1. 做一个Docker镜像
  2. 在Marathon平台上,把服务建立起来,把镜像配置进去,指定一些信息(端口号)
  3. 点击「部署」,所有服务调度流程就运行起来了

哇...这么简单!

服务更新

流程:

  1. 找到原来的服务,修改镜像版本,保存

哇...下巴掉了...

服务扩缩容

流程:

  1. 修改一个字段,点击保存...

特征

Mesos

  1. 强大的资源管理:保证集群内的用户平等的使用资源
  2. Kernel和Framework分离:Mesos只负责资源的调度和管理,轻量、灵活,可以让各种程序,都使用Mesos的资源。很多厂商都支持,如果没有合适的Framework,可以自己开发。
  3. 门槛低,易使用:集群环境易搭建,长期运行的服务用Marason就好。(如果有特别的应用,需要自己实现Framework的话,门槛就高了)
  4. 大厂使用(Twitter、Apple、Uber、爱奇艺)

Marathon

  1. 高可用(支持集群)
  2. Constraints(限制、约束):举例 - 一些机器的CPU好,一些机器的网络好,可以给这些机器打标签,在资源邀约的时候,可以选择有指定标签的资源
  3. 服务发现&负责均衡:Marathon相当于一个注册中心,Marathon-lb借助于它实现了服务发现和负载均衡的功能
  4. 健康检查:Marathon的执行器里有「健康检查」的功能,三种方式:
    1. 基于HTTP:web服务一般会加这个健康检查,访问一个固定的页面,返回的code是200,认为服务是正常运行的;连续多次不是200,说明不健康,Marthon将其停止,再启动一个新的实例
    2. 基于TCP
    3. 基于Shell命令
  5. 事件订阅:自己写的应用可以向Marathon注册一个事件订阅,Marathon会把事件都推送给Endpoint,包括服务运行、停止、被杀掉等事件
  6. 完善的REST API、漂亮的UI,方便查看所有服务的状态

架构图