技术标签: 【理论科普】大数据 | 云原生 | 机器学习 | 人工智能 边缘计算 人工智能 云计算
来源:大数据DT
1946年在美国宾夕法尼亚大学,电子晶体管计算机ENIAC携170平方米、18000个晶体管的庞大身躯悄然问世,作为计算的载体,开启了现代计算机的发展之路。
此后,晶体管代替了电子管,集成电路代替了晶体管,计算机的发展沿着摩尔定律的轨道一路狂奔,从巨大的机房一步步走进了千家万户,登上了小小的桌面,甚至作为可穿戴嵌入式设备成为人体的一部分。伴随这一过程,越来越多的物理世界需求被转化为计算需求,计算的形态也经历了几次重要变化。
在计算机发展初期,由于高昂的成本,计算机主要用于大型科学实验,几乎不存在现代意义的个人计算机。因此,此时的计算过程往往是很多用户采用分时的方式共享一台计算机,这一需求也造就了后来人们熟知的UNIX系统和类UNIX系统。
虽然此时所有的计算需求是在大型机“本地”执行的,但其任务来源通常是多个用户,资源也是由多用户共享的。因此从计算模式的角度而言,大型机的计算采用了多用户共享的模式。
而随着集成电路的出现,计算机体积沿着“摩尔定律”的轨迹不断缩小,计算成本不断降低,使得用户逐渐能够通过个人计算机来满足各类计算和数据存储的需求,计算的形态也从多用户分时共享为主流变为了独占资源的个人计算机为主流。
随着计算机网络和通信技术的不断发展,计算机再也不仅仅是数据存储和运算的载体,而是承担了越来越多的信息传输和交互任务。与此同时,智能手机、交互式Web服务、社交网络的出现和普及,使得大量的用户信息由本地迁移到网络服务器当中。
伴随着“信息网络化”这一过程,在数据被带到网络服务器上的同时,一部分运算过程也被带到了服务器上,例如网站托管、推荐算法、各类在线服务等。不仅如此,随着通信和网络技术的不断发展,越来越多的计算业务得以通过网络实现,从而一步步形成了如今云计算的形态。
随着智能手机、可穿戴设备等智能化计算设备的普及,以及高清视频、人工智能算法等需求的涌现,各类游戏、应用、视频业务对于数据和实时性的要求越来越高,例如风靡一时的增强现实(Augmented Reality,AR)游戏口袋妖怪(PoKeMon GO),对摄像头实时采集的图像进行识别和处理,并在识别出的目标位置显示不同种类的“口袋妖怪”。
对于此类应用业务,一方面本地计算会出现能力不足或者电量消耗过快的问题;另一方面若采用云计算架构,则无法达到游戏的延迟要求,不仅如此,当应用规模扩大时,云计算架构中网络带宽将会成为瓶颈,难以支撑来自海量前端设备的大规模实时计算和数据请求。
即便对于实时性要求不高的传统业务,越来越多的设备接入网络,也会使得云计算网络基础设施不堪重负,甚至使得云计算中心成为许多地区能源消耗的最大来源。
与此同时,随着5G/6G、Wi-Fi 6等通信技术和标准的快速发展,用户端到网络接入端的直接延迟可以降到个位数毫秒级。此时我们发现,在云计算架构中,数据从接入点到云计算中心的传输过程已经占据了绝大部分的延迟。考虑到互联网数据需要经过主干网多级路由的过程,这一延迟几乎无可避免。
因此,计算资源从云中心下降到靠近用户的网络边缘设备(如移动无线基站、家用路由等),则成为实现大规模实时计算的必然要求。如此,不仅彻底避免了广域网中的数据传输延迟,也提升了数据的隐私安全级别、访问效率以及服务部署和管理的灵活性。
简而言之,边缘计算是一种计算模式:在该计算模式下,服务与计算资源被放置在靠近终端用户的网络边缘设备中。
与传统的云计算数据中心相比,边缘计算中直接为用户提供服务的计算实体(如移动通信基站、WLAN网络、家用网关等)距离用户很近,通常只有一跳的距离,即直接相连。这些与用户直接相连的计算服务设备称为网络的“边缘设备”。
如下图所示,对于校园、工业园区等场景,配备计算和存储资源的设备即可作为边缘设备,为其前端用户提供边缘计算服务;对于城市街区场景,移动蜂窝网络的通信基站可作为边缘计算设备提供服务;对于家庭住宅场景,家用路由器可作为边缘计算设备。
关于边缘计算的概念,目前国内外学术界与工业界存在几种不同的定义。根据其出发点的不同,本文将边缘计算的定义整理如下:
边缘计算作为云计算的延伸:边缘计算是一种云计算优化方法,“通过将网络集中节点(云核心)上的应用、数据和服务放置到逻辑边界节点(边缘)”,从而建立与物理世界的直接联系。
边缘计算作为前端设备和云计算的中介:边缘计算是指那些使得计算发生在网络边缘的技术合集,向下的数据流来自云计算服务,向上的数据流来自前端的各类物联网设备。
描述计算平台的角度:根据中国边缘计算产业联盟的定义,在靠近物或数据源头的网络边缘侧,融合网络、计算、存储、应用核心能力的开放平台,就近提供边缘智能服务,满足行业数字化在敏捷连接、实时业务、数据优化、应用智能、安全与隐私保护等方面的关键需求。它可以作为连接物理和数字世界的桥梁,使能智能资产、智能网关、智能系统和智能服务。
泛化的云与用户之间的补充:边缘计算是指从数据源到云数据中心的路径上任意计算和网络资源的统称。该定义明确将边缘计算看作云计算中心与用户之间所有计算和资源的统称。
从计算模式发展的角度给出边缘计算的定义:边缘计算是一种计算资源与用户接近、计算过程与用户协同、整体计算性能高于用户本地计算和云计算的计算模式,是实现无处不在的“泛在算力”的具体手段。其中,边缘设备可以是任意形式,其计算能力通常高于前端设备,且前端设备与边缘设备之间应当具有相对稳定、低延迟的网络连接。
组成部分:边缘计算系统由云、边、端
三部分组成,每部分的解决方案不止一种。本文的云组成部分选择Kubernetes,边组成部分选择KubeEdge,端组成部分选择EdgeX Foundry。
概念解析:对组成边缘计算系统的云、边、端三部分涉及的相关概念进行说明。
组成边缘计算系统的云、边、端三部分的相关概念如下。
云:涉及的概念包括Container、Pod、ReplicaSet、Service、Deployment、DaemonSet、Job、Volume、ConfigMap、NameSpace、Ingress等。
边:目前边缘系统的实现方式是通过对云原有的组件进行裁剪并下沉到边缘,所以边涉及的概念是云的子集,而且与云保持一致。
端:部署在边上的一套微服务,目前没有引入新的概念。
Kubernetes是Google开源的大规模容器编排解决方案。整套解决方案由核心组件、第三方组件和容器运行时组成,具体如下所示。
1)核心组件
Kube-apiserver
:Kubernetes内部组件相互通信的消息总线,对外暴露集群API资源的唯一出口
Kube-controller
:保证集群内部资源的现实状态与期望状态保持一致
Kube-scheduler
:将需要调度的负载与可用资源最佳匹配
Kube-proxy
:为节点内的负载访问和节点间的负载访问做代理
Kubelet
:根据Kube-scheduler的调度结果,操作相应负载
2)第三方组件
Etcd
:存储集群的元数据和状态数据
Flannel
集群的跨主机负载网络通信的解决方案
需要对原来的数据包进行额外的封装、解封装,性能损耗较大
Calico
集群的跨主机负载网络通信的解决方案
纯三层网络解决方案,不需要额外的封装、解封装,性能损耗较小
CoreDNS
:负责集群中负载的域名解析
3)容器运行时
Docker
:目前默认的容器运行时
Containerd
:比Docker轻量,稳定性与Docker相当的容器运行时
Cri-o
轻量级容器运行时
目前稳定性没有保证
Frakti
基于Hypervisor的容器运行时
目前稳定性没有保证
KubeEdge是华为开源的一款基于Kubernetes的边缘计算平台,用于将容器化应用的编排功能从云扩展到边缘的节点和设备,并为云和边缘之间的网络、应用部署和元数据同步提供基础架构支持。KubeEdge使用Apache 2.0许可,并且可以免费用于个人或商业用途。
KubeEdge由云部分、边缘部分和容器运行时组成,具体如下所示。
云部分 | CloudCore
边缘部分 | EdgeCore
容器运行时 | Docker
目前,KubeEdge默认支持Docker
官方表示未来会支持Containerd、Cri-o等容器运行时
EdgeX Foundry是一个由Linux基金会运营的开源边缘计算物联网软件框架项目。该项目的核心是基于与硬件和操作系统完全无关的参考软件平台建立的互操作框架,构建即插即用的组件生态系统,加速物联网方案的部署。EdgeX Foundry使有意参与的各方在开放与互操作的物联网方案中自由协作,无论其是使用公开标准还是私有方案。
EdgeX Foundry微服务集合构成了4个微服务层及两个增强的基础系统服务。4个微服务层包含从物理域数据采集到信息域数据处理等一系列服务,两个增强的基础系统服务为4个微服务层提供服务支撑。
4个微服务层从物理层到应用层依次为设备服务(Device Service) 层、核心服务(Core Service) 层、支持服务(Supporting Service) 层、导出服务(Export Service) 层,两个增强的基础系统服务包括安全和系统管理服务,具体说明如下所示。
1)设备服务层
Device-modbus-go
:Go实现对接使用Modbus协议设备的服务
Device-camera-go
:Go实现对接摄像头设备的服务
Device-snmp-go
:Go实现对接SNMP服务
Device-mqtt-go
:Go实现对接使用MQTT协议设备的服务
Device-sdk-go
Go实现对接其他设备的SDK
SDK给设备接入提供了较大的灵活性
2)核心服务层
Core-command
:负责向南向设备发送命令
Core-metadata
:负责设备自身能力描述,提供配置新设备,并将它们与其拥有的设备服务配对的功能
Core-data
:负责采集南向设备层数据,并向北向服务提供数据服务
Registry & Config:负责服务注册与发现,为其他EdgeX Foundry微服务提供关于EdgeX Foundry的相关服务的信息,包括微服务配置属性
3)支持服务层
Support-logging
:负责日志记录
Support-notification
:负责事件通知
Support-scheduler
:负责数据调度
4)导出服务层
Export-client
:导出数据的客户端
Export-distro
:导出数据的应用
5)两个增强的基础系统服务
System-mgmt-agent
:提供启动、停止所有微服务的API
Sys-mgmt-executo
r:负责启动、停止所有微服务的最终执行
文章浏览阅读1.1k次。ln 命令用途 : 链接文件。语法1>将某个文件链接到一个文件上ln [ -f | -n] [ -s ] SourceFile [ TargetFile ]2>将一个或多个文件链接到一个目录上ln [ -f | -n] [ -s ] SourceFile … TargetDirectory描述ln 命令将在 SourceFile 参数中指定的文件_ln -fs
文章浏览阅读2.1k次。本文主要是对前一节(Netty多线程机制)中的一些未提及的有用的类(可控制可配置类)做进一步解释说明,由于NIO包和OIO包中类比较多,此文仅介绍与多线程相关的且有对外开放接口的类进行分析。NIO包结构如下图所示: 本文档主要讲解此包中的 DefaultNioDatagramChannelConfig类、NioDatagramChannelConfig接口、Ni_netty线程配置
文章浏览阅读181次。问题1:[root@Tony_ts_tian bin]# mysqladmin -uroot password 'kaka123'mysqladmin: connect to server at 'localhost' failedERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: N..._mysql> update user set host = '%' where user = 'root'; error 1062 (23000): d
文章浏览阅读234次。引言: SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏。所以这次博主就跟你们一起探究一下SpringBoot的启动原理。目录 启动流程图 启动类 启动分析 启动总结启动流程图总览: 上图为SpringBoot启动结构图,我们..._spring boot start机制
文章浏览阅读1.1k次。悖论:Bug越多越好对于互联网技术外行的人来说,直觉上理解,肯定是Bug越少越好的,说明 这个人做事稳定,质量高。如果你去问测试人员,一位技术开发工程师是Bug越多越好,还是越少越好?测试人员会告诉你,肯定是Bug越少越好,因为他做的功能都符合测试用例和产品需求的要求,千行代码缺陷少,质量高,返工率低。但作为技术人员的我,发现一个悖论:Bug越多的程序员越厉害。为什么?Bug数量在直观上是反映质量的水平,看似Bug和质量成反比,Bug越少质量越高,Bug越多质量越低。我们也可以从另外_开发人天和bug数 判断开发质量
文章浏览阅读2.7k次。原文:http://apps.hi.baidu.com/share/detail/6144871(说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动。)(在Linux下写串口通信程序。首先portName应该改为/dev/ttyS0, 然后QextSerialBase::EventDriven需要_qt信号如何只发一次
文章浏览阅读9.5k次,点赞4次,收藏34次。文章目录scp命令xshell客户端共享文件夹USB挂载使用的virtualBox版本:5.2.12ubuntu版本:ubuntu-16.04.6-server-amd64前提:windows可以ping通virtualBox中ubuntu系统;或在“网络地址转换(NAT)”方式中设置端口转发(不推荐)。主要介绍4种方法:scp命令,xshell客户端,共享文件夹,USB挂载。scp命令..._win10往虚拟机virtualbox ubuntu上传文件
文章浏览阅读848次。WPF编程学习——动画WPF中的动画——(一)基本概念WPF中的动画——(二)From/To/By 动画WPF中的动画——(三)时间线(TimeLine)WPF中的动画——(四)缓动函数WPF中的动画——(五)关键帧动画线性插值动画类适合单个动画,若要在两个以上的目标值之间使用其他内插方法或者进行动画处理,请使用DoubleAnimationUsingKeyFr..._thicknessanimation
文章浏览阅读1.5w次,点赞6次,收藏28次。一年前,看到过有个牛人用[HTML5](http://lib.csdn.net/base/html5)绘制了浪漫的爱心表白动画,后来又在[华超的这篇文章](http://blog.csdn.net/huachao1001/article/details/51489582)上看到大神用Android写出了相同的效果,于是也动手写了一下,并加了一些功能,感谢大神的指引,写给女票看她很开心呢。地址在这:[浪漫程序员 HTM_android表白
文章浏览阅读1.5k次。我试图在Scapy中编写一个简单的嗅探器,它只使用GET方法打印HTTP数据包.这是代码:#!/usr/bin/pythonfrom scapy.all import *def http_header(packet):http_packet=str(packet)if http_packet.find('GET'):print GET_print(packet)print packetdef GE..._scapy 嗅探http
文章浏览阅读1k次。出错:Site error: the file D:\php\webApp\ots\index.php requires the ionCube PHP Loader ioncube_loader_win_5.3.dll to be installed by the website operator. If you are the website operator please use th..._ioncube put the loader files in /usr/lib/php/20190902
文章浏览阅读1.1k次。记得以前在做Native App的时候类似于人人网侧边滑动的效果非常的热,很多app仿照该效果进行开发,在jqMobi中也有类似的效果被称为Side Menu.下面我们来一步一步实现该效果。首先新建一个html文件,引入jqMobi的框架,如下:> head> meta charset="utf-8"> title>Side Menutitle> _jqmobi