火山引擎边缘计算在云边协同方面的探索与实践

news2024/9/29 5:38:23

作者:杜怀宇

近期,由边缘计算产业联盟(ECC)主办的2022边缘计算产业峰会(ECIS2022)以云端直播形式成功举办,峰会以“边云智联 助力行业数字化转型”为主题,汇聚来自全球的商业领袖、国际组织、政府机构、产业伙伴、学术大咖,全方位探讨边缘计算前沿学术与技术、探索新兴技术与边缘计算的深度结合、展现边缘计算创新应用、聚合边缘计算产业生态。火山引擎边缘计算平台研发专家杜怀宇也在大会的边缘原生分论坛分享了火山引擎边缘计算在云边协同方面的探索与实践。本文根据演讲内容整理。

  1. 边缘计算与云边协同

  1. 边缘计算场景下对管控系统建设的挑战

  1. KubeHub-火山引擎边缘计算的数据通道方案

  1. 总结

    • 边缘计算与云边协同

边缘的演进

在过去的十年中,随着音视频等互联网业务的发展促使业务追求更好地用户体验,而基于数据中心的公有云始终存在高时延问题,这就导致时延敏感型业务面临着用户体验的提升瓶颈。同时,网络时延与物理距离直接相关,因此将计算迁移到数据中心之外,成为体验优化的不二之选,边缘计算也由此而来。

火山引擎把从用户到云中心之间所有的算力层都定义为 边缘计算 的范畴,包括:现场边缘、近场边缘、云边缘三层,覆盖1-40ms时延范围,分别提供从用户现场到本地城市节点和区域中心汇聚节点等多种异构算力资源, 并根据地理位置的分布,提供单线、多线等多种网络接入能力,确保用户就近接入,满足业务超低时延的算力调度和网络能力的需求。

云-边-端协同架构

为了更好的发挥新基础设施的能力,技术解决方案也在持续演进。随着整个行业对边缘的理解加深,如何有效地释放边缘能力就成为了新的探索方向。同时,在边缘计算领域,原生的概念也成了热门讨论的话题。边缘原生与云原生理念不同之处在于,边缘原生理念下技术注意力更多地投向稳定性,安全性,以及云端与边缘的垂直扩展能力构建。

从实际需求角度来看,为了提升用户体验,业务倾向于把算力卸载到边缘来降低服务时延,同时也会配合更多种类的硬件来辅助特定计算。这种方式催生出了一种能够混合调动多种资源的解决方案,也就是我们现在称之为云-边-端协同的架构。在云-边-端协同的架构设想中,计算、流量、资源可以按照业务需求来灵活调度,甚至是无缝的平滑迁移,最终会形成一种云和边缘之间的垂直扩展能力。

依托云边协同的管控系统

对于火山引擎边缘计算而言,在边缘原生的背景下去建立管控系统时,就需要同时考虑到基础设施的现状以及所服务的客户的技术诉求。例如:

  • 管控系统,要能抽象各种异构设备,并具备较强的资源纳管能力

  • 提供资源调动能力,要足够灵活足够易用,以便于帮助业务向边缘原生的架构转变

而这些诉求,实际上反映地就是边缘计算中的云边协同问题,要实现云边协同,那么我们就需要在资源,数据,和服务三方面都做到协同。在过往的公有云建设中,常规的管控系统,都具备资源调度,数据同步,和服务编排的能力,这三种能力从范畴上其实是与云边协同的主张相呼应的。过渡到边缘云时代,虽然基本模型并无太大出入,但是在边缘场景下,新基础设施的物理现状改变了,这对于基本模型的实现提出新挑战。

其中最大挑战就是数据同步能力的建设。因为数据同步能力是管控系统最底层的物理能力之一,这个能力会直接制约资源调度与服务编排的准确性与效率,甚至进一步影响整个体系的成本。因此,要先解决好数据同步的问题。

    • 边缘计算场景下对管控系统建设的挑战

规模庞大的节点网络

想做一个好的数据同步能力需要先解决当前面临的问题,以火山引擎边缘计算的基础设施为例,火山引擎边缘计算节点超过500个,覆盖全国各省市和运营商,同时资源储备带宽也超过100T。我们的管控平台要去实时监测这么多资源,并且还要在出现突发情况时要协同调动服务做规避止损,这对数据同步而言是非常大的挑战,一方面管控系统必须保证数据通道的稳定和通畅,另一方面需要尽可能考虑和应对各种突发情况

丰富的业务场景

