前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入浅出Serverless:2 Serverless与相关技术

深入浅出Serverless:2 Serverless与相关技术

作者头像
yeedomliu
发布2019-09-29 13:36:12
1K0
发布2019-09-29 13:36:12
举报
文章被收录于专栏:yeedomliuyeedomliu

介绍

  • 作为一个热门词汇,Serverless并不孤单,和它一起受到广泛关注的还有诸如微服务(Microservice)、容器(Container)和云等。其实这些技术之间有着很强的关联关系。正确地理解Serverless和其他技术的关系,是正确理解Serverless架构的一个重要基础。要深入理解Serverless,需要结合当下业界发展的整个大环境和趋势进行思考。

云计算

从私有数据中心到云

  • 按所管控的计算资源的范围来划分,云计算模式可以分为基础架构即服务(Infrastructure as a Service)、平台即服务(Platform as a Service,PaaS)以及软件即服务(Software as a Service,SaaS)。
  • 在云计算传统的私有数据中心架构中,让一个应用服务上线跑起来,用户需要负责管理和维护底层网络、存储和主机,到操作系统、中间件,以及应用的开发、部署及运维。
  • 在传统的架构模式中,每上线一个应用服务,都要求用户对架构堆栈中每一个层次的服务进行配置和维护,这极大地拖慢了整体的流程效率,传统的架构限制了生产力的发展,于是云计算的变革悄然而至

各类云计算服务与传统模式的对比

IaaS、PaaS与SaaS

  • 在IaaS架构中,应用架构底层的网络、存储和计算资源(主机、物理机或虚拟机),由云平台供应商(Cloud Provider)提供和运维。用户在云平台上付费申请所需的网络、存储和计算资源,云平台供应商在一定时间内提供。对于云平台供应商而言,集中化和规模化地运维及供给使得基础架构资源的成本更低,这是一个不可多得的商机
  • PaaS平台提供了应用的运行环境(如应用运行时)、应用依赖的服务(如数据库、中间件、负载均衡、构建服务、发布服务)以及底层所需的计算资源,用户可以把精力集中在应用的开发和创新上。PaaS模式可以提高应用开发、发布和运维的整体效率,有效缩短了应用上市的时间(Time to Market)
  • SaaS模式下,用户完全不用管理任何应用和基础设施,从而变成云服务的消费者

Serverless与云计算

  • Serverless是云计算变革过程中的一个必然产物。Serverless架构实现的一个重要基础是函数即服务(Function as a Service,FaaS)。
  • FaaS的灵活度和管理成本介于PaaS和SaaS之间。相对于PaaS而言,FaaS有更高的抽象程度和更低的管理成本。相对于SaaS来说,FaaS用户有更高的控制力和灵活度。Serverless架构是对开发和运维的一场解放运动,让用户的焦点回到用户应该关注的地方
  • 云计算的不断发展是Serverless发展和流行的最大推动因素。Serverless是云计算未来发展的一个方向

FaaS与各云计算类型的对比

微服务

从SOA到微服务

  • 在SOA架构下,应用通过服务暴露功能,实现了彼此信息的交换和集成,使得通过服务的组合和编排形成新的应用系统成为可能。但是多个模块和功能仍然被包含在同一个应用中、同一个交付件中
  • 微服务架构(Microservice Architecture,MSA)提倡将应用化整为零,减小颗粒度
  • 大型的应用(Monolithic Application)按照一定的规则被拆分成若干个颗粒度更小的应用。这些细小的应用称为微服务(Microservice)

微服务架构示意图

微服务的价值与挑战

  • 微服务增加了应用架构的灵活度,为应用的开发和交付带来了价值
    • 更清晰的权责
    • 更快速的开发和交付节奏
    • 更灵活的资源扩展
  • 微服务架构在带来价值的同时也带来了一些新的挑战
    • 团队组织变化:应用架构的改变也将导致开发应用的开发团队结构发生变化
    • 运维复杂度:运维管理的应用实例数将大大增加。微服务架构下工作量呈指数级增长。
    • 微服务治理:微服务之间的通信、调用链的跟踪管理、状态监控、错误跟踪排查等都需要相应的解决方案

