Serverless简介

说起当前最火的技术,除了最新的区块链,AI,还有一个不得不提的概念是Serverless。Serverless作为一种新型的互联网架构直接或间接推动了云计算的发展,从AWS Lambda到阿里云函数计算,Serverless一路高歌,同时基于Serverless的轻量计算开始登录云计算的舞台,本文将从两个部分展开:

介绍 Serverless的概念,历史及其现状与未来的思考。

Serverless Container的概念及现状。

一、聊聊Serverless

前文讲到serverless是一种新型的互联网架构,目前尚没有官方权威的定义,可以认为:

Serverless无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如AWS Lambda服务),客户端逻辑和服务托管远程过程调用的组合。

AWS Lambda 作为Serverless最早的框架产品由亚马逊在2014年推出,但最早Serverless概念的并不是由亚马逊提出,下面我们简单来聊聊Serverless的历史。

Serverless 历史

 

 

发轫之始

2012年云基础设施服务提供商Iron.io的副总裁Ken 提出软件的未来 ,首次提出来Serverless概念, 以下是原文的一段摘录:

Even with the rise of cloud computing, the world still revolves around servers. That won’t last, though. Cloud apps are moving into a serverless world, and that will bring big implications for the creation and distribution of software and applications.

初出茅庐

AWS Lambda产品的发布可以认为是Serverless的里程碑,再此之前Serverless几乎是停留在概念期,直到14年Lambda发布,让“Serverless”这一范式提高到一个全新的层面,为云中运行的应用程序提供了一种全新的系统体系架构,Serverless开始正式走向云计算的舞台。

崭露头角

在AWS发布Lambda之后,众多IaaS及Pass厂商争相入市,Google Cloud Functions, Azure Funcions, IBM OpenWhisk,阿里云函数计算,短短数年时间Serverless产品已遍地开花。

未来已来

随着容器技术,IoT,5G,区块链等技术的快速发展, 技术上对去中心化,轻量虚拟化,细粒度计算等技术需求愈发强烈,而Serverless必将借势迅速发展,未来Serverless将在云计算的舞台上大放异彩!

云计算发展看Serverless

首先,抛一个总结性观点:云计算的发展从IaaS,PaaS,SaaS,到最新的BaaS,FasS,在这个趋势中serverless(去服务器化)越来越明显,而Serveless的完善带给云计算将会是一次完美进化!

 

总所周知,云计算经历了从IDC -> IaaS -> PaaS -> Serverless/FaaS 的发展历程,下面对这些概念做一些基本介绍。

IaaS

 

__IaaS(Infrastructure as a Service) 基础设施即服务,__服务商提供底层/物理层基础设施资源(服务器,数据中心,环境控制,电源,服务器机房),用户需要通过IaaS提供的服务平台购买虚拟资源,选择操作系统,安装软件,部署程序,监控应用。

目前知名的IaaS平台有AWS,Azure,Google Cloud Plantform,阿里云以及开源的OpenStack等。

PaaS

 

PaaS(Platform as a Service) 平台即服务,服务商提供基础设施底层服务,提供操作系统(Windows,Linux)、数据库服务器、Web服务器、负载均衡器和其他中间件,相对于IaaS客户仅仅需要自己控制上层的应用程序部署与应用托管的环境。

目前知名的PaaS平台有 Amazon Elastic Beanstalk,Azure,Google App Engine,VMware Cloud Foundry等。

SaaS

SaaS(Software as a Service) 软件即服务, 服务商提供基于软件的解决方案,如OA、CRM、MIS、ERP、HRM、CM、Office 365、iCloud等,客户不需考虑任何形式的专业技术知识,只需要通过服务商平台获取软件使用即可。

 

BaaS

BaaS(Backend as a Service) 后端即服务,服务商为客户(开发者)提供整合云后端的服务,如提供文件存储、数据存储、推送服务、身份验证服务等功能,以帮助开发者快速开发应用。

FaaS

FaaS(Function as a Service) 函数即服务,服务商提供一个平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护基础架构。 按照此模型构建应用程序是实现“无服务器”体系结构的一种方式,通常在构建微服务应用程序时使用。

IaaS,PaaS,FaaS 对比

举个例子,比如小明想开一个水果店

IDC:如果盖房子,装修,然后上架水果这些工作都是小明自己来做。

IaaS:如果小明房子是租的,装修,上架水果是自己做。

PaaS: 如果小明房子是租的,可是房子已经装修好了,但是上架水果要自己来做。