另外一个维度的挑战来自于客户和业务。火山引擎边缘计算在正式开放前主要服务于抖音集团的内部业务,如抖音的直播以及音视频类业务。这些业务无一例外都对稳定与性能有极致追求。当客户向管控平台发出指令,要求对资源做出管理时,如果系统不能及时对客户的指令做出合理反馈会,其后果难以想象,所以这其实也是在向数据同步能力提出挑战。

云边数据通道应当具备的能力

综上,对于我们来说,建设一个符合边缘原生理念的管控平台是首要任务,而建设管控平台的首要核心问题就是要建立一套稳定的数据通道,之后在此基础上进一步去解决好整个云边协同问题。所以我们决定投入精力先把数据通道问题做好。那么在规划的过程中,对这个方案该有的能力做了些设想:

  • 第一是功能,云边数据通道主要承载南北向的数据流动。而南向与北向的数据流动有非对称性,南向以指令数据为主,北向以数据上报为主。这两种流动我们称之为命令通道与数据通道两种能力,需要在功能中体现。

  • 第二是性能,我们的性能必须表现出色,具体来说,要考虑时延波动,高吞吐量,和高可用问题。

  • 第三扩展性,我们起步较晚,但我们要同时开展虚拟机和容器,甚至函数计算等多种业务,那么就可以尽早考虑拓展性,设计一套完善方案以应对所有问题。

  • 第四是安全性,作为tob业务服务商,安全问题毋庸置疑,具体来说,至少要保证租户之间的隔离性以及数据传输安全

    • KubeHub-火山引擎边缘计算的数据通道方案

KubeHub-企业级云边网关

自2021年开始我们将上述的想法逐步落地,形成一套云边网关方案,在内部我们称之为 KubeHub。这套方案的主要特点有四个方面:

  • 第一,代理式实现的云边网关,通过接管云边两端的数据转发,让通道的概念对业务变得透明,降低业务和架构研发的理解和使用难度。

  • 第二,充分考虑了实际场景,通过缓存+实时同步,对一部分读请求的加速,提升了性能

  • 第三,基于业务的安全性要求,着重管控和安全能力建设

  • 第四,建设了与之配套的运维平台,增强对云边通道的即时干预能力,并补全监控,告警等基础的可观测性机制。

KubeHub 架构

接下来跟大家详细介绍一下KubeHub的具体实现。

整体上看,KubeHub 由中心和边缘两侧的代理组件组成了一个对称式的架构。中心一侧的代理组件称为 Hub,边缘一侧的组件叫 Agent,两个代理协作分发中心与边缘之间的南北向流量。中心一侧还存在一个称为 metaserver 的组件,metaserver 是一个元数据中心,除了维护用户信息,集群访问证书等数据之外,还会记录 hub,agent 的实例信息,以支持对 hub 和 agent 实例的服务发现。

KubeHub 核心功能

KubeHub 所提供能力分为三类。

  • 第一是核心功能,主要有:

  • 通过中心与边缘两侧的代理来维持业务透明的网络通道

  • 通过实时同步边缘数据来实现部分数据查询类指令的加速

  • 第二是运维相关的功能,主要有:

  • 云边通道的租户管理,包括用户的资源,身份授权,以及访问权限校验

  • 另外是通过 metaserver 的元数据管理与服务注册能力,对于 hub 与 agent 的行为进行干预,比如调整负载均衡,调度流量等等

  • 第三是扩展功能,主要会在边缘一侧发挥作用:比如,通过为 agent 开发 K8s 插件,以及本地 native 指令的组件,比如执行本地命令等等。我们可以让管控系统通过 KubeHub 直接管理 K8s 或裸金属集群,甚至调动一些如函数,大数据等更特殊的场景。

KubeHub 集群纳管

除了核心功能外,这里向大家介绍下 KubeHub 中的一些核心流程。首先,为了使用 KubeHub,需要先将集群接入到平台,这一步我们也称之为集群纳管。一个标准的集群纳管流程是这样的:

  • 第一,我们先要在边缘集群上安装 KubeHub 的边缘代理组件,即 agent。agent 的部署形态可以以容器或二进制形式存在,是比较简单的。

  • 第二,Agent 启动后,会向中心的 hub 发起 Websocket 链接,再与 hub 完成握手建连后,会进入到资源类型上报阶段。

  • 第三,在资源类型上报阶段,中心的 hub 实例会向边缘发起一个 Discovery 类型的探测请求,要求边缘 agent 上报集群支持的资源类型。

  • 最后,资源类型上报完毕后,hub 会根据边缘集群的类型决定是否启用资源缓存,以 K8s 集群为例,hub 针对需要缓存的资源类型,会启动一组 Informer,通过 Informer 启动的 listwatch。agent 会将资源的 Event 同步到中心并缓存到 hub 中。

