前沿科技探索家 · 2021年08月05日

边缘计算开辟新赛道,BEC用技术创新领跑

5G与物联网的兴起,让云游戏、超高清视频直播、VR/AR、V2X、智慧城市/制造等新兴行业蓬勃发展,随之而来的是海量计算数据。传统的云计算架构已无法满足此类“低延迟&大带宽”的需求,云+边+端三位一体的分布式计算架构成为更好的解决方案。

这样的背景下,百度智能云率先基于CDN节点网络推出边缘计算产品BEC(Baidu Edge Computing),一站式提供更靠近终端用户的、全面覆盖的、弹性分布式算力资源,通过终端数据就近计算和处理,大幅度优化响应时延、降低中心负荷和整体成本;同时赋予用户更快、更省、更灵活、更高效的边缘算力资源和平台能力。

支撑新场景落地

在百度智能云的边缘计算产品BEC中,边缘计算节点不仅提供了用户边缘算力资源,更把中心云的核心能力下沉到了边缘节点,如存储、网络、安全等能力,完成了众多新兴场景的落地,同时打造了云边协同的最佳解决方案:

在直播/点播场景,通过使用就近基于边缘构建的分布式源站,大幅度节省中心带宽成本,降低用户观看延迟、提升体验。同时支持客户将自有协议及转码能力快速部署至边缘节点,降低改造成本。

在视频上传场景,边缘节点提供就近落盘存储。视频文件上传速度提升50%,同时因减少传输链路使得上传成功率提高至99%以上。也可引入多个节点存储集群,保证边缘环境存储功能的可靠性。

在安防场景,边缘计算节点可提供就近视频汇聚及处理能力,在同一城域网的距离内解决视频流/图片的合流、存储、分析,提供低成本、高质量的智慧安防监控能力。对终端设备无特殊要求,扩展性强、易改造,由边缘来做统一纳管,大幅度降低运营成本。

在云游戏场景,边缘计算节点可提供高实时性的GPU计算资源,完成游戏场景的渲染工作。在特定区域内,从用户游戏指令上传至边缘节点处理到视频渲染后下发,整体可在25ms内完成处理。支持游戏即开即玩,无需下载,大幅度提升拉新率。同时也不会因游戏更新而需要用户重新下载,导致用户流失。

为支撑以上众多场景落地,BEC在产品功能和技术架构方面,做了非常多的创新尝试,同时也在实际业务使用中,一一验证了技术的先进性,以下是创新的重点方向。

安全容器和标准虚机的混部调度

近年来,容器技术快速发展,并呈现出与Kubernetes融合的趋势。

2019年Kubernetes社区的一份指南纲要中,讨论了虚拟机回归的话题,而在生产实践中也发现,以docker为代表的runc容器技术,在安全性、隔离性上有不少隐患。这使得微虚机或者安全容器技术逐渐被业界重视起来,比较有代表性的如Kata Containers,Firecracker和gVisor。

BEC就使用了其中的Kata Container安全容器做为边缘容器方案,实现容器内核隔离,保证非受信工作负载的运行,为客户提供更高的安全性。但是Kata Container也有一定的局限性,比如容器内核版本比较高,内核版本、虚机镜像不支持容器粒度的动态配置等问题。此外,也可支持客户在标准虚机上的使用习惯。

在这个背景下,BEC开启了对边缘虚机的支持。这也和业界的发展趋势相同,随着像Kubevirt这样的开源项目兴起,Kubernetes强大的编排能力可以直接管理标准虚拟机。除了支持标准虚拟机的管理,BEC也实现了安全容器和标准虚机的混部调度,整体架构如下:

1.jpg

简明边缘虚机架构

边缘虚机使用了开源的kubevirt方案来实现,通过Kubernetes的自定义资源API(CRD),增加虚机和虚机实例资源,使Kubernetes能够方便地编排管理虚机对象。Kubevirt的整体架构如下:

1.jpg

可自定义虚机镜像