FaaS:如果有一个商家提供装修好的水果店,小明只负责把水果送过来,其余上架工作都由商家来做。

总结

从IDC → IaaS,用户不用关注真实的物理资源。

从IaaS → PaaS,用户不再关注操作系统,数据库,中间件等基础软件。

从PaaS → BaaS/FaaS, 用户可以很少甚至不用关注backend,app可以简化为一个单页面程序。

可以说,Serverless是云计算发展到一定阶段的必然产物,云计算作为普惠科技,发展到最后一定是绿色科技(最大程度利用资源,减少空闲资源浪费),大众科技(成本低,包括学习成本及使用成本)的产品,而Serverless将很好的诠释这些!

Serverless/FaaS 模型

Serverless是基于事件驱动的编程范型,其底层的计算平台一般为轻量计算比如容器计算Docker。

针对该模型本文不再赘述, 下面以AWS Lambda及阿里云函数计算为例,简单介绍该模型。

AWS Lambda

 

大致流程如下:

UI驱动,通过模拟鼠标点击触发事件

当触发事件增多时lambda实例自动扩容

当触发事件减少时lambda实例自动缩容

阿里云函数计算

 

流程大致如下:

UI/Event/Message Driven触发事件

用户Function会package为一个docker镜像

事件调度系统配合Docker集群运行Docker容器来执行Function

Serverless价值与影响

低成本

运营成本,Serverless将用户的服务器,数据库,中间件委托于BaaS/FaaS,用户将不再参与基础设施及软件的维护,尤其在大规模的集群运营上成本大幅度降低。

开发成本,对比IaaS或者PaaS平台的服务器或者操作系统,Serverless的架构中,用户操作的是服务化的组件比如存储服务,授权服务等,可以缩短开发周期,降低开发难度。

真正的按需计费

Serverless/FaaS区别于IaaS/PaaS预先分配计算资源的计费方式,其计费方式通常是按请求次数及运行时间,一方面可以最大程度利用资源,另一方面真正的按需计费可以降低用户的资源成本。

高扩展

Serverless架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。

“绿色”计算

据统计,商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出,本质上这是对社会资源的一种浪费。而在Serverless架构下,提供商将提供更细力度的计算能力最大限度满足实时需求,资源利用率将大幅度提升,可以认为相对IaaS与PaaS Serverless/FaaS是一种 “绿色” 计算。

NoOps

运维的发展经历了人肉运维,自动化运维,DevOps,AiOps等,而Serverless带来一种新的运维模式,这种模式下用户需要管理的只有Code可以认为NoOps。

Serverless应用场景

事件驱动以及响应式架构

IoT物联网场景中低频请求

请求对及时响应需求不够

固定时间触发计算资源利用低的业务

流量突发场景

比如短时间大流量视频转码

短周期内的流量峰值

跨云与混合云场

边缘计算

其它 ...

Serverless未来的一些思考

细粒度的计算资源

目前主流的Serverless/FaaS技术底层的计算环境通常是容器比如Docker,容器技术是一种比硬件虚拟化更轻量的实现,用户可以在虚拟机上运行大量的容器,可以更大程度的利用计算资源。

而Serverless的需求可能是更细粒度的计算资源,比如最近华为发布的CCI产品容器的规格已经支持千分之一核,相信千分之一核只是开始,未来Serverless在细粒度资源使用上将发挥无限可能。

统一的容器调度模型

从当前Serverless/FaaS及容器生态的发展来看,容器基本都是运行在云主机之上比如aws的ec2,阿里云的ecs。

由于云厂商实现方式及不同产品的差异性,容器的调度框架选择不尽相同,比如有的厂商其Serverless产品是基于kubernetes管理云主机集群进行容器编排及调度比如华为的CCI,而有的产品比如阿里云的函数计算产品是基于自研的Agent进行容器调度。那么为什么没有一种产品可以为不同的Serverless服务提供通用的容器调度能力呢?

生态圈多样化

Serverless的发展必然会带动其周边生态的完善,比如BaaS及FaaS产品的形态将多样化输出,举个例子:

Serverless架构下用户的Code是没有服务端的,而这些服务将由云厂商以BaaS的服务形态提供,随着Serverless的发展,必然会催生多样化的BaaS服务。

产品抽象输出

Serverless是云计算普惠科技的重磅技术!Serverless出现将开发者从复杂的硬件及软件环境中解脱出来,而未来可以想象Serverless的产品将会以更加简单的方式呈现给用户,举个例子:大家熟知的乐高积木,不同的小零件按照不同的方式组装可以得到作品最终是多样化的。