2.2.3 Serverless与微服务

微服务

Serverless

功能结构

最小成员单位是微服务

最小成员单位是函数

强调

化整为零,提高应用架构灵活度

强调的是“减负”,将服务器移出用户的管理职责范围,降低复杂度和成本

成本

架构上带来灵活性的同时,也增加了开发、部署和运维的复杂度

开发和运维的效率更高,管理成本更低

容器

容器技术的兴起

  • 对于很多用户而言,云和非云环境并不是二选一,而是两者都需要。云和非云环境在相当长的一段时间内将同时存在。应用如何快速地在云和非云环境中迁移成为一个重要的问题。为了有更高的可用性,避免厂商的锁定,一些实力雄厚的客户往往同时是多家云平台供应商的客户。因此实现应用在不同云环境中的快速迁移也成为一个重要的需求

混合云环境

  • 容器(Container)技术的出现为前文提及的问题提供了一个很好的解决方案。经过几年的迅速发展,容器已经不容置疑地成为云计算的一项关键基础技术。Docker(现在已经更名为Moby项目)已成为容器引擎的事实标准。Kubernetes也在竞争中脱颖而出,成为容器编排(Orchestration)平台的事实标准。通过Kubernetes这样的容器编排平台,容器镜像可以快速地被部署到成百上千的主机上。Kubernetes成为一种类似操作系统的存在,有的人认为Kubernetes就是一种云操作系统。传统的操作系统只管理一台主机上的CPU、内存、磁盘和网络资源,而Kubernetes则掌控着数据中心中成百上千台主机的资源。

Serverless与容器

  • 容器架构中最小的运行单元是容器,而Serverless中则是函数。容器应用一般是预先部署,然后持续在线。而在Serverless架构中,应用是按需加载和执行的。这意味着理论上Serverless的资源使用效率更高。
  • 其实,容器技术可以是Serverless架构实现的一个基础。容器平台的最小运行单元为容器,虽然目前容器内一般运行的是一个完整的应用,但是将容器内运行的对象变成函数显然并无技术困难。Kubernetes上默认没有事件触发的支持,无法做到按需部署容器应用。但是通过Kubernetes叠加上一些FaaS框架运行包含函数逻辑的容器,用户很容易使Kubernetes具备FaaS服务的能力,容器必将是未来私有云构建Serverless能力的一个重要实现基础。

基于Kubernetes的Serverless平台架构

PaaS

以应用为中心

  • 从技术标准上而言,早期的PaaS可以说是百家争鸣,每一个厂商都有自己的一套技术堆栈,随着容器技术的流行,目前PaaS平台开始支持容器作为应用的交付件,这使得应用在各个PaaS之间有更好的可移植性。

Serverless与PaaS

  • 目前一些主流的PaaS平台和Serverless平台,主要差异在于:

PaaS

Serverless

管理颗粒度

对应用颗粒度的管理以应用为单位

细致到每个应用的函数

应用部署模式

应用是持续地被部署在主机、虚拟主机、容器

按需部署,这是Serverless的按用量付费(Pay-As-You-Use)模型的基础

作业类型

包含长时间运行的应用(如各类Web应用和业务系统)和定时执行的短期任务(如数据分析抽取任务)

偏向于执行时间跨度比较短的任务

实例

存在应用实例数这一概念的,用户需要设置每一个实例的CPU和内存的使用大小以及需要的实例数

将实例数的概念移除了

  • 当前许多PaaS平台也开始支持容器,或是以容器作为技术架构的基础,如Red Hat的OpenShift就是一个以Docker和Kubernetes为基础的开源容器PaaS。基于这种容器PaaS平台,结合FaaS和BaaS框架的支持,用户可以实现私有的Serverless平台

FaaS

Serverless实现的基础

  • 函数即服务(Function as a Service,FaaS)是当前Serverless实现的技术基础。每一个函数完成一个相对简单的业务逻辑,一个完整的应用由若干个函数组成。因为FaaS和Serverless的关系密切,因此FaaS的特点同时也是Serverless平台的特点:
    • 抽象了底层计算资源
    • 按使用量付费
    • 自动弹性扩展
    • 事件驱动
  • FaaS是当前Serverless实现的重要基础,所以有一部分人认为Serverless就是FaaS。这是狭义上的Serverless。

