Fluid给数据弹性一双隐形的翅膀 (1) -- 自定义弹性伸缩

简介: 弹性伸缩作为Kubernetes的核心能力之一,但它一直是围绕这无状态的应用负载展开。而Fluid提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。 它基于Runtime提供了缓存空间、现有缓存比例等性能指标, 结合自身对于Runtime资源的扩缩容能力,提供数据缓存按需伸缩能力。

作者| 车漾 Fluid社区Commiter

作者| 谢远东 Fluid社区Commiter

 

背景

随着越来越多的大数据和AI等数据密集应用开始部署和运行在Kubernetes环境下,数据密集型应用计算框架的设计理念和云原生灵活的应用编排的分歧,导致了数据访问和计算瓶颈。云原生数据编排引擎Fluid通过数据集的抽象,利用分布式缓存技术,结合调度器,为应用提供了数据访问加速的能力。

image.png

 

弹性伸缩作为Kubernetes的核心能力之一,但它一直是围绕这无状态的应用负载展开。而Fluid提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。 它基于Runtime提供了缓存空间、现有缓存比例等性能指标, 结合自身对于Runtime资源的扩缩容能力,提供数据缓存按需伸缩能力。

 

这个能力对于互联网场景下大数据应用非常重要,由于多数的大数据应用都是通过端到端流水线来实现的。而这个流水线包含以下几个步骤:

 

  1. 数据提取,利用Spark,MapReduce等大数据技术对于原始数据进行预处理
  2. 模型训练,利用第一阶段生成特征数据进行机器学习模型训练,并且生成相应的模型
  3. 模型评估,通过测试集或者验证集对于第二阶段生成模型进行评估和测试
  4. 模型推理,第三阶段验证后的模型最终推送到线上为业务提供推理服务

 

image.png

 

可以看到端到端的流水线会包含多种不同类型的计算任务,针对每一个计算任务,实践中会有合适的专业系统来处理(TensorFlow,PyTorch,Spark, Presto);但是这些系统彼此独立,通常要借助外部文件系统来实现把数据从一个阶段传递到下一个阶段。但是频繁的使用文件系统实现数据交换,会带来大量的 I/O 开销,经常会成为整个工作流的瓶颈。

 

而Fluid对于这个场景非常适合,用户可以创建一个Dataset对象,这个对象有能力将数据分散缓存到Kubernetes计算节点中,作为数据交换的介质,这样避免了数据的远程写入和读取,提升了数据使用的效率。但是这里的问题是临时数据缓存的资源预估和预留。由于在数据生产消费之前,精确的数据量预估是比较难满足,过高的预估会导致资源预留浪费,过低的预估会导致数据写入失败可能性增高。还是按需扩缩容对于使用者更加友好。我们希望能够达成类似page cache的使用效果,对于最终用户来说这一层是透明的但是它带来的缓存加速效果是实实在在的。

 

我们通过自定义HPA机制,通过Fluid引入了缓存弹性伸缩能力。弹性伸缩的条件是当已有缓存数据量达到一定比例时,就会触发弹性扩容,扩容缓存空间。例如将触发条件设置为缓存空间占比超过75%,此时总的缓存空间为10G,当数据已经占满到8G缓存空间的时候,就会触发扩容机制。

 

下面我们通过一个例子帮助您体验Fluid的自动扩缩容能力。

 

前提条件

 

推荐使用Kubernetes 1.18以上,因为在1.18之前,HPA是无法自定义扩缩容策略的,都是通过硬编码实现的。而在1.18后,用户可以自定义扩缩容策略的,比如可以定义一次扩容后的冷却时间。

 

具体步骤

 

1.安装jq工具方便解析json,在本例子中我们使用操作系统是centos,可以通过yum安装jq

 

yum install -y jq

 

2.下载、安装Fluid最新版

 

git clone https://github.com/fluid-cloudnative/fluid.git
cd fluid/charts
kubectl create ns fluid-system
helm install fluid fluid

 

3.部署或配置 Prometheus

 

这里通过Prometheus对于AlluxioRuntime的缓存引擎暴露的 Metrics 进行收集,如果集群内无 prometheus:

 

