2023年6月16日-17日 51CTO WOT全球技术创新大会在北京成功举办。在快速发展的数字化时代,云计算和边缘计算作为科技领域的两大核心驱动力,正引领着全球技术变革的潮流。为了探讨云时代基础设施在科技发展中的关键作用,推动边缘云行业的进一步创新与发展,会上,火山引擎边缘计算架构师郭少巍与多位行业资深专家,共同探讨边缘云行业技术架构以及云原生与边缘计算的发展和展望。
过去边缘计算主要关注基础设施的建设和优化,企业通过在各个地理位置部署边缘计算节点,实现数据的近场处理和响应速度的提升。这种边缘计算模式极大地加快了数据传输和处理的效率。然而,随着边缘云行业的不断发展,业务架构也在不断演进,如何在边缘场景下构建高效的基础设施服务成为了行业发展新课题。
火山引擎边缘计算架构师郭少巍认为:云原生技术提供了一种全新的方式,使得边缘计算IaaS服务具备了混合部署、弹性扩缩容、简单运维等能力。
在云时代基础设施的探索中,边缘IaaS混合部署架构和云原生边缘计算展现出了巨大的潜力和前景,云原生具有弹性伸缩,标准化部署和自动化运维等诸多优势。火山引擎边缘云团队选择拥抱云原生,并且在云原生架构下更加容易做到混合部署和统一编排的能力,使得边缘计算在小规模场景下落地云计算基础设施成为了可能。
火山引擎边缘云原生 IaaS 架构整体方案
火山引擎边缘 IaaS 云原生架构分为两部分:中心控制域和边缘计算资源域。
- 中心控制域主要负责平台和网关接入,各个服务资源的下发和管理;
- 边缘计算资源域承载真正的 Workload,并且在边缘弱网环境下可以完全实现边缘自治。
中心控制域拥有两个客户使用入口:分别是控制台和 OpenAPI,控制台和 OpenAPI 拥有相同的管控能力,客户可以根据需求来选择。另外火山引擎边缘 IaaS 云原生架构还具备中心资源编排和调度能力,其中编排服务包含计算、镜像、网络等诸多模块,调度服务负责全局调度能力和库存管理等能力。
边缘计算资源域主要分为两种角色:Master 节点和 Node 节点。Master 节点的数量为 1-N;Node 节点按需添加。边缘计算的底座是基于 Kubernetes 来构建的,Kubernetes 主要承担运维能力和资源的编排和扩展能力。
服务分层
通过分层的视角来剖析火山引擎边缘 IaaS 的架构:
- 物理层:最底层是物理层,通过物理硬件提供硬件的接口和抽象,并且提供硬件辅助虚拟化等相关的能力
- 操作系统:操作系统是对硬件的封装,为上层提供了各种系统调用能力,保障应用安全操作硬件
- 容器运行时:通过将组件进行容器化,实现了组件的标准部署和资源隔离的能力
- 资源调度:复用Kubernetes 的调度机制,实现了对不同资源的统一调度
- 服务编排:通过对 Kubernetes 进行扩展,实现了不同资源的统一编排
- veEN 服务:基于云原生底座,将计算、存储、网络等能力通过标准化的形式开放给客户使用
混合部署
如何在同一台物理机上同时运行云主机和容器?
以云主机为例,中心通过云边通道将资源下发到边缘集群,APIServer 接收到请求后,会调用 veEN API 做资源的校验,校验通过后会将资源存储到 DB 里。同时,veEN Controller 监听到资源的创建,会根据具体资源的定义生成对应的 Pod 对象,当 Pod 对象经过边缘调度调度到具体的 Node 上,会首先启动 veEN Monitor 服务,接下来会与 veEN Agent 服务建立连接,veEN 根据云主机具体的资源定义,调用 veEN Monitor 来启动具体的实例。当云主机实例启动后,veEN Agent 还会服务云主机状态的探活和上报,确保实例的正常运行。
此外,容器实例也是以Kubernetes Pod的维度进行调度和运行,容器实例采用我们精简过的 Hypervisor,不仅减少了 Overhead,还加快了启动速度,Hypervisor 启动后会启动一个 Agent,Agent 服务在 Guest OS 内部管理用户的容器服务。火山引擎边缘计算架构通过将运行实例统一以 Pod 形式进行封装,达成了云主机和容器的混合部署。
性能保障
最底层是火山引擎边缘云硬件资源层,提供CPU、内存、网卡、磁盘等硬件资源,在 Linux 内核态通过/dev/kvm 将云主机相关的交互暴露出来,Hypervisor 通过系统调用与 kvm 进行交互,负责具体的云主机的管理。由于云主机的硬件是软件模拟的,性能必然会有一些损耗,为了降低虚拟化带来的损耗,火山引擎边缘云团队做了多方面的努力:
- Hugepage:将宿主机的内存分为两部分,一部分是4K页内存,一部分是大页内存,通过减少虚拟地址,加快了虚拟地址到物理地址的映射,提升了云主机内存的整体速度;
- 设备直通:在一些 vCDN 场景下,由于客户对于带宽或者存储的性能要求比较极致,希望做到接近物理机的性能。因此,火山引擎边缘云采用了设备直通的机制,将硬件直接映射到云主机中,减少了整体 IO 路径,提升了整体 IO 性能;
- Polled I/O:在使用云网络或者云存储的场景下,由于云主机是运行在用户态的,如果每次 IO 都陷入到内核态会增加额外的交互,带来较多的性能损耗。火山引擎边缘云团队将 IO 的后端处理放在了用户态实现,并且通过 Polled I/O 的模型可以实时感知到云主机内的数据变化,做到更快的磁盘和网络 IO。
资源池隔离
为了保障客户实例的性能,在资源层面火山引擎边缘云团队将资源分为三个区,通过资源分池的机制保障了云基础资源和售卖资源的独立性,最大限度保障客户资源的稳定性和性能。
- 数据面:数据面独占资源,保障数据面数据传输的稳定,主要承载网络和磁盘 IO;
- 控制面:控制面为动态资源,集群部署时会预留一定的控制面资源,随着集群规模的增加,控制面资源可以动态扩容,保障集群的稳定性;
- 售卖资源:售卖资源都是独立绑核,避免 CPU 频繁切换带来的性能损耗,并且保障客户 CPU 资源独占。
统一资源编排
传统的云计算架构下,例如 Openstack,想要将容器、云主机和裸金属等资源进行统一的编排是极其困难的,但是基于云原生的架构火山引擎边缘云团队通过 CRD 的扩展机型,可以非常方便的将这些资源做统一的编排,通过定义不同的 CRD 对象,VM,CI,BH,实现相应资源的控制逻辑。通过 Kubernetes 的 plugin 机制,可以直接复用在 Kubernetes 之上现有的网络、存储、GPU 等资源类型,从而可以快速的构建出统一的资源编排系统,将云主机、容器实例和裸金属统一编排,极大提升资源的使用率,提升整理售卖率。
此外,火山引擎边缘云团队采用了声明式的方式来做资源的统一编排,声明式 API 使系统更加健壮,在分布式系统中,任何组件都可能随时出现故障。当组件恢复时,需要弄清楚要做什么,使用命令式 API 时,处理起来就很棘手。但是使用声明式 API ,组件只需查看 API 服务器的当前状态,即可确定它需要执行的操作。声明式设计的好处是:
- 简单:使用者不需要关心任何过程细节,过程是由工具自己内部figure out的、内部执行的。
- self-documentation,关注结果,而不是“发育”过程。
声明式的方式能够大量地减少使用者的工作量,极大地增加开发的效率,如果我们使用命令式的方式进行开发,虽然在配置上比较灵活,但是带来了更多的工作。
基于云原生的架构,不仅实现了资源的统一编排,还实现了服务的统一编排。火山引擎边缘云团队将所有的服务进行容器化,通过容器化形式来管理和部署服务。通过 CRD 的形式来声明资源,通过 Operator 的机制来实现控制逻辑,从而实现了所有服务的统一编排能力,为使用者提供更加简单和高效的运维模式。
火山引擎边缘 IaaS 的技术优势
云原生化
- 敏捷发布:云原生应用的架构和设计使得它们能够更快地适应变化和需求。云原生应用可以更轻松地进行部署、扩展和升级,从而提高了开发和部署的速度和效率
- 统一编排:通过云原生化我们不仅做到了云主机、容器和裸金属资源层面的统一编排,还可以做到基础服务的统一编排,云服务的所有资源可以运行在任何一台宿主机上,并且具有天然的资源隔离能力,避免了管控资源和客户资源的相互影响
- 高效运维:使用容器化技术和自动化工具可以更轻松地管理应用程序,从而减少了人工管理的成本。
混合部署
- 传统的云计算需要管控面,存储,网络等多种独立部署的资源,因此要想实现一个完整的 IaaS 系统需要至少 N 台机器,并且这些机器的资源很难做到复用。通过云原生的技术架构,实现了资源和服务的混合部署,可以做到 1 台起建,并且支持 1-N 的灵活扩展,当任意角色的资源不够时,可以通过增加 Node 节点的形式快速扩容,管控组件会自动部署。
弹性扩展
- 快速扩容:当计算、存储和网络任意角色的资源不足时,可以实现资源的快速扩容,只需要将物理机部署相应的管控面组件即可实现边缘计算节点的快速扩容,通过自动部署管控服务,实现节点规模的快速扩展。
- 多样算力:可以实现云主机、容器实例和裸金属的混合部署,当云主机或者裸金属等售卖资源不足时,可以实现任意售卖资源的动态扩容。
- 按需扩展:组件可以做到完全模块化,就像积木一样,当我们需要什么能力时部署相关的组件即可,可以做到组件灵活部署
安全保障
- 公网传输:我们采用是客户端和服务端双向认证的机制,预配置签名证书,在服务端和客户端分别进行校验,客户端和服务端完全校验通过后再进行加密通信。不仅保障了建立连接时的安全,同时还保障了数据传输的安全。
- 组件接入:服务组件的接入必须遵循 RBAC 的准入机制,声明组件所需操作的资源和响应的 Action,可以精准管控到资源的具体操作,如 Get/Put 等操作。
边缘计算典型应用实践
目前火山引擎边缘计算当前已经实践的场景有视频直播、影视特效、游戏娱乐等各行各业。
以视频直播场景为例,直播的场景不仅给边缘带来了较大的算力需求,同时对于视频流的转发也有较强的带宽吞吐能力诉求,为了提供更强的网络能力,火山引擎边缘云团队开发了高性能网络组件,通过网卡直通、vhost-user 等手段优化了单台云主机可以承接的推流或拉流能力。
另外,边缘计算提供的通用算力,能支持在用户本地即可对视频直播的用户媒体数据进行处理,比如将视频直播媒体服务中转码、切片、合流等服务直接在边缘本地部署。本地媒体数据处理可以提升用户交互相关业务的响应效率,另一方面在数据源头对数据进行压缩、优化处理可以提升边缘-中心的数据传输效率优化成本。
值得一提的是,在直播场景中涌现出越来越多有趣的玩法和特效,比如抖音中比较火的“蚂蚁呀嘿”、“漫画风”等视频特效,可以极大丰富用户趣味性提升用户粘性,但这些炫酷特效的背后离不开强大的算力支持,火山引擎边缘云团队通过优化虚拟化损耗、GPU 设备直通等手段,增强了单实例的算力,保证用户获得预期的直播体验。
在云时代基础设施的探索中,边缘IaaS混合部署架构和云原生边缘计算展现出了巨大的潜力和前景。通过将云原生的灵活性和边缘计算的低延迟相结合,火山引擎边缘云能够为用户提供更强大的计算能力和更好的用户体验。
未来,火山引擎边缘IaaS混合部署架构将继续发展壮大。随着5G技术的普及和边缘设备的智能化,边缘计算将成为各行各业的关键驱动力。火山引擎边缘云愿携手社会各界伙伴,共同探索时代下的技术前沿,共享行业最新成果,助力产业蓬勃发展。