FaaS的架构

  • 目前,业界有多种FaaS的实现方案,如公有云的AWS Lambda、Microsoft Azure Fun-ctions、Google Cloud Functions,私有云的OpenWhisk、Fn、Kubeless等。
  • 宏观来看,一个FaaS平台的架构中包含如下主要组件:
    • 函数定义(Function Definition):一个函数实现一个业务逻辑
    • 函数实例(Function Instance):在运行状态的应用函数的实例
    • 控制器(Controller):负责应用函数的加载、执行等流程的管理
    • 事件(Event):事件驱动架构中的事件
    • 事件源(Event Source):事件驱动架构中的事件来源。可以是一个数据库中插入了新的记录,也可以是一个目录里删除了一个文件,或者是消息队列收到了新的消息
    • 触发规则(Trigger Rule):定义事件与函数的关系及触发的规则
    • 平台服务(Platform Service):支撑应用运行的各类底层服务,如计算资源、数据存储等

    FaaS平台架构

函数的生命周期

  • 在FaaS上一个函数从创建到执行的生命周期
    • 用户根据所选定的FaaS平台的规范进行函数应用的开发。
    • 编写好的函数将上传至FaaS平台。平台将负责编译和构建这些函数,并将构建的输出保存。
    • 用户设置函数被触发的规则,将事件源与特定版本的函数进行关联。
    • 当事件到达且满足触发规则时,平台将会部署、编译构建后的函数并执行。平台将监控函数执行的状态,根据请求量的大小,平台负责对函数实例进行扩容和缩容

    函数的生命周期

函数工作流

  • 当涉及多个函数执行时,就需要有逻辑处理执行的顺序、错误重试、异常捕获以及状态传递等细节。
  • 一些FaaS实现开始提供针对FaaS函数的流程编排服务或工具,以简化FaaS应用的流程编排,如AWS Step Functions和Fission Workflows

AWS Step Functions流程编排界面

BaaS

BaaS的价值

  • 后端即服务(Backend as a Service,BaaS)
  • 通过BaaS平台,用户的应用程序可以对接后端的各种服务,省去了用户学习各种技术和中间件的成本,降低了应用开发的复杂度。BaaS的服务往往由服务供应商提供,用户无须关心底层细节,无须维护相关资源

后台即服务

广义的Serverless

  • 广义的Serverless包含FaaS和BaaS两个方面。FaaS解决了应用本身的“无服务器”化,BaaS解决了应用依赖的第三方服务的“无服务器”化。当应用和其依赖的服务都实现了“无服务器”化时,这个应用才算是完整的Serverless应用。

NoOps

无人运维吗

  • NoOps,中文直译为“无运维”,或许翻译为“无人运维”更为合适。知名的市场调研公司Forrester于2011年发表的报告《Augment DevOps With NoOps》中提出了NoOps这一概念。它们认为随着云计算的不断演进、IT自动化程度的不断完善、IT自服务程度的不断提高以及应用架构的自扩展和自恢复的实现,IT将进入无须人工运维的阶段

“无服务器”与“无人运维”

  • NoOps和Serverless都存在“无”的概念。在Serverless架构下,运维人员不再需要关注底层的基础架构,但是还是需要有人对应用的整体运营状态进行维护。运维关注的焦点会从以往的基础架构转移到云服务和应用的运维上。运维人员有更多的时间关注对业务更有价值的地方,如服务的用户体验,而非系统宕机时间

DevOps

  • DevOps是一种IT的治理理念,这种理念强调和谐的开发(Develop)和运维(Operation)的协作,以便为IT提供更可靠和更高质量的交付,从而提升IT的效率和对业务的响应速度。DevOps不仅仅是简单的工具,它还涉及一个企业或组织的文化和流程。
  • Serverless架构极大地改变了应用开发、部署和运营的模式,对软件的开发、测试与运维人员的协助模式和关系产生巨大的影响。DevOps所倡导的协作、分享和精益的文化对Serverless的推行而言有着很大益处。

