谈谈·云服务与Serverless

153 阅读13分钟

序言

目前市面上使用的云服务是基于Serverless理念的在aPaaS层面的落地,用户无需关注服务器、底层资源按使用付费,以智能弹性、快速交付、更低成本,以方便用户快速上云、聚焦自家核心业务等基本目标,围绕应用服务的生命周期提供了一系列功能,包括资源编排、自动伸缩、事件驱动、编码、调试、devops、监控、运维等,它聚焦在两个场景上一是基于云函数的研发、运维、二是传统应用的迁移。Serverless不等于FaaS,也不等于CaaS,这些产品只是对应Serverless在某些场景下的解决方案,Serverless是无服务的,使用者不必关心服务器扩展到不必关心底层网络、存储资源的分配,甚至负载均衡、高可用等,核心目标在于让用户聚焦在核心业务上帮助用户成功、降低设备成本。

Serverless的定义

Serverless计算是一种由云供应商提供机器资源分配,帮助客户保管服务机器的云计算模型。Serverless是一种无服务器理念,开发人员无需关注容量规划、配置、管理、维护、容错、容器扩缩容、虚拟机或者物理机器。Serverless计算不会采用易失性存储器保存资源,短时间内快速计算完成后持久化结果,不使用应用程序时不占有计算资源,客户可以按照实际使用的资源量付费。应用代码可以以传统样式单体、微服务部署,也可以以无服务模式部署。这不应与不需要实际服务器运行的计算或网络模型混淆,例如对等 (P2P)。

CNCF的定义:Serverless计算是指构建和运行不需要服务器管理的应用程序的概念。它描述了一种更细粒度的部署模型,应用程序捆绑一个或多个function,上载到平台,然后执行,缩放和计费,以响应当前所需的确切需求。

Serverless计算并不意味着我们不再使用服务器来托管和运行代码;这也不意味着不再需要运维工程师。相反,它指的是serverless计算的消费者不再需要花费时间和资源来进行服务器配置,维护,更新,扩展和容量规划。相反,所有这些任务和功能都由serverless平台处理,并完全从开发人员和IT/运维团队中抽象出来。因此,开发人员专注于编写应用程序的业务逻辑。运维工程师能够将重点更多的放到关键业务任务上。

阿里云的定义:Serverless,即无服务器计算。然而Serverless不是不再需要服务器,而是公司或开发者不用过多考虑服务器的问题,计算资源仅作为一种服务而不再以物理硬件的形式出现。

AWS的定义:如同许多新的概念一样,Serverless目前还没有一个普遍公认的权威的定义。最新的一个定义是这样描述的:“无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如AWS Lambda服务),客户端逻辑和服务托管远程过程调用的组合。”

Serverless官方:Serverless 是一种由开发人员和企业共同推动的运动,他们意识到软件正在吞噬世界,但如果您自己构建和维护所有软件,您也会被吞噬。这一运动要求将构建应用程序中最琐碎的部分抽象化,以便开发人员能够真正将时间花在交付业务价值上。

这一运动的目的是让开发人员能够单枪匹马地构建处理生产级流量的应用程序。他们不必管理扩展他们的基础设施,他们不必配置服务器,也不必为未使用的资源付费。他们可以专注于开发。

归根结底,Serverless 是关于将开发人员的精力集中在为用户提供价值的方面(而不是在其他任何事情上浪费时间)。升级 Linux 发行版不会为用户提供价值,管理 Kubernetes 集群不会为用户提供价值,只有提供解决问题的产品才会为用户提供价值。

腾讯云:Serverless Framework是业界非常受欢迎的无服务器应用框架,开发者无需关心底层资源,即可部署完整的 Serverless 应用架构。Serverless Framework 具有资源编排、自动伸缩、事件驱动等能力,覆盖编码、调试、测试、部署等全生命周期,帮助开发者通过联动云资源,迅速构建 Serverless 应用。

云服务发展史

