在上一篇文章<<什么是云原生>>中和大家聊了下关于云原生的话题,在云原生的概念中比较明确的一个特点就是云原生是基于云计算的。在这种模式下用户的计算请求会被发送到云端服务进行处理,由云端完成复杂的数据计算后,再将结果以同步或异步方式返回调用客户端。
这就是典型的互联网"客户端/服务端"处理模式。但这并不是说只有云原生架构的应用才是这种模式,传统非云场景下的绝大多数互联网应用也都是这种模式,而这种方式也是互联网技术发展到今天最主流的计算场景。
只不过在这个过程中,随着用户数据计算规模越来越大,传统的非云场景要支撑日益增长的数据计算规模,所需的计算资源成本会大幅上升。而在这个时候,具备弹性伸缩能力的云计算服务,就应运而生了!相对于传统自建机房模式,使用云计算可以大大降低运维成本。
但这也只是从服务器计算资源的角度在看问题,要充分发挥云端服务的计算能力,还需要在系统架构上进行更合理的设计。而云原生架构模式就是从系统架构本身对整个软件系统的应用结构、部署模式等进行结构性优化,这一切的核心目的都是为了提高在"客户端/服务端"这种云端计算模式下服务的计算效率、提升用户响应速度。
然而云原生架构也并不是终极解决方案,在目前以移动互联网为主流的大数据时代,以及正在或即将到来的物联网、AI时代,数据的增长规模将达到PB级别(1TB=1024GB,1PB=1024TB),面对如此海量数据,分析计算结果所要求的时间却越来越短,在这种趋势之下,云端集中式数据处理方式将越来越难以满足这种需求。
我们也将被迫走到"边缘计算"这条路上,这也是为什么最近两年关于"边缘计算"、"Serverless"这些新概念讨论越来越多的原因。在今天的文章中,就和大家一起聊聊"边缘计算"这个话题。
边缘计算是什么
通过前面的叙述,相信你大概理解了边缘计算到底缘何而来,那么它到底是什么,在现阶段有何具体的落地场景及技术呢?
说起边缘计算最常见的举例就是章鱼,作为无脊椎动物中智商最高的一种动物,章鱼拥有巨量的神经元,但这些神经元中60%都分布在章鱼的八条腿上,而大脑中的神经元只占40%。如下图所示:
在这种生物结构下,章鱼在捕猎时异常灵巧迅速,腕足之间配合极好,从不会缠绕打结。而这种类似于“多个小脑 一个大脑”的分布式协作方式,就是边缘计算非常形象的表达。
回到我们所讲的边缘计算,它也是一种分布式计算:"在网络边缘侧的智能网关上就近处理采集的数据,而不是将大量数据上传到远端的数据中心进行集中处理"。边缘计算可以带来明显的计算优势,具体如下:
- 边缘计算可以更实时地进行数据处理和分析,让数据处理更靠近数据源,而不是外部数据中心或者云,这样可以缩短延迟时间;
- 减少网络流量。在物联网、AI时代随着各类设备数量的增加,数据的生产速度飞快,如果将这些数据都传回云端处理,那么将大大挤占网络带宽,造成更大的数据瓶颈;
- 降低预算成本。利用边缘计算所要采取的本地设备采购及数据处理方案所花费的成本,要大大低于使用云或者数据中心处理所花费的成本。
按照上述说法,既然边缘计算有这么多优势,那么它是否就能取代云端计算了呢?实际上边缘计算更适合物联网和AI计算场景,边缘计算准确的说是对云端集中式计算方式的一种补充和优化。以下我列举了几种有代表性的边缘计算场景,具体如下:
其实还有很多其他场景,随着物联网、AI时代的到来,边缘计算所延伸的场景将更加丰富。但说到这里,似乎边缘计算与咱们做互联网服务端的好像没有啥关系啊!但实际上技术都是相通的,虽然目前边缘计算更侧重于物联网/AI等领域,但是边缘计算的思想其实早就在互联网“客户端/服务端模式”中出现过,例如以Ajax为代表的“富客户端”技术,其本质就是一种减少服务端计算量的边缘计算思想。
只不过目前我们所谈论的边缘计算所涉及的层次要更加复杂,而不仅仅只是单个客户端的简单分散计算。就现阶段来说边缘计算的关键技术主要集中在以下两个方面:
在上述两个关键技术方向中,边缘网关技术更多的是偏向于网络边缘设备的计算能力,例如5G基站。所以这方面技术的发展由于行业及场景的不同,目前也没有一个统一的标准,另外这方面的内容也的确超出了咱们做互联网所涉及的技术范围。
因此,关于边缘网关技术的内容就不过多讨论了,接下来我们重点看下与互联网相关性更多的Serverless技术。
Serverless
从严格意义上来说,边缘计算与Serverless从定义及概念上并没有直接的关系。这主要是因为边缘计算与Serverless当前的应用场景还没有凸显出来,但从目前业界活跃的讨论氛围来看,Serverless技术未来有极大的可能会被应用于边缘计算场景。因为边缘计算的核心目的就是把原先必须在云端计算的逻辑放到边缘设备上去,从而更快地响应用户的操作需求,但要做到这一切就必须让边缘设备具备灵活执行用户计算代码的能力。
而以Serverless为代表的"云函数"技术,可以让用户在云端以比微服务粒度更细的单元去编写逻辑计算代码,但这种代码与传统云端运行的服务不同,它本身并不是一个持久存在并固定运行在某个服务器或容器中的进程,而是可以根据真正的用户事件进行触发式运算。在这个过程中,云服务所做的只是提供代码和配置的托管,以及根据事件触发运算调度,而真正的计算则是将"云函数"代码具体下放到某个具体的边缘设备去运行和使用。
这种无服务器计算的方式,能够非常巧妙的将云计算的调度能力与边缘具体算力有机结合起来,从而形成一个"大脑 多个小脑"的分布式计算系统。接下来我们具体看下Serverless的概念:
如上图所示Serverless从架构上主要可以分为:BaaS(后端即服务)、FaaS(函数即服务)两部分。
后端即服务(BaaS)说的是尽量使用现成的第三方服务来替换我们原来自己编码实现或搭建的服务器组件,它从概念上更类似于SaaS服务,例如直接使用云服务所提供的各类技术服务——COS对象存储、CDN容分发、CDB云数据库等。从技术实质上说Baas本身并没有什么新奇之处,更多的是一种尽量使用第三方服务来减少自己构建通用基础服务的概率,而尽量做到无服务或少服务。
而函数即服务(SaaS)则是一种构建和部署软件的全新方法,它为云中运行的应用程序提供了一种新的系统体系结构。在这种结构之下,再也不用在服务器上持续运行服务进程以等待HTTP请求或调用,而是可以通过某种事件机制来具体触发函数代码执行,这是一种更节省成本的云计算方式。
目前许多云服务厂商都在抓紧布局Serverless技术,可见Serverless技术的发展将是大势所趋。下图为腾讯云所提供的云函数产品界面示意图:
现阶段Serverless技术还处于早期发展阶段,相信随着更多应用场景的落地,在不久的将来Serverless技术必将被广大企业和开发者所接受,从而成为改变现有软件开发部署模式的新一代技术潮流。
以上就是本文想要表达的全部内容,感兴趣的朋友可以找个Serverless云服务产品(如腾讯云云函数或Serverless Framework)具体体验下Serverless的开发流程!如果觉得本文对你有所帮助,可以点赞关注下!谢谢~