BEC通过与百度智能云BCC云服务器产品打通,充分利用中心云产品能力,为用户提供自定义虚机镜像的能力。用户在BEC上启动边缘虚机时,可以选择在BCC中制作的虚机镜像启动。

Kubevirt支持多种存储挂载方式,在BEC中,系统盘的挂载使用的是data volume的方式,结合CDI(Containerized-Data-Importer )工具,完成虚机系统盘的准备。如下图:

1.jpg

支持虚机资源整体调度

BEC为了提升性能,边缘使用本地盘作为虚机的系统盘,在系统盘pv准备完成后,importer Pod会被删除,BEC通过设置vm pod的亲和性,保证vmpod会调度到pv所在的节点。但是importer pod删除和vm pod创建过程中可能会有新的pod调度到此节点,并占用资源,会导致vm pod因资源不足而调度失败。

为了解决这个问题,BEC增加了对虚机生命周期过程中所有资源的整体调度能力。重点是保障importer删除后,vm pod可以保证在同节点启动,另外一个是保障虚机关机开机时pod能在同节点重建。

BEC对kube-scheduler组件进行了改造,在原有的节点资源管理模块增加了资源预留机制,为vm的pod预留出资源配额,不参与调度。对应上面提到的importer pod删除或者因vm关机导致的virt-launcher pod删除,对应的资源不会从scheduler的资源缓存中清理,并且通过hook资源同步逻辑,防止缓存被更新,从而保证了vm启动的稳定性。

让边缘业务日志处理更简单

在业务运维中,日志是观察业务运行状态,排查业务问题的重要依据。在边缘服务场景中也是如此,但是边缘侧缺少中心云中完备的平台化日志服务。为了解决这个问题,BEC结合云原生生态,实现了一套业务容器日志推送和监控指标采集的工具。

该工具以sidecar容器的形式与业务容器共同运行在同一pod中,支持通过emptydir的方式与业务容器实现日志共享,也支持采集业务容器的标准输出。控制面通过configmap实现配置热更新下发,整体架构如下:

1.jpg

日志指标提取提升可读性

日志指标提取使用的是grok-exporter,grok-exporter是个轻量级的指标提取项目,可以很好对接prometheus。但是成熟度上还有待提升,主要问题有以下几点:

一是原生grok-exporter只能支持从一个文件或一个目录下的日志中提取指标,在生产环境中,客户多个容器的日志存储路径可能是不一致的,为此,BEC对grok-exporter进行了改造,使其支持从多个文件或目录提取指标,并将文件名添加为label用于区分。

二是原生grok-exporter不支持日志文件路径包含软链接或者环境变量,而生产环境中,很多日志文件,特别是标准输出日志,都是以软链接的方式来实现日志轮转,BEC团队对此进行了改造,解决了该问题。

三是提取指标时,对日志的偏移量没有做记录,在进程重启后会从文件开始处再次提取。为此,BEC对该偏移量进行了持久化存储,进程重启后可以重新加载,继续从上一位置开始提取。而且BEC使用“inode+设备号+文件扩展属性”唯一标识一个文件,保证文件删除后,新建的同名文件可以被识别。

此外,之前grok-exporter自身的日志格式不够友好,在组件运维过程中成本较高。为此,BEC更换了日志库,对优化日志格式,提升日志可读性。以配置化方式支持日志轮转,方便日志清理,防止sidecar容器中的日志堆积占用过多资源。

多种日志输出

BEC在日志传输上使用了开源的fluent bit,对接了百度智能云ElasticSearch,除此之外,fluent bit原生还支持kafka、fluentd、http、nats等输出。

基于以上众多业界首发的功能和先进技术,百度智能云以边缘计算开辟全新赛道,完成率先抢跑,充分迎接5G新时代。同时,百度智能云也在和运营商共同探索移动边缘计算,旨在提供用户更下沉的边缘资源,更低延迟的网络响应,更丰富的5G网络能力,面向未来无限可能。

推荐阅读
关注数
12971
内容数
325
带你捕获最前沿的科技信息,了解最新鲜的科技资讯
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息