精华内容
参与话题
问答
  • Serverless

    2017-12-20 20:11:35
    Serverless有两个概念,BaaS(Backend as a Service,后端即服务)和FaaS(Functions as a Service,函数即服务)。1、BaaS,云服务用API的形式提供了基础服务,如云端数据/文件存储(例如Parse

    一、什么是Serverless

    Serverless,云计算的一种应用模式。并不是说没有服务器,而是让我们可以不用关心服务器。

    为啥说不用关心服务器呢?

    Serverless有两个概念,BaaS(Backend as a Service,后端即服务)和FaaS(Functions as a Service,函数即服务)。

    1、BaaS,云服务用API的形式提供了基础服务,如云端数据/文件存储(例如Parse、Firebase)、消息推送(例如极光推送、个推)、应用数据分析等等。应用尽有。

    2、FaaS,用户写的业务逻辑,通过代码形式提交到云就完事了(注意是提交,而不是部署),云服务商提供的FaaS框架会将它们进行管理,注册成一个个事件,触发即自动执行。(我粗浅地将FaaS理解成类似Tomcat的Web服务器,只要我们将网站打包往里面一丢即可,有人访问就会返回一张张页面)。

    可见这种模式,对用户而言,要基础服务,可以直接调用;自己独特的业务逻辑,提交即可直接运行在云端,根本没有也无须有服务器的概念。

    使用BaaS和FaaS是Serverless应用的基本特征,符合这两个基本特征的应用可称为Serverless应用。

    二、Serverless有什么优点?

    1、让我们可以专注于业务
    因为无须考虑任何主机、操作系统、数据库、甚至像tomcat之类的web服务器,我们可以将精力集中在业务上。

    2、业务更敏捷
    我们可以只编写核心业务代码,像加载资源、配置等辅助功能都不再有。
    其实这个有时可能会很不方便。配置很多时对于一个完整的程序而言,是必不可少的。从Serverless的应用特点来看,我估计一个系统,极少会完全采用Serverless架构,而是将核心代码采用Serverless,而相关辅助功能采用其他架构的混合模式。

    3、利于水平扩展
    Serverless 的FaaS会为每一个事件、每一个API请求都启动一份新的进程,而不是线程,因此没有内存等资源共享。最大进程数目只取决于FaaS框架。

    4、省钱
    由于无须维护一个虚拟机,或者云服务器,使用者只须为代码的执行时间付费;而代码通过事件触发,且每次请求的生命周期都很短(太长的不适宜用Serverless),所以直接的花费大大节省了。如果是虚拟机,云主机,空间租用则不然,即使夜深人静,系统无人访问,我们也要为这部分时间付费。

    节省的间接花费就更多了:

    水平扩展的粒度从原来的云主机细化到进程,不用再购买闲置的云主机来抵消Auto-Scaling的配置不精确带来的影响。业务的敏捷性提高也降低了营运成本,我们不再需要精通操作系统配置和管理的营运人员,不仅节省了人力成本,也节省了应用从开发到上线的时间。

    三、Serverless的缺点

    1、启动速度慢
    FaaS并不像虚拟机一样随时处于待机状态,因此需要花费额外的时间进行代码加载;同时,目前Serverless应用通常运行在公共云的多租户环境中,启动延时还受系统负载影响,很难保证应用在规定时间内被运行。这对实时系统是无法接受的。

    2、无法用于高并发应用
    为每个请求启动一个进程开销太高。

    3、运行时间受限
    Serverless应用无法常驻内存,运行的时间是受限的。如果你的应用无法在数分钟内完成的工作,那Serverless不是你的选择,例如AWS Lambda给予进程的最长运行时间是5分钟,超时后进程将被强制终止。这对程序设计提出了挑战。

    4、Serverless调用之间不能共享状态让编写复杂程序变得极度困难

    5、代码要使用云服务商提供的FaaS框架进行改写,比如AWS Lambda,一方面增加了工作量,另一方面可能每个云服务商的框架都不一样,移植不便;且运行这些框架还可能需要使用云服务商指定的服务,与云服务商绑定太紧。

    上面都是Serverless架构的一些固有局限,它们源于Serverless架构的特点,很难随着时间的推移、技术的完善而解决。除此之外,作为一个新的技术,Serverless还面临着集成测试困难、Vendor Lock-in、调试监控困难、版本控制等诸多不足,每一项都会成为采用Serverless架构的阻碍。

    由于这些局限性,Serverless架构不会成为复杂应用的架构首选,相反,它应该是后端小程序的未来。

    四、Serverless应用场景
    例如:

    1、低频请求场景

    物联网行业中,由于物联网设备传输数据量小,且往往是固定时间间隔进行数据传输,因此经常涉及低频请求场景。例如:物联网应用程序每分钟仅运行一次,每次运行50ms,这意味着CPU的使用率为0.1%/小时,这也意味着其实有1000个相同的应用可以共享计算资源。而Serverless架构下,用户可以购买每分钟100ms的资源来满足计算需求,通过这种方式就能够有效解决效率问题,降低使用成本。

    2、流量突发场景

    移动互联网应用经常会面对突发流量场景,例如:移动应用的通常流量情况是QPS 20,但每隔五分钟会有一个持续10s的QPS 200流量(10倍于通常流量),传统架构下企业必须扩展QPS 200的硬件能力来应对业务高峰,即使高峰时间仅占整个运行时间的4%;而在Serverless架构下,用户可以利用弹性扩展特性,快速构建新的计算能力来满足当前需求,当业务高峰后,资源能够自动释放,有效节省成本

    云端的应用有大量的小程序场景,例如识别一张图片、对一段音频/视频进行编解码、对IOT设备的请求返回一小段数据、将客户提交的工单通过邮件通知客服人员等等。这些基于事件触发的小程序在传统架构中实现起来是相对复杂的,你往往需要为20%的核心业务运营80%的支撑业务。Serverless完美的解决了这些问题,它可以成为复杂应用的一种补充架构。我们可以将无状态的、事件触发的业务拆分成Serverless应用,让整个架构变得更加的简洁和高效。

    五、与其他云计算模式的比较
    以往,云计算有
    IaaS(基础即服务,如VM,即虚拟机,或者存储空间?)
    PaaS(平台即服务,例如阿里云,自带操作系统.)
    SaaS(软件即服务,成套软件,比如在线CRM,ERP)
    三种模式
    Serverless则将粒度细分成一个个函数。

    1、Serverless VS PaaS
    很多人认为Serverless是PaaS的一种,或者是PaaS的一种特殊形态。或者说,Serverless是细粒度的一种PaaS?我可能对PaaS理解得不对,怎么觉得PaaS跟接近虚拟机呢。

    2、Serverless VS 微服务
    Serverless和微服务没有直接关系,但两者有相似之处,例如都需要做业务拆分、强调无状态、具有敏捷特性等。Serverless在很多方面比微服务粒度更细,要求也更严格。例如微服务以服务为边界拆分业务,Serverless以函数为边界拆分业务;微服务可以有跨调用的内存状态共享,Serverless要求调用彻底无状态。此外,Serverless依赖BaaS提供第三方依赖,而微服务可以自由选择第三方依赖来源,例如使用本地搭建的传统中间件栈(如本地MySql和消息总线)。

    3、Serverless VS 容器
    Serverless是一种软件设计架构,容器是软件架构的承载者。但是,我觉得FaaS框架能够管理我们提交的代码并执行,具备了容器的功能。


    另一种比较:
    目前,云服务商向用户提供计算资源服务的架构主要有三种,包括:虚拟机架构(VM)、容器服务架构(Container)、功能函数架构(Function即Serverless)。其主要对比如下图所示:
    这里写图片描述

    相关文章

    Serverless,后端小程序的未来

    Serverless 架构:用服务代替服务器

    你需要了解的未来技术趋势——Serverless怎样改变未来架构?

    云计算

    展开全文
  • serverless

    千次阅读 2019-06-14 23:45:58
    1.《深入浅出Serverless技术原理与应用》----陈耿 2.《Serverless架构》----Cagatay Gurturk 3.《AWS IN ACTION》----Andreas Witting,Michael Witting 4.《Spring Microservices IN ACTION》----John Carnell ...

    参考书目:
    1.《深入浅出Serverless技术原理与应用》----陈耿
    2.《Serverless架构》----Cagatay Gurturk
    3.《AWS IN ACTION》----Andreas Witting,Michael Witting
    4.《Spring Microservices IN ACTION》----John Carnell


    1.云计算基础
    2.serverless原理
    3.基于docker(或rkt),k8s平台的serverless总体架构图
    4.相关资源总结






    1.云计算基础

    云计算类型:

    • 公有云 Public Cloud:由某一机构,公司管理并对公众开放使用的云计算
    • 私有云 Private Cloud:在单个的机构中通过虚拟化共享出来的IT基础设施
    • 混合云 Hybird Cloud:公有云和私有云的混合

    云计算服务类型:
    传统:

    • IaaS:Infrastructure as a Service
      基础设施即服务–提供计算,存储,网络等功能的基本资源,使用Amazon EC2,Google Compute Engine和Microsoft Azure虚拟机这一类虚拟服务器。

    • PaaS:Platform as a Service
      平台即服务–提供将定制的应用部署到云上的平台,如AWS Elastic Beanstalk,Google App Engine和Heroku

    • SaaS:Software as a Service
      软件即服务–结合了基础设施和软件并且运行在云端,包括Amazon WorkSpaces,Google Apps for Work和Microsoft Office 365这一类办公应用

    新兴:

    • FaaS:Function as a Service
      函数即服务–基于FaaS的应用会使用像Amazon Lambda技术和Google Cloud函数这样的设施,应用将会以“无服务器(serverless)的形式部署,这些代码会完全在云计算提供商的平台计算设施上运行。使用FaaS平台,无需管理任何服务器基础设施,只需支付执行函数所需的计算周期。

    • CaaS:Container as a Service
      容器即服务–使用容器即服务模型,开发人员将微服务作为便携式虚拟容器(如Docker或rkt)进行构建并部署到云供应商的云计算平台。与IaaS模型不同,使用IaaS的开发人员必须管理部署容器的虚拟机,而CaaS则是将服务部署在轻量级的虚拟容器中。云供应商会提供运行容器的虚拟服务器,以及用于构建,部署,监控和伸缩容器的综合工具。Amazon Elastic Container Service(Amazon ECS)就是一个基于CaaS平台的例子。


    注意:使用云计算的FaaS和CaaS模型,开发人员任然可以构建基于微服务的架构。微服务的核心为在于构建有限职责的小型服务,并使用基于HTTP的接口进行通信。新型的云计算平台(FaaS,CaaS)是部署微服务的替代基础设施机制。




    2.serverless原理

    serverless简介

    在Servrerless架构中,服务器由云计算平台透明帮你调度,用户无需关心。

    Serverless应用只有处于在线状态下才进行计费,空闲状态下将不会产生费用。
    而传统的服务只要你申请使用了云计算商的服务器,不论你的应用空闲还是繁忙都将产生费用。
    因为对于传统的服务而言,你需要先向云计算商申请主机,你申请到的主机在使用期间内将由你掌管维护,而Serverless主要是去除了用户自主申请主机这一步骤,用户只需提供需要运行的程序即可,当你的程序处于运行状态时,云计算厂商自主为你的程序配置环境运行及主机等一切与程序运行相关的服务,当程序空闲时,厂商将释放掉这些资源,因而不会计费。

    serverless架构的核心思想为:去基础架构,用户只需关心程序代码的具体实现,具体到程序的运行,sdk,网络,存储,服务器等所有程序运行所需的资源都交由云计算平台提供商的透明调度,用户无需关心维护。

    serverless平台特点:

    • 抽象了底层计算资源
    • 按使用量计费
    • 自动弹性扩展
    • 事件驱动

    serverless实现基础

    FaaS是当前serverless实现的技术基础。
    FaaS的核心为:应用程序不在是一个众多功能的集合体,而是一个个的驱动函数function。
    每一个函数完成一个相对简单的业务逻辑,一个完整的应用由若干个函数组成。

    注意:
    serverless的核心观念为:为开发人员去基础设施,使其只关注应用程序本身功能的实现。
    而FaaS恰好契合了这一观念,因此被广泛应用于serverless平台的实现,但是serverless并没有强制要求一定要基于FaaS平台实现。


    FaaS平台架构图:
    在这里插入图片描述FaaS平台主要组件:

    • 函数定义(Function Definition):一个函数实现一个业务逻辑
    • 函数实例(Function Instance):处于运行状态的应用函数实例
    • 控制器(Controller):负责应用函数的加载,执行等流程的管理
    • 事件(Event):事件驱动架构中的事件
    • 事件源(Event Source):事件驱动架构中的事件来源。可以是一个DB中插入了新的记录,一个目录里删除了一个文件,或是消息队列里收到了新的消息等等。
    • 触发规则(Trigger Rule):定义事件与函数的关系及触发的规则。
    • 平台服务(Platform Service):支撑应用运行的各类底层服务,如计算资源,网络,存储等。

    函数的生命周期:
    在FaaS上一个函数从创建到执行的生命周期:
    在这里插入图片描述

    • 用户根据所选定的FaaS平台的规范进行函数应用的开发。当前主流的FaaS平台都支持多种不同的编程语言。
    • 编写好的函数将上传至FaaS平台。平台将负责编译和构建这些函数,并将构建的输出保存。一个完整的FaaS平台可以对函数进行版本控制
    • 用户设置函数触发的规则,将事件源与特定的版本的函数进行关联。一个函数可以和多个不同版本的事件的事件源进行关联。
    • 当事件到达且满足条件时,平台将会部署,编译构建后的函数并执行。平台将监控函数执行的状态,根据请求量的大小,平台负责对函数实例进行扩容和缩容。



    3.基于docker(或rkt),k8s平台的serverless总体架构图

    在这里插入图片描述

    函数工作流:
    一个应用场景的完成通常需要多个函数协作完成。当涉及多个函数时,就需要有逻辑处理执行的顺序,错误重试,异常捕获及状态传递等细节。
    这种需求往往需要用户在早期实现函数时自行添加编排逻辑。
    但是编排逻辑并非核心业务逻辑,它的引入影响了函数的开发效率。
    故一些FaaS实现开始提供针对FaaS函数的流程编排服务或工具,以简化FaaS应用的流程编排,如==AWS Step Functions ==和 Fission Workflows

    AWS Step Functions 主页:https://aws.amazon.com/step-functions

    在这里插入图片描述




    4.相关资源总结


    serverless技术发展:

    1. serverless平台。
      提供serverless应用开发和运维的公有云的私有云平台。
      如:AWS Lambda,Azure Functions,Google Cloud Functions等公有云平台;OpenWhisk,Fission,Kubeless,Fn,OpenFaaS等可以被部署在私有数据中心的开源serverless平台。

    2. serverless框架。
      serverless平台为用户提供了开发和运行serverless的基础,但是不同的serverless平台的规范和开发方式不尽相同。(注意在此关注Knative技术,Knative为Google等公司对serverless规范化开发的技术)
      为了方便用户同时在多个不同的平台上开发和部署应用,业界出现了一批serverless框架,以帮助用户降低serverless应用开发部署的复杂度。
      如:Serverless Framework框架同时支持AWS,Azure,Google及OpenWhisk等众多平台。通过Serverless Framework用户可以屏蔽底层不同平台的差异,通过一个统一的接口部署,测试和管理在不同平台上的serverless应用。
      Apex是一款针对AWS Lambda的serverless增强框架,可以让用户使用非AWS Lambda官方原生支持的编程语言开发应用函数,并将其发布到AWS Lambda平台上。

    3. serverless工具。
      各类serverless应用的辅助工具,简化serverless应用设计和部署的.architect。
      如:帮助用户监控管理serverless应用的日志和性能的Dashbird和IO Pipe,帮助用户对serverless应用进行持续集成的LambCI

    4. 编程语言库。
      针对某种编程语言的serverless类库。
      python-
      是一款基于python语言的serverless工具,可以简化基于python的AWS Lambda应用的开发和部署。

    5. 后台服务。
      完整的serverless应用往往还依赖于第三方的后台服务,以解决安全,数据持久化,消息传递等需求。
      如:安全服务Puresec,为serverless应用提供安全运行环境(Serverless Security Runtime Environment,SSRE);Snyk提供Serverless应用的安全漏洞扫描服务。传统的与服务如AWS S3,AWS DynamoDB,AWS ELB等都属于设计和构建serverless应用是的BaaS(Backend as a Service)。


    serverless与公有云


    serverless与私有化部署

    • Knative
      主页:
      https://knative.dev/
      文档:https://knative.dev/docs/
      Github:https://github.com/knative/
      来自阿里云的介绍:
      Knative 简介 https://yq.aliyun.com/articles/658800

      knative 是谷歌开源的 serverless 架构方案,旨在提供一套简单易用的 serverless 方案,把 serverless 标准化。目前参与的公司主要是 Google、Pivotal、IBM、Red Hat,2018年7月24日才刚刚对外发布,当前还处于快速发展的阶段。

      来自开源中国的介绍:
      基于 Kubernetes 与 Istio 的 Serverless 架构方案 Knative https://www.oschina.net/p/knative
      在这里插入图片描述

    • Open Whisk:
      主页:https://openwhisk.apache.org/
      文档:https://openwhisk.apache.org/documentation.html
      Github:https://github.com/apache/incubator-openwhisk
      Open Whisk为开源的serverless FaaS平台。
      这个源于IBM的serverless平台目前由Apache基金会管理和孵化。
      OpenWhisk是一个功能完备的FaaS平台,包含事件驱动及函数执行时等核心平台组件。
      OpenWhisk可以运行在不同的基础架构之上,包括各类物理机,虚拟机,容器平台(如k8s),PaaS(如OpenShift),公有云(如AWS,Azure)和私有云(如Open Stack)环境中。此外,IBM的云服务IBM Cloud哈提供了基于Open Whisk的公有云服务IBM Cloud FUnctions。

    • Kubeless:
      主页:https://kubeless.io/
      文档:https://kubeless.io/docs/
      Github:https://github.com/search?q=kubeless&type=Repositories
      Kubeless是一个基于k8s的开源serverless FaaS平台框架,其定位是增强k8s的能力,使k8s的应用场景可以延伸至serverless FaaS领域。
      其为k8s的原生serverless实现,直接引用k8s的原生组件进行设计。
      用户可以通过定制容器镜像来自定义函数的执行环境。

    • Fassion:
      主页:https://fission.io/
      文档:https://docs.fission.io/
      Github:https://github.com/search?q=fission
      Fassion由Platform 9公司创建的开源项目,是基于k8s平台构建的serverless框架,增强了k8s的能力,使其可以应用于FaaS。
      用户可以在k8s集群上与运行Fission以提供FaaS平台服务。
      通过k8s的容器编排能力,Fission对底层的容器化函数执行环境进行调度和编排。

    • OpenFaas:
      主页:https://www.openfaas.com
      文档:https://docs.openfaas.com/
      Github:https://github.com/search?q=openfaas
      OpenFaas是来自于Docker社区的一款serverless框架,其利用docker及k8s或Docker Swarm提供Faas计算平台。同Fission,Kubeless不同的是:OpenFaaS除了支持k8s外,还支持Docker Swarm。
      Fission和Kubeless都倾向于向用户隐藏底层容器技术的细节,而OpenFaaS中函数是以容器的形式定义的,容器对于用户而言并不是抽象的,用户在定义函数时将指定具体的容器镜像。因为函数的封装格式是Docker容器镜像,因此用户可以使用任何运行在Docker容器中的技术来实现他们的函数逻辑。

    • Fn
      主页:https://fnproject.io/
      Fn为Oracle公司支持的一个开源的Serverless FaaS项目。
      Fn项目的特点是基于容器技术(Docker native),支持多个不同的容器编排平台,包括k8s,Docker Swarm及Mesosphere,支持在不同的私有云和公有云平台上进行部署。



    serverless框架和工具
    serverless应用往往包含许多细粒度的函数。
    serverless的运行环境是在远端的云环境之上。
    目前serverless技术还为建立行业规范,每个serverless平台的用户接口都不相同。
    (Google的Kantive正在试图使serverless服务规范化。)
    为了解决如上问题,社区出现了一批框架和工具,以帮助用户进行serverless的开发。

    • Serverless Framewok
      主页:
      https://github.com/serverless/serverless
      Serverlesss Framework是一款帮助用户构建,部署和管理在不同serverless平台之上应用的命令行工具。由Node.js语言编写。

    • Chalice
      主页:https://github.com/aws/chalice
      Chalice是AWS官方支持的开源项目。基于python实现,用于简化用户定义和部署AWS Lambda上的应用。

    • Cloaudia.js
      主页:https://github.com/claudiajs/claudia
      Cloaudia.js采用Node.js语言编写,只支持Node.js的AWS Lambda应用。其目的为简化Node.js AWS Lambda的构建和部署。

    • Apex
      主页:https://github.com/apex/apex
      Apex采用go语言编写,为一款AWS Lambda工具,帮助用户部署和管理AWS Lambda应用。Apex支持多种语言:node.js,python.java,go。同时Apex还通过Shim支持AWS Lambda原生不支持的语言,如:rust和Clojure等。

    • Spring Cloud Function
      主页:https://github.com/spring-cloud/spring-cloud-function
      是Spring针对Serverless架构推出的一个新项目,其目的意在提供一种于具体平台无关的serverless的应用开发模式。
      通过Spring Cloud Function,Java程序员可以使用Spring,Spring Boot的特性来开发Serverless应用,并将应用部署和运行在不同的云平台上。

    • AWS SAM
      主页:https://github.com/awslabs/serverless-application-model
      AWS SAM:AWS Serverless Apllication Model,它是AWS推出的一个Serverless应用的定义规范。SAM的目的是让用户可以更清晰更便捷的定义基于AWS Lambda的serverless应用。
      用户根据SAM的规范编写JSON或者YAML格式的Serverless应用模板,在通过命令行工具对定义好的应用进行本地测试,并最终发布到AWS Lambda平台上。















    展开全文
  • serverLess

    2019-08-07 10:51:11
    segmentfault.com/a/119000001… 转载于:https://juejin.im/post/5d4aad16f265da03ea5a675b

    segmentfault.com/a/119000001…

    转载于:https://juejin.im/post/5d4aad16f265da03ea5a675b

    展开全文
  • Serverless Webpack

    2020-11-22 12:39:34
    <div><p>Hello! <p>First of all, great idea opening this repo! It could become not only a trusted source of plugins but hopefully a good review process for new plugins. ...serverless/plugins</p></div>
  • <div><h1>This is a Bug Report <p>Sorry, unsure which repo this issue would belong to, given the number of plugins in use. <h2>Description ...serverless-heaven/serverless-webpack</p></div>
  • Serverless architecture encompasses many things, and before jumping into creating serverless applications, it is important to understand exactly what serverless computing is, how it works, and the ...
  • In 2020, the Serverless Framework began introducing advanced functionality for specific serverless use-cases, known as Serverless Framework Components. Check out the Components featured below, and ...
  • Serverless Framework with JavaScript Example project using the Serverless Framework, JavaScript, AWS Lambda, AWS API Gateway and GitLab Pages. Deployment Secrets Secrets are injected into your ...
  • Serverless framework

    2020-12-01 14:46:37
    <div><p>Added support for the <a href="https://serverless.com">serverless framework</a>. <p>Modularized the engines and moved under the "engines" directory. This required the use of ...
  • Packt.Docker.for.Serverless.Applications.1788835263.pdf Chapter 1, Serverless and Docker, introduces serverless and Docker. We will find the relationship between them in this chapter. We will also ...
  • /root/.serverless/components/registry/npm/-next/serverless-component.18.0-alpha.18/node_modules/-next/serverless-component' </code></pre> <h3>Actual behavior <p>The remove job results in: <pre>...
  • <p>Using config based on the <a href="https://github.com/elastic-coders/serverless-webpack/tree/master/examples/serverless-offline">example, after upgrading to serverless-webpack.2.0, serverless-...
  • 看懂 Serverless,这一篇就够了

    万次阅读 多人点赞 2019-05-29 16:11:59
    无服务器(Serverless)计算是什么2. 理解Serverless技术---FaaS和BaaS2.1 Faas(Function as a Service,函数即服务)2.2 Baas(Backend as a Service,后端即服务)3. 无服务器(Serverless)计算如何工作?4. 无...

    1. 无服务器(Serverless)计算是什么

    serverless
    云计算涌现出很多改变传统IT架构和运维方式的新技术,比如虚拟机、容器、微服务,无论这些技术应用在哪些场景,降低成本、提升效率是云服务永恒的主题。

    过去十年来,我们已经把应用和环境中很多通用的部分变成了服务。Serverless的出现,带来了跨越式变革。Serverless把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包出去,把它们看作某种形式的商品——厂商提供服务,我们掏钱购买。

    过去是“构建一个框架运行在一台服务器上,对多个事件进行响应”,Serverless则变为“构建或使用一个微服务或微功能来响应一个事件”,做到当访问时,调入相关资源开始运行,运行完成后,卸载所有开销,真正做到按需按次计费。这是云计算向纵深发展的一种自然而然的过程。

    Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了部署应用无需涉及基础设施的建设,自动构建、部署和启动服务。

    国内外的各大云厂商 Amazon、微软、Google、IBM、阿里云、腾讯云、华为云相继推出Serverless产品,Serverless也从概念、愿景逐步走向落地,在各企业、公司应用开来。

    2. 理解Serverless技术—FaaS和BaaS

    Serverless由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。Serverless涵盖了很多技术,分为两类:FaaS和BaaS。

    2.1 FaaS(Function as a Service,函数即服务)

    FaaS意在无须自行管理服务器系统或自己的服务器应用程序,即可直接运行后端代码。其中所指的服务器应用程序,是该技术与容器和PaaS(平台即服务)等其他现代化架构最大的差异。

    FaaS可以取代一些服务处理服务器(可能是物理计算机,但绝对需要运行某种应用程序),这样不仅不需要自行供应服务器,也不需要全时运行应用程序。

    FaaS产品不要求必须使用特定框架或库进行开发。在语言和环境方面,FaaS函数就是常规的应用程序。例如AWS Lambda的函数可以通过Javascript、Python以及任何JVM语言(Java、Clojure、Scala)等实现。然而Lambda函数也可以执行任何捆绑有所需部署构件的进程,因此可以使用任何语言,只要能编译为Unix进程即可。FaaS函数在架构方面确实存在一定的局限,尤其是在状态和执行时间方面。

    在迁往FaaS的过程中,唯一需要修改的代码是“主方法/启动”代码,其中可能需要删除顶级消息处理程序的相关代码(“消息监听器接口”的实现),但这可能只需要更改方法签名即可。在FaaS的世界中,代码的其余所有部分(例如向数据库执行写入的代码)无须任何变化。

    相比传统系统,部署方法会有较大变化 – 将代码上传至FaaS供应商,其他事情均可由供应商完成。目前这种方式通常意味着需要上传代码的全新定义(例如上传zip或JAR文件),随后调用一个专有API发起更新过程。

    FaaS中的函数可以通过供应商定义的事件类型触发。对于亚马逊AWS,此类触发事件可以包括S3(文件)更新、时间(计划任务),以及加入消息总线的消息(例如Kinesis)。通常你的函数需要通过参数指定自己需要绑定到的事件源。

    大部分供应商还允许函数作为对传入Http请求的响应来触发,通常这类请求来自某种该类型的API网关(例如AWS API网关、Webtask)。

    2.2 BaaS(Backend as a Service,后端即服务)

    BaaS(Backend as a Service,后端即服务)是指我们不再编写或管理所有服务端组件,可以使用领域通用的远程组件(而不是进程内的库)来提供服务。理解BaaS,需要搞清楚它与PaaS的区别。

    首先BaaS并非PaaS,它们的区别在于:PaaS需要参与应用的生命周期管理,BaaS则仅仅提供应用依赖的第三方服务。典型的PaaS平台需要提供手段让开发者部署和配置应用,例如自动将应用部署到Tomcat容器中,并管理应用的生命周期。BaaS不包含这些内容,BaaS只以API的方式提供应用依赖的后端服务,例如数据库和对象存储。BaaS可以是公共云服务商提供的,也可以是第三方厂商提供的。其次从功能上讲,BaaS可以看作PaaS的一个子集,即提供第三方依赖组件的部分。

    BaaS服务还允许我们依赖其他人已经实现的应用逻辑。对于这点,认证就是一个很好的例子。很多应用都要自己编写实现注册、登录、密码管理等逻辑的代码,而对于不同的应用这些代码往往大同小异。完全可以把这些重复性的工作提取出来,再做成外部服务,而这正是Auth0和Amazon Cognito等产品的目标。它们能实现全面的认证和用户管理,开发团队再也不用自己编写或者管理实现这些功能的代码。

    3. 无服务器(Serverless)计算如何工作?

    与使用虚拟机或一些底层的技术来部署和管理应用程序相比,无服务器计算提供了一种更高级别的抽象。因为它们有不同的抽象和“触发器”的集合。

    拿计算来讲,这种抽象有一个特定函数和抽象的触发器,它通常是一个事件。以数据库为例,这种抽象也许是一个表,而触发器相当于表的查询或搜索,或者通过在表中做一些事情而生成的事件。

    比如一款手机游戏,允许用户在不同的平台上为全球顶级玩家使用高分数表。当请求此信息时,请求从应用程序到API接口。API接口或许会触发AWS的Lambda函数,或者无服务器函数,这些函数再从数据库表中获取到数据流,返回包含前五名分数的一定格式的数据。

    一旦构建完成,应用程序的功能就可以在基于移动和基于 Web 的游戏版本中重用。

    这跟设置服务器不同,不是必须要有Amazon EC2实例或服务器,然后等待请求。环境由事件触发,而响应事件所需的逻辑只在响应时执行。这意味着,运行函数的资源只有在函数运行时被创建,产生一种非常高效的方法来构建应用程序。

    4. 无服务器(Serverless)适用于哪些场景?

    serverless
    在现阶段,Serverless主要应用在以下几个场景。首先在Web及移动端服务中,可以整合API网关和Serverles服务构建Web及移动后端,帮助开发者构建可弹性扩展、高可用的移动或 Web后端应用服务。在IoT场景下可高效的处理实时流数据,由设备产生海量的实时信息流数据,通过Serverles服务分类处理并写入后端处理。另外在实时媒体资讯内容处理场景里,用户上传的音视频到对象存储OBS,通过上传事件触发多个函数,分别完成高清转码、音频转码等功能,满足用户对实时性和并发能力的高要求。无服务器计算还适合于任何事件驱动的各种不同的用例,这包括物联网,移动应用,基于网络的应用程序和聊天机器人等。这里简单说两个场景,方便大家思考。

    4.1 场景一:应用负载有显著的波峰波谷

    Serverless 应用成功与否的评判标准并不是公司规模的大小,而是其业务背后的具体技术问题,比如业务波峰波谷明显,如何实现削峰填谷。一个公司的业务负载具有波峰波谷时,机器资源要按照峰值需求预估;而在波谷时期机器利用率则明显下降,因为不能进行资源复用而导致浪费。

    业界普遍共识是,当自有机器的利用率小于 30%,使用 Serverless 后会有显著的效率提升。对于云服务厂商,在具备了足够多的用户之后,各种波峰波谷叠加后平稳化,聚合之后资源复用性更高。比如,外卖企业负载高峰是在用餐时期,安防行业的负载高峰则是夜间,这是受各个企业业务定位所限的;而对于一个成熟的云服务厂商,如果其平台足够大,用户足够多,是不应该有明显的波峰波谷现象的。

    4.2 场景二:典型用例 - 基于事件的数据处理

    视频处理的后端系统,常见功能需求如下:视频转码、抽取数据、人脸识别等,这些均为通用计算任务,可由函数计算执行。

    开发者需要自己写出实现逻辑,再将任务按照控制流连接起来,每个任务的具体执行由云厂商来负责。如此,开发变得更便捷,并且构建的系统天然高可用、实时弹性伸缩,用户不需要关心机器层面问题。

    5. Serverless 的问题

    对于企业来说,支持Serverless计算的平台可以节省大量时间和成本,同时可以释放员工,让开发者得以开展更有价值的工作,而不是管理基础设施。另一方面可以提高敏捷度,更快速地推出新应用和新服务,进而提高客户满意度。但是Serverless不是完美的,它也存在一些问题,需要慎重应用在生产环境。

    5.1 不适合长时间运行应用

    Serverless 在请求到来时才运行。这意味着,当应用不运行的时候就会进入 “休眠状态”,下次当请求来临时,应用将会需要一个启动时间,即冷启动时间。如果你的应用需要一直长期不间断的运行、处理大量的请求,那么你可能就不适合采用 Serverless 架构。如果你通过 CRON 的方式或者 CloudWatch 来定期唤醒应用,又会比较消耗资源。这就需要我们对它做优化,如果频繁调用,这个资源将会常驻内存,第一次冷启之后,就可以一直服务,直到一段时间内没有新的调用请求进来,则会转入“休眠”状态,甚至被回收,从而不消耗任何资源。

    5.2 完全依赖于第三方服务

    当你所在的企业云环境已经有大量的基础设施的时候,Serverless 对于你来说,并不是一个好东西。当我们采用某云服务厂商的 Serverless 架构时,我们就和该服务供应商绑定了,那么我们再将服务迁到别的云服务商上就没有那么容易了。

    我们需要修改一下系列的底层代码,能采取的应对方案,便是建立隔离层。这意味着,在设计应用的时候,就需要隔离 API 网关、隔离数据库层,考虑到市面上还没有成熟的 ORM 工具,让你既支持Firebase,又支持 DynamoDB等等。这些也将带给我们一些额外的成本,可能带来的问题会比解决的问题多。

    5.3 缺乏调试和开发工具

    当我使用 Serverless Framework 的时候,遇到了这样的问题:缺乏调试和开发工具。后来,我发现了 serverless-offline、dynamodb-local 等一系列插件之后,问题有一些改善。然而,对于日志系统来说,这仍然是一个艰巨的挑战。

    每次你调试的时候,你需要一遍又一遍地上传代码。而每次上传的时候,你就好像是在部署服务器,并不能总是快速地定位出问题在哪。后来,找了一个类似于 log4j 这样的可以分级别记录日志的 Node.js 库 winston。它可以支持 error、warn、info、verbose、debug、silly 六个不同级别的日志,再结合大数据进行日志分析过滤,才能快速定位问题。

    5.4 构建复杂

    Serverless 很便宜,但是这并不意味着它很简单。AWS Lambda的 CloudFormation配置是如此的复杂,并且难以阅读及编写(JSON 格式),虽然CloudFomation提供了Template模板,但想要使用它的话,需要创建一个Stack,在Stack中指定你要使用的Template,然后aws才会按照Template中的定义来创建及初始化资源。

    而Serverless Framework的配置更加简单,采用的是 YAML 格式。在部署的时候,Serverless Framework 会根据我们的配置生成 CloudFormation 配置。然而这也并非是一个真正用于生产的配置,真实的应用场景远远比这复杂。

    6. 总结

    云计算经过这么多年的发展,逐渐进化到用户仅需关注业务和所需的资源。比如,通过K8S这类编排工具,用户只要关注自己的计算和需要的资源(CPU、内存等)就行了,不需要操心到机器这一层。

    Serverless架构让人们不再操心运行所需的资源,只需关注自己的业务逻辑,并且为实际消耗的资源付费。可以说,随着Serverless架构的兴起,真正的云计算时代才算到来了。

    任何新概念新技术的落地,本质上都是要和具体业务去结合,去真正解决具体问题。虽然Serverless很多地方不成熟,亟待完善。不过Serverless自身的优越特性,对于开发者来说,吸引力是巨大的。相信随着技术的飞速发展,Serverless在未来还有无限可能!

    转载自:看懂 Serverless,这一篇就够了

    展开全文
  • Support serverless NEG

    2020-11-27 08:27:28
    ...<a href="https://cloud.google.com/load-balancing/docs/negs/setting-up-serverless-negs">Walkthrough</a></p>该提问来源于开源项目:hashicorp/terraform-provider-google</p></div>
  • Serverless warning fix

    2020-11-20 20:47:17
    <div><p>… available <p>We were getting a bunch of these warnings due to this plugin: <pre><code> Serverless Warning --------------------------...serverless-operations/serverless-step-functions</p></div>
  • Is there a way to use this package without <code>app.run()</code> where serverless doesnt require running the app using the aforementioned command? <p>When using this package, for some reason I can&#...
  • <div><p>I wonder <code>.serverless</code> and <code>.serverless_nextjs</code> should be ignored or not. <p>because if I add <code>.serverless</code> to <code>.gitignore</code> and I pull my project to...

空空如也

1 2 3 4 5 ... 20
收藏数 5,866
精华内容 2,346
关键字:

serverless