$ cd fluid
$ kubectl apply -f integration/prometheus/prometheus.yaml

 

如集群内有 prometheus,可将以下配置写到 prometheus 配置文件中:

 

scrape_configs:- job_name: 'alluxio runtime'metrics_path: /metrics/prometheuskubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_label_monitor]regex: alluxio_runtime_metricsaction: keep- source_labels: [__meta_kubernetes_endpoint_port_name]regex: webaction: keep- source_labels: [__meta_kubernetes_namespace]target_label: namespacereplacement: $1action: replace- source_labels: [__meta_kubernetes_service_label_release]target_label: fluid_runtimereplacement: $1action: replace- source_labels: [__meta_kubernetes_endpoint_address_target_name]target_label: podreplacement: $1action: replace

 

4.验证 Prometheus 安装成功

 

$ kubectl get ep -n kube-system  prometheus-svc
NAME             ENDPOINTS        AGE
prometheus-svc   10.76.0.2:9090   6m49s
$ kubectl get svc -n kube-system prometheus-svc
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
prometheus-svc   NodePort   172.16.135.24   <none>        9090:32114/TCP   2m7s

 

如果希望可视化监控指标,您可以安装Grafana验证监控数据,具体操作可以参考文档

 

image.png

 

5.部署 metrics server

 

检查该集群是否包括metrics-server, 执行kubectl top node有正确输出可以显示内存和CPU,则该集群metrics server配置正确

 

kubectl top node
NAME                       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
192.168.1.204   93m          2%     1455Mi          10%
192.168.1.205   125m         3%     1925Mi          13%
192.168.1.206   96m          2%     1689Mi          11%

 

否则手动执行以下命令

 

kubectl create -f integration/metrics-server

 

6.部署 custom-metrics-api 组件

 

为了基于自定义指标进行扩展,你需要拥有两个组件。第一个组件是从应用程序收集指标并将其存储到Prometheus时间序列数据库。第二个组件使用收集的度量指标来扩展Kubernetes自定义metrics API,即 k8s-prometheus-adapter。第一个组件在第三步部署完成,下面部署第二个组件:

 

如果已经配置了custom-metrics-api,在adapter的configmap配置中增加与dataset相关的配置

 

apiVersion: v1
kind: ConfigMap
metadata:name: adapter-confignamespace: monitoring
data:config.yaml: |rules:- seriesQuery: '{__name__=~"Cluster_(CapacityTotal|CapacityUsed)",fluid_runtime!="",instance!="",job="alluxio runtime",namespace!="",pod!=""}'seriesFilters:- is: ^Cluster_(CapacityTotal|CapacityUsed)$resources:overrides:namespace:resource: namespacepod:resource: podsfluid_runtime:resource: datasetsname:matches: "^(.*)"as: "capacity_used_rate"metricsQuery: ceil(Cluster_CapacityUsed{<<.LabelMatchers>>}*100/(Cluster_CapacityTotal{<<.LabelMatchers>>}))

 

否则手动执行以下命令

 

kubectl create -f integration/custom-metrics-api/namespace.yaml
kubectl create -f integration/custom-metrics-api

 

注意:因为custom-metrics-api对接集群中的Prometheous的访问地址,请替换prometheous url为你真正使用的Prometheous地址。

 

检查自定义指标

 

$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq
{"kind": "APIResourceList","apiVersion": "v1","groupVersion": "custom.metrics.k8s.io/v1beta1","resources": [{"name": "pods/capacity_used_rate","singularName": "","namespaced": true,"kind": "MetricValueList","verbs": ["get"]},{"name": "datasets.data.fluid.io/capacity_used_rate","singularName": "","namespaced": true,"kind": "MetricValueList","verbs": ["get"]},{"name": "namespaces/capacity_used_rate","singularName": "","namespaced": false,"kind": "MetricValueList","verbs": ["get"]}]
}

 

7.提交测试使用的Dataset

 

