又拍云容器云是基于 Docker 的分布式计算资源网,节点分散在全国各地及海外,提供电信、联通、移动和多线网络,融合微服务、DevOps 理念,满足精益开发、运维一体化,大幅降低分布式计算资源构建复杂度,大幅降低使用成本。

上文是对容器云的简介,又拍云容器云是一个基于 Docker 的边缘容器网络。

过去,又拍云数据中心用的是基于 Mesos 的容器调度平台。它把数据中心的 CPU、内存、磁盘等抽象成一个资源池,Mesos 官方称之为分布式系统内核。

Mesos架构

下图是 Mesos 容器调度平台的架构图。

△ Mesos 架构

Mesos 调度平台相当于数据中心的 Master,同时在每个节点上都有一个 Agent。当每个Agent 启动后会向 Mesos 注册,Agent 携带的资源信息,让 Mesos 决定每个框架的资源数量。当框架收到资源后,再根据需求调度资源。

Mesos Master 调度机制后面是 framework,通过 framework 可以满足数据中心的容器调度。

边缘容器调度方案概述

下面我们简要介绍下又拍云的边缘容器调度方案。又拍云边缘节点容器调度方案需要有一个部署在数据中心的 Master,负责集中调度统一管理。而 Agent 则部署在全国各个边缘节点上,每个节点的每台机器上都会有一个 Agent,负责采集数据,管理 Docker。在边缘运行长期服务,支持故障恢复。同一个节点的一批机器会组成一个集群。另外,因为又拍云有不同需求的客户,所以边缘节点需要部署多种功能,功能部署时要完成容器网络的隔离,还会有一些负载均衡和定制化的需求。

版本 1 实现了调度策略最基本的功能

△ 版本1

上图是最基础的版本1 Master—Agent 架构。最上面是 Hancock (又拍云内部项目名称),它本身就是 Master,App 的拥有者可以通过 API 接口接入,部署任务、创建 Docker 项目到边缘节点。

这两个虚线的框分别表示两个不同的节点,每个节点上数量不等的机器会组成一个小集群,每个机器上会部署一个 Agent, Agent 会负责创建各个 Docker 的 Task,容器服务的用户(App user ) 直接会去边缘节点访问容器服务。

Agent 启动后会上报消息到 Master, 而 Master 会根据用户的请求和上报的消息下发指定给 Agent 。由于边缘节点和数据中心的网络可能处于不稳定的状态,在处理数据的时候会出现超时、延迟等问题,同步操作可能会导致用户的请求一直得不到响应,最终导致信息丢失等问题,因此 Master 与 Agent 的数据交互、消息处理都是异步进行的。这种情况下,用户只要把请求提交到 Hancock Master 上,这个任务就会分发到所有的边缘节点。

下面是 Master-Agent 消息介绍:

  • 上报消息 Agent -> Master
  • 下发指令 Master -> Agent

Resource 消息

当 Agent 启动时会携带 Resource 消息 ,当携带资源信息发生变更时,会更新一次 Resource 消息 。如图所示,Agent 通过节点名和主机名来唯一表示一台边缘设备,设备的资源信包括,网络信息(包括运营商信息、宽带信息),CPU, 内存, 磁盘,可用端口信息等,其中端口段的分配是因为有个摄像头的用户一个服务需要用到几千个端口,这种情况就不再适合逐个端口进行随机或者指定分配,这样维护成本会变得很高。

Offer 消息

Agent 会定时上报 Offer 消息上报给 Master,会发送机器的 load 和当前网络状况的使用情况、CPU、Memory、Disk等使用情况信息,以此维持 Master 与 Agent 之间的联系。

一般来说,Master 可以计算出 CPU、Memory、Disk 的使用情况。但是 load 和网络状况,Master 是无法知晓的,所以每隔一段时间就要上报,以供 Master 合理的调度 Docker 机器,比如不应该再安排服务部署到 load 较高的机器上。上述就是 offer 的作用。

Update 消息