随后这些资源初始化全部完成后,Hub 就会向 MetaServer 去注册集群和 Agent 的信息。以上初始化过程是完全自动化的,通过这套机制,我们只需要在边缘集群部署一个 Agent 就可以实现集群的纳管。

KubeHub 指令下发

在集群完成纳管之后,使用者就可以开始通过 KubeHub 向边缘集群下发指令了。我们以用户通过 KubeHub 管理边缘k8s集群的场景来举例。

首先,当用户通过 KubeHub 向边缘 K8s 集群下发指令时,需要先通过 MetaServer 去签发的一个对应集群的 Kubeconfig。MetaServer 在签发 Kubeconfig 之前会先核实租户身份并做资源权限校验,一旦通过用户就会得到一个与自己相关的唯一 Kubeconfig。一旦获取到 Kubeconfig,用户只需要将 K8s apiserver 的地址代理到 Hub 组件,可以就继续使用 kubectl、client-go 之类的传统方式,直接访问边缘 K8s 集群。

由于用户发向边缘集群的请求已经被代理至 hub 集群 。当 Hub 接收到 K8s 请求后会做指令类型判断。如果读请求,比如 Get/List/Watch 等,Hub 实例会检查本地是否具有对应资源的缓存,如果缓存命中,那么就将缓存数据直接返回给用户。如果请求未命中缓存,或者是一个写请求。比如说 Create/Update/Patch/Delete 类型,那么 Hub 会直接把这个请求发送至边缘侧的 Agent。由 Agent 再将这个请求转发到边缘的 APIServer,APIServer 将请求处理完成后,由 Agent 将结果返回给中心 Hub,然后再由 Hub 转交给用户。

这种设计其实考虑了实际场景的,一般来说,请求的读写比往往遵循 2-8 原则,因此我们通过在中心缓存热点资源的方式,减少边缘 APIServer 压力,这样可以提升边缘集群的一个稳定性,并减少带宽开销。

KubeHub 高可用机制

作为一个底层基础设施。除了功能实现之外,KubeHub 必须考虑高可用问题。在 KubeHub 中,我们沿用了比较经典的分布式架构。具体而言,就是通过多副本, 服务发现 ,流量 负载均衡 ,以及故障转移这些手段来实现 KubeHub 的数据通道高可用。

KubeHub 授权与认证

另外,KubeHub 也对准备了一些安全机制。当租户使用 KubeHub 管理集群时,我们会启用 rbac 鉴权,所有集群上的资源类型都可以按需授权给租户,这些信息都会记录在 MetaServer 中,并且通过签发 token 的方式给用户办法访问凭证。当租户通过 KubeHub 下发指令时,Hub 会对 token 进行校验,检查用户身份以及资源权限的合法性。这是一种比较轻量的安全校验方式,使用这种机制的是为了保证 KubeHub 的性能, 毕竟在高并发高负载的场景下,单次请求开销的微小波动会积少成多,最终引起整体的性能衰减。

另一个对安全的考虑是数据传输安全。在这里我们 websocket 启用了 ssl 双向认证,由此建立安全的可靠传输通道。

KubeHub 监控与运维

最后,作为基础性服务。我们对监控和运维方面也做了一些投入,以保证能随时地掌控整个服务情况,并对一些突发问题做出快速判断和应对。

具体来说,可观测性方面,主要是云和边两侧的基础性能,稳定性监控。另外,干预能力上,我们会对当前的租户,已经租户所使用的各种客户端做出监测,并决定流量调度策略,甚至封禁。此外,关于工程方面的机制,比如多环境隔离,灰度等机制,这在企业中是常规需求。

以上就是我们的自建数据通道 KubeHub 的全貌。在当前,KubeHub 已经作为核心组件比较广泛地应用到火山引擎的边缘管控体系中。在我们的主营业务中,对 KubeHub 的使用非常普遍,比如对边缘虚拟机,虚拟化网络,存储等业务中,大量的资源控制指令都需要 KubeHub 下发至边缘。

从实际效果看,通过 KubeHub 建立的云边通道,稳定性还比较可靠,同时可观测性和运维能力都比较完善,极大地减轻业务研发和产品迭代的负担。

    • 总结