$ cat<<EOF >dataset.yaml
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:name: spark
spec:mounts:- mountPoint: https://mirrors.bit.edu.cn/apache/spark/name: spark
---
apiVersion: data.fluid.io/v1alpha1
kind: AlluxioRuntime
metadata:name: spark
spec:replicas: 1tieredstore:levels:- mediumtype: MEMpath: /dev/shmquota: 1Gihigh: "0.99"low: "0.7"properties:alluxio.user.streaming.data.timeout: 300sec
EOF
$ kubectl create -f dataset.yaml
dataset.data.fluid.io/spark created
alluxioruntime.data.fluid.io/spark created

 

8.查看这个Dataset是否处于可用状态, 可以看到该数据集的数据总量为2.71GiB, 目前Fluid提供的缓存节点数为1,可以提供的最大缓存能力为1GiB。此时数据量是无法满足全量数据缓存的需求。

 

$ kubectl get dataset
NAME    UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
spark   2.71GiB          0.00B    1.00GiB          0.0%                Bound   7m38s

 

9.当该Dataset处于可用状态后,查看是否已经可以从custom-metrics-api获得监控指标

 

kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/datasets.data.fluid.io/*/capacity_used_rate" | jq
{"kind": "MetricValueList","apiVersion": "custom.metrics.k8s.io/v1beta1","metadata": {"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/datasets.data.fluid.io/%2A/capacity_used_rate"},"items": [{"describedObject": {"kind": "Dataset","namespace": "default","name": "spark","apiVersion": "data.fluid.io/v1alpha1"},"metricName": "capacity_used_rate","timestamp": "2021-04-04T07:24:52Z","value": "0"}]
}

 

10.创建 HPA任务

 

$ cat<<EOF > hpa.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: spark
spec:scaleTargetRef:apiVersion: data.fluid.io/v1alpha1kind: AlluxioRuntimename: sparkminReplicas: 1maxReplicas: 4metrics:- type: Objectobject:metric:name: capacity_used_ratedescribedObject:apiVersion: data.fluid.io/v1alpha1kind: Datasetname: sparktarget:type: Valuevalue: "90"behavior:scaleUp:policies:- type: Podsvalue: 2periodSeconds: 600scaleDown:selectPolicy: Disabled
EOF

 

首先,我们解读一下从样例配置,这里主要有两部分一个是扩缩容的规则,另一个是扩缩容的灵敏度:

 

  • 规则:触发扩容行为的条件为Dataset对象的缓存数据量占总缓存能力的90%; 扩容对象为AlluxioRuntime, 最小副本数为1,最大副本数为4; 而Dataset和AlluxioRuntime的对象需要在同一个namespace
  • 策略: 可以K8s 1.18以上的版本,可以分别针对扩容和缩容场景设置稳定时间和一次扩缩容步长比例。比如在本例子, 一次扩容周期为10分钟(periodSeconds),扩容时新增2个副本数,当然这也不可以超过 maxReplicas 的限制;而完成一次扩容后, 冷却时间(stabilizationWindowSeconds)为20分钟; 而缩容策略可以选择直接关闭。

 

11.查看HPA配置, 当前缓存空间的数据占比为0。远远低于触发扩容的条件

 

$ kubectl get hpa
NAME    REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
spark   AlluxioRuntime/spark   0/90      1         4         1          33s
$ kubectl describe hpa
Name:                                                    spark
Namespace:                                               default
Labels:                                                  <none>
Annotations:                                             <none>
CreationTimestamp:                                       Wed, 07 Apr 2021 17:36:39 +0800
Reference:                                               AlluxioRuntime/spark
Metrics:                                                 ( current / target )"capacity_used_rate" on Dataset/spark (target value):  0 / 90
Min replicas:                                            1
Max replicas:                                            4
Behavior:Scale Up:Stabilization Window: 0 secondsSelect Policy: MaxPolicies:- Type: Pods  Value: 2  Period: 600 secondsScale Down:Select Policy: DisabledPolicies:- Type: Percent  Value: 100  Period: 15 seconds
AlluxioRuntime pods:   1 current / 1 desired
Conditions:Type            Status  Reason               Message----            ------  ------               -------AbleToScale     True    ScaleDownStabilized  recent recommendations were higher than current one, applying the highest recent recommendationScalingActive   True    ValidMetricFound     the HPA was able to successfully calculate a replica count from Dataset metric capacity_used_rateScalingLimited  False   DesiredWithinRange   the desired count is within the acceptable range
Events:           <none>

 

12.创建数据预热任务

 

$ cat<<EOF > dataload.yaml
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:name: spark
spec:dataset:name: sparknamespace: default
EOF
$ kubectl create -f dataload.yaml
$ kubectl get dataload
NAME    DATASET   PHASE       AGE   DURATION
spark   spark     Executing   15s   Unfinished

 

13.此时可以发现缓存的数据量接近了Fluid可以提供的缓存能力(1GiB)同时触发了弹性伸缩的条件

 

$  kubectl  get dataset
NAME    UFS TOTAL SIZE   CACHED       CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
spark   2.71GiB          1020.92MiB   1.00GiB          36.8%               Bound   5m15s

 

从HPA的监控,可以看到Alluxio Runtime的扩容已经开始, 可以发现扩容的步长为2

 

$ kubectl get hpa
NAME    REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
spark   AlluxioRuntime/spark   100/90    1         4         2          4m20s
$ kubectl describe hpa
Name:                                                    spark
Namespace:                                               default
Labels:                                                  <none>
Annotations:                                             <none>
CreationTimestamp:                                       Wed, 07 Apr 2021 17:56:31 +0800
Reference:                                               AlluxioRuntime/spark
Metrics:                                                 ( current / target )"capacity_used_rate" on Dataset/spark (target value):  100 / 90
Min replicas:                                            1
Max replicas:                                            4
Behavior:Scale Up:Stabilization Window: 0 secondsSelect Policy: MaxPolicies:- Type: Pods  Value: 2  Period: 600 secondsScale Down:Select Policy: DisabledPolicies:- Type: Percent  Value: 100  Period: 15 seconds
AlluxioRuntime pods:   2 current / 3 desired
Conditions:Type            Status  Reason              Message----            ------  ------              -------AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 3ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from Dataset metric capacity_used_rateScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:Type     Reason                        Age                    From                       Message----     ------                        ----                   ----                       -------Normal   SuccessfulRescale             21s                    horizontal-pod-autoscaler  New size: 2; reason: Dataset metric capacity_used_rate above targetNormal   SuccessfulRescale             6s                     horizontal-pod-autoscaler  New size: 3; reason: Dataset metric capacity_used_rate above target

14.在等待一段时间之后发现数据集的缓存空间由1GiB提升到了3GiB,数据缓存已经接近完成

$ kubectl  get dataset
NAME    UFS TOTAL SIZE   CACHED    CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
spark   2.71GiB          2.59GiB   3.00GiB          95.6%               Bound   12m

同时观察HPA的状态,可以发现此时Dataset对应的runtime的replicas数量为3, 已经使用的缓存空间比例capacity_used_rate为85%,已经不会触发缓存扩容。

$ kubectl get hpa
NAME    REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
spark   AlluxioRuntime/spark   85/90     1         4         3          11m

16.清理环境

kubectl delete hpa spark
kubectl delete dataset spark

总结

Fluid提供了结合Prometheous,Kubernetes HPA和Custom Metrics能力,根据占用缓存空间的比例触发自动弹性伸缩的能力,实现缓存能力的按需使用。这样能够帮助用户更加灵活的使用通过分布式缓存提升数据访问加速能力,后续我们会提供定时扩缩的能力,为扩缩容提供更强的确定性。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

利用 Python 实现多任务进程

来源&#xff1a;杰哥的IT之旅作者&#xff1a;阿拉斯加一、进程介绍 进程&#xff1a;正在执行的程序&#xff0c;由程序、数据和进程控制块组成&#xff0c;是正在执行的程序&#xff0c;程序的一次执行过程&#xff0c;是资源调度的基本单位。程序&#xff1a;没有执行的代码…

小白也能懂的 Nacos 服务模型介绍

简介&#xff1a; 理解了 Nacos 的服务模型&#xff0c;也有利于我们了解 Nacos 背后的工作原理&#xff0c;从而确保我们正确地使用 Nacos。 作者&#xff1a;岛风 前言 按照目前市场上的主流使用场景&#xff0c;Nacos 被分成了两块功能&#xff1a;服务注册发现&#xff0…

那些与 IE 相伴的日子

来源&#xff1a;零一作者&#xff1a;前端印象大家好&#xff0c;IE 大家都不陌生&#xff0c;毕竟出现在大家的视野中已经很久很久&#xff0c;久到有20多年&#xff0c;当然也因前端技术的快速更新&#xff0c;给需要兼容IE浏览器的前端程序员带来了不少的困扰。慢慢地&…

html代码style图片width,HTML Style columnWidth用法及代码示例

DOM中的columnWidth属性用于指定列的宽度。用法:返回columnWidth属性&#xff1a;object.style.columnWidth设置columnWidth属性&#xff1a;object.style.columnWidth "auto | length | initial | inherit"属性值&#xff1a;auto:缺省值。列宽将由浏览器确定lengt…

KubeVela 1.0 :开启可编程式应用平台的未来

简介&#xff1a; 如果你对云原生领域不太关注&#xff0c;可能对 KubeVela 还没有做过太深入的了解。别着急&#xff0c;本文就借着 v1.0 发布之际&#xff0c;为你详细的梳理一次 KubeVela 项目的发展脉络&#xff0c;解读它的核心思想和愿景&#xff0c;领悟这个正冉冉升起的…

android-x86 镜像iso下载_2019年微软MSDN原版镜像系统下载地址 Win10/7原版系统iso镜像文件...

如今&#xff0c;不少用户开始讨厌以GHOST形式来安装操作系统&#xff0c;虽然步骤十分简单&#xff0c;但是从网上下载的GHOST系统&#xff0c;已经形成了一个黑色产业链&#xff0c;为了盈利&#xff0c;捆绑了软件全家桶、恶意强制主页&#xff0c;甚至捆绑木马&#xff0c;…

大流量场景下如何云淡风轻地进行线上发布?

简介&#xff1a; 本文介绍了微服务治理下金丝雀发布的能力&#xff0c;解决了发布期间少量流量验证新功能的问题。 前言 本文&#xff0c;我们继续聊聊《揭秘大流量场景下发布如丝般顺滑背后的原因》中的另外一环&#xff0c;灰度发布&#xff0c;也叫金丝雀发布。 ​ 很多互…

匿名提问:rm -rf了怎么办?

整理 | 易璜珵出品 | 《新程序员》IT界流传着一个神秘的代码&#xff0c;老程序员听了总是意味深长地一笑&#xff0c;而新手程序员则总是手痒地想试试&#xff0c;那就是删库指令rm -rf。这一行代码下去&#xff0c;海量数据可能就荡然无存。近几年发生的“删库跑路”事件让这…

ubuntu matlab_有没有人和我一起整理Python的matlab代替

想找人一起整理Python中matlab代替的包&#xff0c;最好是能够将常用功能用tkinter封装起来&#xff0c;积少成多&#xff0c;逐步逼近完整。比如将scipy中的最小二乘法拟合功能&#xff0c;找个图形界面封装一下&#xff0c;就变成了曲线拟合工具&#xff0c;可以代替matlab的…

逸仙电商Seata企业级落地实践

简介&#xff1a; 本文将会以逸仙电商的业务作为背景&#xff0c; 先介绍一下seata的原理&#xff0c; 并给大家进行线上演示&#xff0c; 由浅入深去介绍这款中间件&#xff0c; 以便读者更加容易去理解 Seata 这个中间件。 作者 | 张嘉伟&#xff08;GitHub ID&#xff1a;l…

“类云”的存储服务什么样?Pure Storage发布Pure Fusion等系列新品

一键部署自动化存储平台与云原生数据库即服务&#xff0c;无缝连接基础设施运营与应用程序。 编辑 | 宋慧 出品 | CSDN 云计算 近日&#xff0c;专为多云环境提供存储即服务的Pure Storage发布一系列现代化基础设施、运营及应用程序&#xff0c;这是Pure Storage迈向创新现代…

mac mongodb可视化工具_MongoDB从立地到成佛(介绍、安装、增删改查)

文章作者公众号bigsai&#xff0c;已收录在回车课堂,如有帮助还请不吝啬点个赞赞支持一下&#xff01;课程导学大家好我是bigsai&#xff0c;我们都学过数据库&#xff0c;但你可能更熟悉关系(型)数据库例如MySQL&#xff0c;SQL SERVER&#xff0c;ORACLE等&#xff0c;对于非…

阿里巴巴云原生 etcd 服务集群管控优化实践

简介&#xff1a; 这些年&#xff0c;阿里云原生 etcd 服务发生了翻天覆地的变化&#xff0c;这篇文章主要分享一下 etcd 服务在面对业务量大规模增长下遇到的问题以及我们是如何解决的&#xff0c;希望对读者了解 etcd 的使用和管控运维提供经验分享。 作者 | 陈星宇&#xff…

计算机组装与维护思考问题,计算机组装与维护中的常见问题及解决方法

郜庆国摘要&#xff1a;在如今的社会下&#xff0c;各个领域的很多行业在工作的时候都需要用到计算机来帮助工作的进行&#xff0c;因为计算机在很多情况下都能够很好地进行计算与帮助&#xff0c;所以我们在进行工作时&#xff0c;不仅提高了工作的效率&#xff0c;还解决了很…

淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!

简介&#xff1a; 在2019年&#xff0c;阿里巴巴文娱的淘票票几乎涉足了当时市面上所有的小程序。在不少平台上&#xff0c;淘票票是阿里“第一批吃螃蟹”的技术团队。回顾过往&#xff0c;阿里文娱做过很多尝试&#xff0c;也踩过很多坑。《小程序 大世界》总结了淘票票过去 2…

stm32f407 6个串口dma_stm32之DMA

一. 对于大容量的STM32芯片有2个DMA控制器&#xff0c;控制器1有7个通道&#xff0c;控制器2有5个通道每个通道都可以配置一些外设的地址。二. 通道的配置过程&#xff1a;1. 首先设置CPARx寄存器和CMARx寄存器。通过DMA控制器把一个地址的值复制到另外一个地址&#xff0c;通过…

立足当下,塑造未来

今天&#xff0c;以“5G与世界同行”为主题的2021全球移动宽带论坛&#xff08;Global MBB Forum&#xff09;在迪拜举行。期间&#xff0c;华为轮值董事长胡厚崑发表了题为“立足当下&#xff0c;塑造未来”的主题演讲。胡厚崑指出&#xff1a;“5G预商用五年以来&#xff0c;…

jfinal html5,Jfinal框架整合webSocket技术功能实现

技术难度&#xff1a;简单在这里我会用最简单的方法实现JFinal框架结合webSocket最基础的功能&#xff0c;以至于后续业务的拓展需要小伙伴们依据实际情况去实现相应的开发&#xff01;废话不多说&#xff0c;直接上代码&#xff01;1、编写webSocket类package morality.ws;imp…

行业实战 | 5G+边缘计算+“自由视角” 让体育赛事更畅快

简介&#xff1a; 世界本是多维的。进入5G时代&#xff0c;观众对多维度视觉体验的需求日益增长&#xff0c;5G MEC网络与边缘计算的结合&#xff0c;具备大带宽、低延迟特性&#xff0c;使视频多维视觉呈现成为现实。在第二十三届CUBA中国大学生篮球联赛期间&#xff0c;中国电…

华为汪涛:走向智能世界2030,无线网络未来十年十大产业趋势

2021全球移动宽带论坛&#xff08;Global MBB Forum&#xff09;期间&#xff0c;华为常务董事、ICT基础设施业务管理委员会主任汪涛发表了题为“走向智能世界2030&#xff0c;无线网络未来十年十大趋势”的主题演讲。汪涛表示&#xff1a;“未来十年&#xff0c;是走向智能世界…