负责提供实例的状态变更,Docker 实例运行成功失败等信息, 由 Agent 实时上报给 Master, 包含任务的状态信息和相关描述。方便 Master 进行故障恢复等操作。

Containers 消息

负责提供机器容器列表, 防止有僵尸任务和任务遗漏, 由 Agent 定时上报给 Master, Master 负责检查。

Master 到 Agent 的指令下发过程中,主要包括两个类下发指令:

  1. 实例的创建,如增删改查,把客户增删改查请求转变为对容器的操作
  2. 镜像操作,如镜像拉取,镜像查询。比如 Docker 镜像很大的时候,在边缘节点拉取镜像可能会超时。所以我们设置了一个单独的镜像操作,保证在创建容器前,可以预先异步提交拉取命令。

△ 处理流程

上图是消息处理流程,当 Agent 启动时上报 Resource、Offer、Container 等定时消息。其中 offer 消息频率最高, 一旦一段时间没有受到 Offer 消息, Master 会尝试迁移这个 Agent 对应机器上的所有容器实例。

上述版本 1 的架构实现了调度策略最基本的功能。当 Master 收到各个集群中 Agent 上报的资源时,通过自定义策略来完成任务调度。一般来说是寻找满足条件的(Node Cpu Mem Disk Port 等)机器。再选择根据带宽、load 等指标,进行权重估算,在估算出权重的前提下进行随机调度。在权重类似的情况下,每次调度尽可能让同一服务的各个实例分布到节点的不同机器,保证在某台机器崩溃的情况下,其他实例正常运行保证高可用。

版本 2 增加 calico,负责网络控制和访问限制

在版本 1 中,Master 和 Agent 已经完成了两者之间的消息交互。App 拥有者可以创建服务,并且在边缘机器上创建 Task。

但我们不希望客户的服务混杂在一起,希望可以隔离不同所有者的容器网络, 可以完成一些访问控制的功能。又拍云使用了 calico 的方案,它是基于 BGP 的路由协议的三层通信模型,不需要额外报文封装。

△ 容器网络(图片来自网络)

如图所示,其中 calico BGP client 负责每个节点和集群其他节点建立 BGP Peer 连接,增长趋势是 O(n^2),它并不适合大规模的集群网络, 解决方法是 Route Reflector,选择一部分节点作为 Global BGP Peer,由它们互联来交换路由信息。而又拍云每个边缘集群都是小规模集群网络,O(n^2) 的增长是可以接受的,并不需要 Route Reflector 的机制。

其中 Felix 负责节点网络相关配置。由它负责配置路由表、iptables 表项等。以便完成访问控制和隔离的功能。

另外,集群中还会有一个分布式的 kv 数据库—— etcd,负责保存网络元数据。

calico 的优点: 三层互联,不需要报文封装。访问控制, 满足隔离网络, 隔离容器。

calico 的缺点: 网络规模限制, iptables 和路由表项限制。

△ 版本2

在我们的场景下,它很好的满足了需求。加上 calico 方案,版本 2 的架构如上图所示。

对内容感兴趣的小伙伴,欢迎关注下我们,《CDN边缘节点容器调度实践(下)》将于明天推送。