最后,和大家一起来简单回顾下我们建设 KubeHub 的过程。作为一家开展 To B 业务的云服务商,庞大且复杂的基础设施管理以及质量和效率等因素要求我们着眼实际情况,以务实的眼光来尽可能高质量地、有计划地解决问题。这是我们投入力量,启动 KubeHub 项目的根本原因。

另一方面,随着边缘原生的兴起,云与边之间的协同控制被作为基础能力会更加受到关注。我们在启动边缘计算业务的时候也已经意识到这一点,我们觉得云边通道是一个值得独立讨论和深入研究的问题。因此我们在云边通道方面投入了力量,并努力为他补全工业级场景所匹配的配套能力,希望他能够发挥足够的作用。

KubeHub 集中体现了我们对云边数据通道的理解与功能诉求,但相比与业界盛行的边缘计算开源方案,会显得比较特别。从定位来讲,有别于开源社区的思路,KubeHub 不是一个全面的云边协同方案,而是专注于数据协同这个问题,谋求为数据协同建立一个比较牢靠的技术底座,其实现相对更短小精悍,但在扩展机制上做了足够的考虑,目的是为了作为一个强有力的基础工具。同时我们在运维和管控上投入了很大精力,使其具备企业级的能力。

最后,再简单介绍下我们建设 KubeHub 的关键里程碑。

  • 核心功能建设: KubeHub 项目自2021年初启动,经过为期半年的投入完成了0.1版本的建设,这时期实际是我们对云边协同问题的思考沉淀阶段,因此我们设定的目标是完成最核心的高可用连接和请求加速能力。

  • 平台化: 在核心功能快速得到验证之后,我们发现这是一个有价值的技术原型,因此在20年底,我们为 KubeHub 补全了配套的运维和扩展能力,在这个过程中 KubeHub 被发展成了一个基础技术平台,并且开始在公司内部的更多业务中都得到应用。

  • 产品化: 在22年,随着业务的发展,KubeHub 的应用越来越广泛,我们发现他明显地表现出了技术基石的特质,这时候我们觉得这样一个比较重要的基础组件值得一个更有远见的发展规划,因此我们决定将 KubeHub 打造的更完备,一方面,我们继续打磨易用性和用户体验,另一方面我们尝试与开源方案做更多的对接,特别是为云原生场景的适配做了一些准备。

在未来的时间里,我们希望在两方面能有进展,一个是内部生态建设,在边缘原生时代,大量的应用都将会顺应潮流向边缘进行迁移,而云边协同问题也将会是第一大挑战,因此我们希望在内部能推广 KubeHub,让大量的经典云应用能更简易地向边缘过渡。另一个方面,我们也希望能和业界分享这些想法,并将 KubeHub 进行开源贡献给社区,以便在边缘原生时代来临的当下,为大家提供一种新的技术选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript基础复盘1

JS有三种书写位置,分别为行内,内嵌和外部。 注意,引用外部JS文件,script双标签内部不可以写代码了。 JavaScript输入输出语句 变量 变量的使用 变量再使用时分为两步:1.声明变量 2.赋值 实现用JavaScript接受用户输入…

最近公共祖先