云原生应用

因云而生

  • 云将会是主流的应用运行平台,是应用的标准运行环境。所谓的云原生应用(Cloud Native Application)是指充分利用云平台的各种功能和服务所设计的应用程序。未来的应用要充分利用云上的各种设施和功能,最大限度地加速应用的开发、部署和运营,使云的价值最大化
  • 云平台是云原生应用的运行基础环境。微服务为云原生应用提供了架构层面的指导思想。容器将会是云原生应用的一种重要交付格式,保证了云原生应用的可移植性。DevOps为云原生应用的开发、交付和运营提供了思想层面的指导

Serverless与Cloud Native

  • Serverless应用满足了云原生应用的定义,充分利用了云平台的各种能力,极大地提高了应用开发、交付和运维的效率。因此,Serverless应用是原生应用的一种实现,Serverless架构是用户通向云原生应用的道路之一
  • 云原生计算基金会(Cloud Native Computing Foundation,CNCF)是一个专注于推广和标准化云原生技术的组织,目前成员超过100个,包括Google、Amazon、微软、阿里巴巴、华为、Red Hat、Cisco、IBM、Oracle等。云计算领域中许多备受关注的前沿项目都归属于CNCF,如容器编排平台Kubernetes、日志收集器Fluentd、高性能远程调用协议gRPC以及性能指标收集方案Prometheus等。Serverless的流行也受到了CNCF的高度关注,CNCF在2018年发布了Serverless白皮书,探讨了Serverless在云原生计算中的价值以及CNCF在Serverless领域的未来动向

小结

  • 要完整认识一个事物,除研究这个事物本身之外,还要了解其所在的生态系统。Serverless是云计算变革的一个产物,是构建云原生应用的一种模式和思想。通过这种思想,结合云计算相关技术,用户可以用更低的成本构建更高性能、更易于扩展及更高可用的云应用

文献

  • ThoughtWorks的Martin Fowler的文章《Micro-services Guide》地址:https://martinfowler.com/microservices/
  • 《开源容器云OpenShift》
  • AWSStepFunctions主页:https://aws.amazon.com/stepfunctions/
  • 《Augment DevOps With NoOps》阅读地址:https://www.forrester.com/report/Augment+DevOps+With+NoOps/-/E-RES59203
  • CNCF Serverless白皮书参考地址:https://github.com/cncf/wg-serverless/tree/master/white-paper

名词解释

  • TTM:应用上市的时间(Time to Market)
  • Microservice:微服务
  • CNCF:云原生计算基金会(Cloud Native Computing Foundation)
  • CNA:云原生应用(Cloud Native Application)
  • DevOps:开发(Develop)和运维(Operation)
  • FaaS:函数即服务(Function as a Service)
  • IaaS:基础架构即服务(Infrastructure as a Service)
  • PaaS:平台即服务(Platform as a Service)
  • SaaS:软件即服务(Software as a Service)
  • MSA:微服务架构(Microservice Architecture)
  • Monolithic Application:大型的应用
  • Pay-As-You-Use:按用量付费
  • BaaS:后端即服务(Backend as a Service)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yeedomliu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 云计算
    • 从私有数据中心到云
      • IaaS、PaaS与SaaS
        • Serverless与云计算
        • 微服务
          • 从SOA到微服务
            • 微服务的价值与挑战
            • 2.2.3 Serverless与微服务
            • 容器
              • 容器技术的兴起
                • Serverless与容器
                • PaaS
                  • 以应用为中心
                    • Serverless与PaaS
                    • FaaS
                      • Serverless实现的基础
                        • FaaS的架构
                          • 函数的生命周期
                            • 函数工作流
                            • BaaS
                              • BaaS的价值
                                • 广义的Serverless
                                • NoOps
                                  • 无人运维吗
                                    • “无服务器”与“无人运维”
                                    • DevOps
                                    • 云原生应用
                                      • 因云而生
                                        • Serverless与Cloud Native
                                        • 小结
                                        • 文献
                                        • 名词解释
                                        相关产品与服务
                                        容器服务
                                        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档