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框架主要有:
- 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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》