最近公共祖先(Lowest Common Ancestor,LCA) 指两个点的公共祖先中,离根最远/深度最深的 性质: 1.LCA({u})uLCA\left(\left\{u\right\}\right) uLCA({u})u 2.若uuu是vvv的祖先,当且仅当LCA(u,v)uLCA\left(…

[Lua实战]Skynet-1.如何启动(linux环境启动)[开箱可用]

Skynet-如何启动1.依赖环境:可登录&联网的linux(Centos7)系统(可以是虚拟机)2.yum安装依赖库3.git clone skynet项目4.编译skynet4.1有可能遇到的错误(升级gcc到4.9以上即可解决):5.测试运行skynet6.运行结果最近用到了lua,想了解下云风大神的skynet,在网上看了半天也没入门…

Spire.Pdf for Java v9.1.4 Patcher

Spire.PDF for Java是一种 PDF API,它使 Java 应用程序无需使用第三方SDK 即可读取、写入和保存 PDF 文档。使用这个 Java PDF 组件,开发人员和程序员可以实现丰富的功能,从头开始创建 PDF 文件或完全在 Java 应用程序(J2SE 和 J2…

leetcode刷题记录总结-7.二叉树

文章目录零、二叉树理论二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树二叉树的存储方式二叉树的遍历方式二叉树的定义总结一、二叉树的遍历[144. 二叉树的前序遍历 ](https://leetcode.cn/problems/binary-tree-preorder-traversal/)题解递归实现迭代实现[94. 二叉树…

如何运营企业网站

企业网站的最终目的是给企业带来效益,树立企业形象。只要有这个目标定位,剩下的工作就是围绕这个定位去做和优化,米贸搜整理如下:1.增强被收录页面的重要性。收录页面的提升不仅仅是数量的提升,质量占据了很高的比重。…

网络安全协议

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 本章将会进行网络安全协议的讲解 一.网络安全 1.什么是网络安全 网络安全&#xff…

导数的概念——“高等数学”

各位CSDN的uu们你们好呀,今天小雅兰的内容是导数的概念,其实在高中时期,我们就已经接触过导数了,但是那个时候学得并不是特别深入,依稀记得,我们当初的导数大题一般都是压轴题,很多学校每次讲解…

Oracle重写sql经典50题(代码)

上次发表的是写的时候遇到的问题,这次备份一下自己的代码(很冗余,也不保证正确率) mysql50题链接在此 Oracle重写sql经典50题创建数据库和表oracle数据库一个账户就一个库,不需要创建学生表 student创建学生表 student插入学生数据…

A-Star算法探索和实现(五)

本篇摘要在上一篇中我们对寻路的移动规则进行了制定,而在本篇我们将对最佳路径的查找方式进行优化,而这就会涉及到移动规则的检测改进、权值计算的改进、NextNode集的处理改进、寻路逻辑的改进,我们将从上述四个方面进行详细讲解。方案探讨&a…

3.堆排序和比较器

1. 堆 堆结构就是用数组实现的完全二叉树结构,对于结点i,左孩子2*i1、右孩子2*i2、父节点(i-1)/ 2。 完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 完全二叉树中如果每棵子树的最小值都在顶部就是小根堆堆结构的heapInse…

【C++算法图解专栏】一篇文章带你入门二分算法

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为 0 基础刚入门数据结构与算法的小伙伴提供详细的讲解,也欢迎大佬们一起交流~ 📚专栏地址:https://blog.csdn.net/Newin…

步进式PID控制算法及仿真

在较大阶跃响应时,很容易产生超调。采用步进式积分分离PID控制,该方法不直接对阶跃信号进行响应,而是使输入指令信号一步一步地逼近所要求的阶跃信号,可使对象运行平稳,适用于高精度伺服系统的位置跟踪。在步进式PID控…

【数据手册】CH340G芯片使用介绍

1.概述 CH340是一系列USB总线适配器,它通过USB总线提供串行、并行或IrDA接口。CH340G集成电路提供通用的MODEM信号,允许将UART添加到计算机上,或将现有的UART设备转换为USB接口。 2.特征 全速USB接口,兼容USB 2.0接口。使用最小…

Android核心技术【SystemServer加载AMS】

启动流程 Init 初始化Linux 层,处理部分服务 挂载和创建系统文件 解析rc文件: rc 文件中有很多action 进入无限循环 执行action:zygote 进程就在这里启动 for循环去解析参数,根据rc 文件中的action 执行相应操作 检测并重启需要…

细谈文件操作

该文章将详细的介绍文件操作这方面的知识,文件的打开,关闭,读取,写入,以及相关的函数都会在本文一一介绍,干货满满喔!1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开…

SpringBoot(java)操作elasticsearch

elasticsearch我已经装了ik,中文分词器。已经使用容器搭建了集群。之前在我的博客-elasticsearch入门中,已经介绍了http请求操纵es的基本功能,java API功能和他一样,只是从http请求换成了javaApi操作。springBoot里继承了elastics…

蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数

目录 1.数的划分 2.求先序排列 3.平方计算 4.三角形高 5.单词复数 1.数的划分 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n7,k3,下面三种分法被认为是相同的。 1&#xff0c…

关于宏文档开启宏后还是不能正常使用问题

1.问题 2.开启宏 (62条消息) [Win10Excel365]尽管已启用VBA宏,Excel还是无法运行宏_逍遥猴哥的博客-CSDN博客 3. 问题还是没解决 发现可能是字体显示乱码,导致vba运行找不到争取路径 VBA编辑器中中文乱码的解决办法:1、依次点击【工具→选项…

如何写一个命令行解释器(SHELL)

文章目录前言什么是命令行解释器 ——SHELLSHELL的结构void print_info(char ** env) //打印命令行信息函数void read_comand(char **buffer) //读取指令函数char **split_line(char *buffer, int *flag) //分割字符串函数int excute_line(char **buffer, int flag) // 执行指令…