CDN边缘节点容器调度实践(上)
又拍云容器云是基于 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 的指令下发过程中,主要包括两个类下发指令:
- 实例的创建,如增删改查,把客户增删改查请求转变为对容器的操作
- 镜像操作,如镜像拉取,镜像查询。比如 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边缘节点容器调度实践(上)的更多相关文章
- CDN边缘节点容器调度实践(下)
5月27日,OSC 源创会在上海成功举办.又拍云系统开发高级工程师黄励博在大会分享了<CDN 边缘节点容器调度的实践>.主要介绍又拍云自主开发的边缘节点容器调度方案,从 0 到 1 ,实现 ...
- 边缘节点 如何判断CDN的预热任务是否执行完成刷新 路由追踪 近期最少使用算法
阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.阿里云CDN分担源站压力,避免网络拥塞, ...
- CDN 边缘规则,三秒部署、支持定制、即时生效,多种规则覆盖常用业务场景
2017年的最后一周,又拍云进行了一次重要升级,将自定义 Rewrite 升级为"边缘规则".互联网应用场景的日益多样化,简单.方便.快速的根据不同应用场景实现不同的功能变得越来越 ...
- 看KubeEdge携手K8S,如何管理中国高速公路上的10万边缘节点
摘要:为保证高速公路上门架系统的落地项目的成功落地,选择K8s和KubeEdge来进行整体的应用和边缘节点管理. 一.项目背景 本项目是在高速公路ETC联网和推动取消省界收费站的大前提下,门架系统的落 ...
- CDN之多边缘节点负载均衡--学习笔记
一.剧情 剧情是这样的,本次的多边缘节点负载均衡实验,1个LVS四层负载均衡集群和1个Nginx为反向代理的七层负载均衡集群,由Bind dns解析作为 主负载均衡服务器,调度两个集群,中间层有一台W ...
- Kubernetes+Docker+Istio 容器云实践
随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...
- 边缘节点服务ENS重磅升级 阿里云首次定义“边缘云计算”概念层层深入
随着5G.物联网时代的到来以及云计算应用的逐渐增加,传统集中式的云计算技术已经无法满足终端侧“大连接,低时延,大带宽”的需求.结合边缘计算的概念,云计算将必然发展到下一个技术阶段,也就是将云计算的能力 ...
- 国内首个全域边缘节点服务发布,阿里云助力企业把握5G机遇
7月24日,阿里云峰会开发者大会在上海世博中心举办.作为2019年首场最受瞩目的云计算开发者大会,阿里云携一众云计算技术大牛与开发者面对面,探讨各自领域的技术干货与前沿趋势.同时,也发布了多项重大重磅 ...
- 《CDN 之我见》原理篇——CDN的由来与调度
CDN是将源站内容分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术.它能够有效解决网络带宽小.用户访问量大.网点分布不均等问题. 为了让大家更全面的了解 ...
随机推荐
- 机器学习之--kmeans聚类简单算法实例
import numpy as np import sklearn.datasets #加载原数据 import matplotlib.pyplot as plt import random #点到各 ...
- hbase_2
====HBase API========================================================= ** 配置maven依赖(pom.xml),不需要hado ...
- Scrapy框架之CrawlSpider
提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基 ...
- Python3 类和继承和组合
import random as r class Fish: def __init__(self): self.x = r.randint(0,10) self.y = r.randint(0,10) ...
- dedecms 文章根据 权重排序
原文链接 一: dede:list 标签 找到 /include/arc.listview.class.php if($orderby=="senddate" || $orde ...
- -bash:syntax error near unexpected token '('
在Xshell5中编写int main(int argc,char** argv)时, 出现-bash:syntax error near unexpected token '(' : 可是我是按照 ...
- thinkphp 找数据库某个字段为空的数据,PHP 数据调取 空数据
$arr['dingwei'] = array('EXP','is null');
- python os.walk()方法--遍历当前目录的方法
前记:有个奇妙的想法并想使用代码实现,发现了一个坑,百度了好久也没发现的"填坑"的文章~~~~~~~~~ 那就由我来填 os.walk()支持相对路径 例如 os.walk(&qu ...
- python语法_函数
---恢复内容开始--- 函数: 1 减少重复代码 2 定义一个功能,需要直接调用 3 保持代码一致性 def funcation_name(参数s): 功能代码块0 参数可以为多个,传入时按照前后 ...
- Linux下CenOS系统 安装Mysql-5.7.19
1.输入网址https://www.mysql.com/downloads/,进入downloads,选择Community 2.选择对应的版本和系统: 输入命令:wget https://cdn.m ...