而Serverless天生具备这种优势,可以想象如果Function以服务化的方式抽象,开发者开发一个Cloud App需要做的事情就是在无数的Function里面挑选自己需要的“积木“,然后通过一种可视化的工具进行"积木"组合!

二、Serverless Container

前文讲了一些Serverless生态的概念及现状,从当前主流Serverless/FaaS 框架如AWS Lambda,IBM OpenWhisk,Iron.io,阿里云函数计算分析来看,其底层的计算资源通常是Docker容器。可以认为Serverless构建于容器(Docker)之上!

什么是Serverless Container

Serverless Container(无服务器容器),用户不再需要关注容器集群和服务器,只需关注Docker容器或者Docker Image即可。

通过分析业界主流的的Serverless Container产品如 AWS Fargate, Azure ACI, 华为CCI 可以看出

Serverless Container 提供了更为简单的体验,用户不再需要理解容器编排技术如k8s,swarm

Serverless Container 提供了更细粒度的的能力,比如微核粒度的CPU资源和MB粒度的内存资源

Serverless Container 提供了将容器作为基础计算单元的思路

Serverless Container VS kubernets

kuberntes(k8s) 是谷歌开源的容器管理系统,类似的产品还有Docker Swarm, Apache Mesos以及集团内的产品Sigma。无疑这些优秀的集群管理系统尤其是k8s已经在生成得到了充分验证,从使用角度来说k8s需要用户具备容器及容器编排,集群管理等多方面的专业知识,而Serverless Container对用户屏蔽了容器集群管理,用户使用起来将更简单!

结论:Serverless Container在容器产品形态上是高于kubernetes的,事实上大部分的Serverless Container产品都基于或者兼容kubernetes。

Serverless Container VS Serverless/FaaS

根据上文的分析Serverless Container对用户提供的是一种容器计算资源,用户不需要关心容器集群,只需要定制vCpu,mem及Docker Image;而Serverless/FaaS 提供的是一种服务化的计算能力,用户同样不用关心计算集群,只需指定vCpu,mem及Code。

结论:FaaS及Serverless Container的底层计算资源都是Docker容器!



作者:阿里云云栖社区
链接:https://www.jianshu.com/p/c847bc77e027
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://www.cnblogs.com/Bkxk/p/11139928.html

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

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

相关文章

第九十期:哪种人是软件设计中的稀缺型人才?

好的系统架构离不开好的接口设计,因此,真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。 作者:从码农到工匠 好的系统架构离不开好的接口设计,因此,真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。 为什…

第九十一期:架构设计常用到的10种设计模式,你都知道吗?

企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构将决定软件实施过程中的功能属性和质量属性。因此,了解软件设计中的不同架构模式对我们的软件设计会有较大的帮助。 作者:abel_…

8. String to Integer (atoi)

1题目理解 输入:一个字符串s,可能包含空格、正负号、数字,还有其他字符。 输出:将字符串转为int 规则:字符串s一开始可能有很多空格,可以忽略这些空格,直到遇到第一个非空字符。从这个字符开始…