CDN边缘节点容器调度实践(上)的更多相关文章

  1. CDN边缘节点容器调度实践(下)

    5月27日,OSC 源创会在上海成功举办.又拍云系统开发高级工程师黄励博在大会分享了<CDN 边缘节点容器调度的实践>.主要介绍又拍云自主开发的边缘节点容器调度方案,从 0 到 1 ,实现 ...

  2. 边缘节点 如何判断CDN的预热任务是否执行完成刷新 路由追踪 近期最少使用算法

    阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.阿里云CDN分担源站压力,避免网络拥塞, ...

  3. CDN 边缘规则,三秒部署、支持定制、即时生效,多种规则覆盖常用业务场景

    2017年的最后一周,又拍云进行了一次重要升级,将自定义 Rewrite 升级为"边缘规则".互联网应用场景的日益多样化,简单.方便.快速的根据不同应用场景实现不同的功能变得越来越 ...

  4. 看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点

    摘要:为保证高速公路上门架系统的落地项目的成功落地,选择K8s和KubeEdge来进行整体的应用和边缘节点管理. 一.项目背景 本项目是在高速公路ETC联网和推动取消省界收费站的大前提下,门架系统的落 ...

  5. CDN之多边缘节点负载均衡--学习笔记

    一.剧情 剧情是这样的,本次的多边缘节点负载均衡实验,1个LVS四层负载均衡集群和1个Nginx为反向代理的七层负载均衡集群,由Bind dns解析作为 主负载均衡服务器,调度两个集群,中间层有一台W ...

  6. Kubernetes+Docker+Istio 容器云实践

    随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...

  7. 边缘节点服务ENS重磅升级 阿里云首次定义“边缘云计算”概念层层深入

    随着5G.物联网时代的到来以及云计算应用的逐渐增加,传统集中式的云计算技术已经无法满足终端侧“大连接,低时延,大带宽”的需求.结合边缘计算的概念,云计算将必然发展到下一个技术阶段,也就是将云计算的能力 ...

  8. 国内首个全域边缘节点服务发布,阿里云助力企业把握5G机遇

    7月24日,阿里云峰会开发者大会在上海世博中心举办.作为2019年首场最受瞩目的云计算开发者大会,阿里云携一众云计算技术大牛与开发者面对面,探讨各自领域的技术干货与前沿趋势.同时,也发布了多项重大重磅 ...

  9. 《CDN 之我见》原理篇——CDN的由来与调度

    CDN是将源站内容分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术.它能够有效解决网络带宽小.用户访问量大.网点分布不均等问题. 为了让大家更全面的了解 ...

随机推荐

  1. SparkStreaming

    Spark Streaming用于流式数据的处理.Spark Streaming支持的数据输入源很多,例如:Kafka.Flume.Twitter.ZeroMQ和简单的TCP套接字等等.数据输入后可以 ...

  2. 2018-2019 20165319 网络对抗 Exp4 恶意代码分析

    基础问题回答 1. 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控 答:1.使用Windows自带的schta ...

  3. Codeforces 938D. Buy a Ticket (最短路+建图)

    <题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...

  4. caffe 根据txt生成多标签LMDB数据

    1. 前提: 已经准备好train.txt, test.txt文件, 格式如下 此处有坑, 如果是windows下生成txt, 换行符为\r\n, 需要替换成 \n才能在linux运行. 可以使用se ...

  5. 首次安装Ubuntu

    初试Ubuntu 双系统的安装 situation: dell(2017购) 固态250G+机械硬盘500G 已经安装windows 10 BIOS 为 UEFI rufus(向U盘写入镜像) Ubu ...

  6. 如何优化UI布局?

    Android系统中填充布局是一个开销巨大的过程,每一个额外的嵌套布局和包含的View,都直接影响到应用程序的性能和响应能力.为了使应用程序流畅地运行和快速地响应,重要的是尽可能地保持布局的简单和避免 ...

  7. JOISC2019 游记

    JOISC2019 游记 Day 1: 試験 (Examination) 题目大意: 有\(n(n\le10^5)\)个人,每个人有两种属性\(s_i,t_i\).\(q(q\le10^5)\)次询问 ...

  8. 学习之路-->大小文件读取并分页展示

    1.读取小文件,并进行分页 商品|价格 飞机|1000 大炮|2000 迫击炮|1000 手枪|123 ..... lis = [] n = 10 #每页显示10条信息 with open('小文件' ...

  9. JavaScript模板引擎Handlebars

    Handlebars模板库简单介绍 Handlebars是JavaScript一个语义模板库,通过对view(模板)和data(ajax请求的数据,一般是json)的分离来快速构建Web模板.它采用& ...

  10. lnmp环境一些基本命令行

    使用service启动/停止/重启相关服务 启动/停止/重启 php服务 service php-fpm start/stop/restart 启动/停止/重启 mysql service mysql ...