Serverless最全详解(定义架构及框架应用)

Serverless最全详解(定义架构及框架应用)-mikechen

Serverless是什么

Serverless,全称是Serverlesscomputing,即无服务器运算,是一种架构思想和服务模型,让开发者无需关心基础设施(服务器等),而是专注到应用程序业务逻辑上。

要理清Serverless,首先可以从字面上来拆解,Serverless即Server+less

Server+less:Server 这里指服务端,而 less 我们可以理解为较少关心,两者组合在一起就是“较少关心服务端”。

在没有使用Serverless时,企业除了开发应用程序之外,还需要请工程师投入精力关注基础架构的完整性 ,包括:服务器,网络,存储等这些服务端资源。

随着云计算时代的兴起,Serverless为那些需要服务器但希望不去购买,维护和升级服务器成本的公司,提供了方便。

所以Serverless 架构所传递的心智是:把更专业的事情交给更专业的人,开发者能够较少地关注服务器等底层相关内容,把更多的精力放在更具价值的业务逻辑之上,即Serverless(较少关心服务端)。

 

Serverless优缺点

Serverless的优点

1.降低运营成本

不需要管理服务器主机,或者服务器进程,以及大规模的服务器集群运维;

2.弹性伸缩

可以根据需要,负载进行自动规模伸缩,以及自动配置;

3.降低开发成本

根据使用情况决定实际成本,按需付费;

4.缩短创新周期

小团队的开发人员正可以在几天之内从头开始开发应用程序并部署到生产,以 Docker 为代表的容器技术仅仅是缩短了应用程序的迭代周期,而 serverless 技术是直接缩短了创新周期,从概念到最小可行性部署的时间。

 

Serverless的缺点

我们知道没有十全十美的技术,在说了 serverless 的那么多优势之后,我们再来探讨以下 serverless 的劣势。

1.复杂性增加

我们使用应用程序越精细,它就越复杂,比如说,我们将应用程序分解为10个不同的微服务。我们必须管理10个不同的应用程序,而在单个应用程序中,它只是一个必须管理的应用程序。

2.集成测试难

实施中的缺点无服务器的最大挑战是集成测试难,对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试。

3.延迟性

应用程序中不同组件的访问延迟是一个大问题,我们可以通过使用专有的网络协议、RPC 调用、数据格式来优化,或者是将实例放在同一个机架内或同一个主机实例上来优化以减少延迟。

而 serverless 应用程序是高度分布式、低耦合的,这就意味着延迟将始终是一个问题,单纯使用 serverless 的应用程序是不太现实的。

 

Serverless架构

尽管对于 Serverless 架构的定义,并没有一个非常明确的表述,但是 Serverless 是 FaaS 与 BaaS 的组合这种说法,却被很多人所接受。

所谓的 FaaS 就是函数即服务,而 BaaS 则指的是后端即服务,两者搭配,共同成为 Serverless 架构不可获取的部分,为开发者提供降本提效的技术红利。

Serverless架构= FaaS + BaaS

FaaS服务主要提供计算相关的平台,用于实现应用的业务逻辑。

BaaS服务侧重冰山底层的能力,例如数据库服务、存储服务、鉴权服务等。

一个完整的Serverless应用必然是FaaS和BaaS服务的结合,此外,该应用中所有FaaS和BaaS服务是Serverless化的,即拥有弹性扩缩容、按需使用和付费的特点。

 

Serverless框架

Kubernetes 的蓬勃发展由催生了一系列以它为基础的Serverless框架,目前开源的Serverless框架大多以Kubernetes为基础。

Serverless最全详解(定义架构及框架应用)-mikechen

Serverless框架主要有:

  • AWSLambda:最早被大众所认可的Serverless实现;
  • AzureFunctions:来自微软公有云的Serverless实现;
  • OpenWhisk:Apache社区的开源Serverless框架;
  • Kubeless:基于Kubernetes架构实现的开源Serverless框架;
  • Fission:Platform9推出的开源Serverless框架;
  • OpenFaaS:以容器技术为核心的开源Serverless框架;
  • Fn:来自Oracle的开源Serverless框架,由原IronFunctions团队开发。

Serverless框架对比

比项/框架 OpenFaas OpenWhisk kubeless Fission Iron function Fn
人气(Github星) 19k 5.2k 6.4K 5.9k 2.9k 4.9k
稳定性(贡献者> 10次提交) 10 33 7 6 9 19
稳定性(企业支持) VMware IBM(Apache Foundation) Bitnami Platform9 https://iron.io Oracle
稳定性(项目时间) 2016年12月 2016年2月 2016年11月 2016年8月 2016年2月 2016年五月
稳定性(开发语言) Go Scala Go Go Go Go
工具(打包机制) Docker容器 Docker容器 Docker容器 Docker容器 Docker Docker
工具(k8s上的部署功能) Manifest with custom yaml Manifest with custom yaml Manifest Manifest with custom yaml Proprietary Proprietary
工具(通过无服务器部署吗?) 是(WIP)
技术(基础技术) AllertManager/Prometheus,Nats CouchDB,Kafka,Nginx,Redis,Zookeeper 无(可选的Nats或Kafka) fluentd(可选的Nats) Postgres, Redis DB(sqlite3,PostgreSQL,MySQL),MQ(Bolt,Redis),Prometheus
易用性(开箱即用?) 否(无服务器插件失败) 是(麻烦)
文档 Good Good 一般 较差(组织不好,导航不正常且缺少文档) 一般 Good

 

Serverless应用场景

Serverless 比较适合以下场景:

  • 异步的并发,组件可独立部署和扩展;
  • 应对突发或服务使用量不可预测,主要是为了节约成本,因为 Serverless 应用在不运行时不收费;
  • 短暂、无状态的应用,对冷启动时间不敏感;
  • 需要快速开发迭代的业务,因为无需提前申请资源,因此可以加快业务上线速度;

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法