程序编码应保持良好的规范(C#)

呵呵,这个简直是超级老生常谈了。但我还是希望能让更多的程序员能了解一些细节习惯对于程序阅读性的影响。而这个很大程度决定了程序的可移植性。1。变量赋值之间注意保留空格。有些程序员往往不注意。不好的: Body.txtVersion.Textib.Version.ToString(…

第九十二期:多少程序员注意到了「中台」的背面?

中台这个词,最近两年特别火,它的爆发源于2015年张勇在阿里发出的内部信中提到的“大中台,小前台”战略。随后吸引了很多人开始“追逐”它。也有很多人开始借着这概念来挣钱。 作者:跨界架构师 这篇文章比较长,有5200…

框架学习 Spring之依赖注入DI

依赖注入的方式有四种: 1、Setter注入(属性注入) 2、构造器注入 3、P命名空间注入 4、集合类型值注入 1、Setter注入(属性注入) Employee 员工实体类 package com.spring.pojo;public class Employee {private Integer…

图:两点之间的最短距离

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 问题阐述 像 Google 地图、百度地图、高德地图这样的地图软件,如果想从家开车到公司,你只需要输入起始、结束地址,地图就会给你…

spring mvc学习(10):eclipse的环境前maven配置

一.maven的安装 1解压maven压缩包到某一路径下 2配置MAVEN_HOME 3配置path到MAVEN_HOME/bin下 二eclipse集成MAVEN 方法1:直接使用自带插件 1在用户目录/.m2文件夹下面创建setting.xml文件,配置maven仓库位置 2在eclipse中直接配置maven的文件路径 方法2&…

for in / for of 要会用

for in是ES5标准,遍历index ---索引 or key --- 键. 1 for (var index in arr){} // index 0 1 2 3...arr.length-1 1 for (var key in obj){} // key obj里边enumerable的属性(可枚举的属性) for of是ES6标准,遍历value---每…

162. Find Peak Element

文章目录1 题目理解2 线性扫描3 递归二分查找1 题目理解 输入&#xff1a;int[] nums并且 nums[i]!nums[i1] 输出&#xff1a;找到称为峰值的那个数字&#xff0c;返回其下标。 规则&#xff1a;峰值是指&#xff1a;nums[i-1]<nums[i] 并且 nums[i1]<nums[i]。你可以认…

spring mvc学习(11):eclipse的环境maven项目创建前期工作

1创建maven项目 2pom.xml有红色错误&#xff0c;生成web目录 3修改pom.xml配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…

spring mvc学习(12)---使用idea创建第一个maven项目

一.准备条件&#xff1a; 1.安装idea旗舰版 2.安装tomcat 二.打开idea开始创建 1.创建Project 2.选择项目类型为maven 3.输入组名和项目名 ---> 下一步 ---->下一步 4.maven项目创建完成 5.运行 &#xff08;1&#xff09;配置tomcate (2)添加tomcat &#xff08;3&…

深入浅出.NET泛型编程(1)

深入浅出.NET泛型编程(1) 使用泛型集合  .NET 2.0的System.Collections.Generics 命名空间包含了泛型集合定义。各种不同的集合/容器类都被"参数化"了。为使用它们,只需简单地指定参数化的类型即可。请看例2:例2.类型安全的泛型列表List&#xff1c;int&#xff1e…

74. Search a 2D Matrix

文章目录1 题目理解2 二分1 题目理解 输入&#xff1a;一个mxn的int数组matrix&#xff0c;这个数组每一行按照从小到大排序&#xff0c;并且下一行的第一个值大于上一行的最后一个值。一个int值target 返回&#xff1a;target在matrix中是否存在。存在返回true。 2 二分 我…

spring mvc学习(13)windows上安装maven

本地安装与配置&#xff1a; 1.jdk 在cmd中运行 Java -version 2.下载maven包 https://maven.apache.org/download.cgi下载最新版的Maven程序&#xff1a;&#xff08;选择bin zip包&#xff09; 将文件解压在D:\Program Files\apache-maven-3.5.4 3.下载eclipse并安装 …

spring mvc学习(14) the superclass “javax.servlet.http.HttpServlet” was not found

问题描述&#xff1a;   我们在用MyEclipse进行Java web开发时&#xff0c;可能会出现这样的错误&#xff1a;The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。我们该怎么解决这个问题呢&#xff1f; 我遇到的错误显示如下…

4. Median of Two Sorted Arrays

文章目录1题目理解2 二分查找解题2.1中位数的定义2.2 数组切分2.3分析条件1题目理解 输入&#xff1a;2个已经排序号的int数组nums1,nums2 输出&#xff1a;这两个数组合并后的中位数 要求&#xff1a;m是nums1的长度&#xff0c;n是nums2的长度。时间复杂度应该是O(log(mn))。…

第九十三期:带你聊聊 Java 并发编程之线程基础

百丈高楼平地起&#xff0c;要想学好多线程&#xff0c;首先还是的了解一下线程的基础&#xff0c;这边文章将带着大家来了解一下线程的基础知识。 作者&#xff1a;小九 01、简介 百丈高楼平地起&#xff0c;要想学好多线程&#xff0c;首先还是的了解一下线程的基础&#x…

我们还有理想吗?

兴致勃勃从海边享受了几天,本来打算回来后在这里写上几篇.其中还准备了一篇名为"一千个不加班的理由".可笑的是今天就从梦中醒来.因为有几个项目要加快投标准备了.我唯一能做的是耸耸肩膀,公司的事情当然要做,现实就是现实!前几天和老同学突然谈起一个话题,别的行业的…

17. Letter Combinations of a Phone Number

1 题目理解 给定一个字符串string&#xff0c;字符范围是[2,9]之间的数字。数字表示电话上的一个按钮。返回字符串的可能所有组合方式。每个数字对应的字母如下图所示。 Example 1: Input: digits “23” Output: [“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”…