虚拟化一次是在1965年,那个时代计算机还没有大规模普及,直至1990年左右,计算机呈现了爆炸式增长。不过那个时候各个企业对于服务器的普遍做法是采购硬件或者租用IDC机房托管服务。2006年,google执行官首次在搜索引擎大会上已出云计算一词,正是这年亚马逊推出了IaaS服务平台AWS,至此云计算开始登上世界舞台。2008年国内阿里云开始筹办起步09年建立云服务中心。08年金融危机后09年初,Salesforce 公司的2008 财年年度报告显示,公司云服务收入超过了10亿美元,云计算开始成为计算机领域最受关注的话题之一,亚马逊开始初步形式IaaS、PaaS、 SaaS的产品体系,成为领导全球的云服务厂商。随后,IBM、Google、微软等先后进入云计算市场,国内厂商也开始进入云计算市场的有金山云、天翼云、华为、腾讯、字节。云服务以其超大规模、虚拟化、高可靠性、通用性、廉价、按需计费特点在市场中稳步发展;来自IDC市场份额数据如,较2021年2022年受政务项目以及出海潮影响国家队以及AWS份额有所增加,其他部分云服务厂商有金山云、百度云、字节跳动、浪潮、微软等。

image.png

云服务从服务层面上区分有IaaS、PaaS、 SaaS,以及BaaS、FaaS等,IaaS层侧重基础设施包括主机、网络、存储、云计算;PaaS层侧重业务垂直型,例如应用中心、应用部署、低代码、大数据、AI等;Baas层偏向于消息中间件、API能力;SaaS服务分为业务型和行业型,行业类型指SaaS服务深耕的行业领域方向,业务角度可分为商业增长、协同提效、经营、安全合规。这里所谈论的Serverless云服务偏向于PaaS、CaaS。

从业务层面谈论有计算、存储、网络、数据库、应用、安装部署;存储包含对象存储、块存储、存储服务网关;网络有路由、负载均衡、直连、VPC;数据库有行式数据库一般即RDS,列式数据库,文档类型数据库,cache。

云服务架构基于Serverless理念的发展

以亚马逊为例,最初由于亚马逊电商业务扩展迅速购买了很多服务器设备,波峰请求过后很多服务器处于闲置状态,亚马逊为了更好的利用这些闲置的机器创造收入决定开放API接口。然而大量的API接口开放后随之而来的是各个系统、模块之间的调用出错问题,为此亚马逊做了大量工作开发内部工具,监控、管理代码。意外收获是这些工具大幅度提高了工作效率,加快产品迭代速度,一个工程师可以完成从编码、测试、版本管理、部署、服务检测等一系列任务,因此亚马逊决定将这些工具产品化对外发布,于是有了AWS。因此可知,AWS早期定位主要以面向研发的应用开发、部署、服务管理等的云服务平台。由于亚马逊很擅长运营基础设施服务如计算、存储、数据库等,06年时推出了S3对象存储产品和EC2计算服务产品。亚马逊目前包含的产品有存储S3、弹性计算EC2、数据库DynamoDB、队列消息SQS、安全IAM&KMS、网络路由&负载均衡;后期推出基于函数服务的lambda。

FaaS与2014年始于一个hook网站,主营webhook funtion( HTTP-based callback function)托管,按照使用次数付费,之后各大厂看到市场价值迅速跟进。FaaS函数即服务,它大多时候和事件系统一起工作,基于Serverless理念FaaS架构将服务细化到函数粒度,屏蔽底层网络、服务间调用、数据流转、任务分配、事件驱动等细节,提供动态的基于函数实例的扩缩容机制。它运行方式有两种,一是每次代码变动重新启动一个容器实例,本质上还是CaaS,另一种是启动时动态的将源码拉取到预定义的容器中。目前市场上FaaS产品有阿里云的FC、AWS lambda、Google function、微软的 Azure Functions。虽然各个供应商均提供在页面点击配置开发应用的流程,但是实际上业务应用所包含的大量的函数动,页面点击配置的操作不高效,研发需要这样一个工具可以帮助他们在本地开发并且支持以某种指令部署,即而产生了Serverless Cloud Framework(联想到了Spring Framework)。

Serverless Cloud Framework是一个用node.js写的免费开源的web框架帮助用户快速构建、部署serverless应用,它提供了丰富的应用组件支持,应用组件提供商来自以下云厂商。

image (1).png

以AWS lambda为例,下面将简单描述下FaaS架构下开发如何工作的,其他FaaS产品操作流程基本类似。

  1. AWS已提供可用的GateAPI、数据流、数据库、存储、SQS、SNS等产品。
  2. 大部分情况下不可能低效点击配置服务,一般通过YML或者JSON文件配置。
  3. 配置各个lambda函数(支持市面上大部分开发语言),函数实现了业务流程中某一环,需要配置函数触发器以及下游工作集;触发器可以设置为1中某个服务。函数实例会在被调用的时候创建执行完销毁。
  4. 引入需要的产品服务在函数中编写对应的业务逻辑。
  5. 打包发布,去控制台查看对应的实例,可能涉及函数实例、SQS实例、GateAPI实例、S3实例,应用服务越多涉及更多实例。
  6. 去云控制台查看日志。
  7. lambda包含日志聚合通知服务。

当把服务细化到函数粒度时,带来的问题有:

  1. 函数是无状态的
  2. 函数有内存和超时时间限制
  3. 函数实例在调用时创建执行完销毁,很大可能创建销毁本身开销比执行函数本身要大很多,性能如何保障。
  4. 服务细化到函数粒度带来的服务数量爆炸难以管理,全靠命名区分;信息扁平化本身违背人类记忆模式,人类记忆偏向结构化模式利用推理、关联以存储更多的信息。
  5. 函数以及API维度逻辑碎片化,违背DDD模式划分业务,维护业务逻辑时对评估影响范围工作带来很大的难度。
  6. 系统迁移或者备份时,由于系统碎片化严重难以进行备份和还原,高度依赖平台稳定性。
  7. 在线平台开发效率低下,终究还是依赖线下开发;线下也需要引入平台相关的依赖。

有人说Serverless等于FaaS,云服务的终极目标是FaaS。其实并不见得,FaaS只会是云服务发展历史长流中的一段,Serverless不等于FaaS,也不等于CaaS,这些产品只是云服务发展历程中一步,是云服务基于Serverless理念在某些场景下的解决方案。Serverless是无服务的,使用者不必关心服务器扩展到不必关心底层网络、存储资源的分配,甚至负载均衡、高可用等,核心目标在于让用户聚焦在核心业务上帮助用户成功、降低设备成本。云服务从最初的只提供底层设备资源、存储资源等,到封装资源接口提供易用的接口,到把接口打包成可直接使用的能力,最终以PaaS层承载交付给用户。

展望与总结

Serverless概念是无服务的,使用者不必关心服务器扩展到不必关心底层网络、存储资源的分配,甚至负载均衡、高可用等,核心目标在于让用户聚焦在核心业务上帮助用户成功、降低设备成本。云服务发展十几年来,市面上出现了很多类型产品容器服务CaaS聚焦一体化部署、弹性扩缩容、服务高可用,对象存储与网络等IaaS、云数据库、消息中间件与API集合BaaS聚焦底层资源、研发通用能力的服务化,应用中心、低代码PaaS,还有各种业务、行业层面的SaaS,甚至FaaS基于研发场景下最小粒度函数的服务。这些不同类型的产品聚焦不同的场景试图革新传统研发流程,给用户带来不一样的全新体验。在强调云服务协作生态的今天,大部分云服务产品不会单独独立运行的,这些产品会打通、连接其他服务、产品组成某场景下解决方案的能力,毕竟服务的可复用性、规模化也是云服务商业化的立足之本。云服务发展中,与人工智能的融合、大数据的融合、以及自身构建的生态、体验友好程度终将拉开各个云厂商的差距。

对于需要上云的用户来说,云服务评估维度可从以下几方面展开:

  1. 云服务技术堆栈
  2. 云服务服务级别协议
  3. 云服务API:同步、社区、生态
  4. 云服务安全性以及法规遵从,如PCI标准
  5. 云服务成本