.. _serverless: 无服务时代 ########## .. toctree:: :maxdepth: 1 06serverless/collect1 分布式架构出现的最初目的,是要解决单台机器的性能成为整个软件系统的瓶颈的问题。后来随着技术的演进,容错能力、技术异构、职责划分等其他因素,也都成了分布式架构要考虑的问题。 对软件开发这件事儿来说,不去做分布式无疑是最简单的。如果单台服务器的性能可以是无限的,就可能不需要分布式的功能了。绝对意义上的无限性能肯定是不存在的,但相对意义上的无限性能其实已经实现了,云计算的成功落地就可以说明这一点。 工业界历史:: 2012 年,iron.io 公司率先提出了 “无服务” 2014 年,AWS 发布了命名为 Lambda 的商业化无服务应用, 并在后续的几年里逐步得到了开发者的认可,发展成目前世界上最大的无服务的运行平台; 2019 年,中国的阿里云、腾讯云等厂商,也发布了无服务的产品。“无服务” 成了近期技术圈里的 “新网红” 之一。 学术界历史:: 2009 年云计算刚提出的时候,UC Berkeley 大学就发表了一篇论文 “Above the Clouds: A Berkeley View of Cloud Computing”, https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf 文中预言的云计算的价值、演进和普及,在过去的十年(2009~2019 年)里一一得到了验证。 2019 年,UC Berkeley 的第二篇命名风格相同的论文 “Cloud Programming Simplified: A Berkeley View on Serverless Computing”, https://arxiv.org/abs/1902.03383 再次预言 “无服务将会成为日后云计算的主流方式”。 serverless最大的卖点就是简单,只涉及了后端设施(Backend)和函数(Function)两块内容:: 后端设施是指数据库、消息队列、日志、存储等这一类用于支撑业务逻辑运行,但本身无业务含义的技术组件。 这些后端设施都运行在云中,也就是无服务中的 “后端即服务”(Backend as a Service,BaaS) 函数指的就是业务逻辑代码。 这里函数的概念与粒度,都已经和程序编码角度的函数非常接近了, 区别就在于,无服务中的函数运行在云端,不必考虑算力问题和容量规划, 也就是无服务中的 “函数即服务”(Function as a Service,FaaS) 无服务的愿景是让开发者只需要纯粹地关注业务:: 一是,不用考虑技术组件,因为后端的技术组件是现成的,可以直接取用,没有采购、版权和选型的烦恼; 二是,不需要考虑如何部署,因为部署过程完全是托管到云端的,由云端自动完成; 三是,不需要考虑算力,因为有整个数据中心的支撑,算力可以认为是无限的; 四是,也不需要操心运维,维护系统持续地平稳运行是云服务商的责任,而不再是开发者的责任。 像从汇编语言发展到高级语言后,开发者不用再去关注寄存器、信号、中断等与机器底层相关的细节? .. note:: 如果说微服务架构是分布式系统这条路当前所能做到的极致,那无服务架构,也许就是 “不分布式” 的云端系统这条路的起点。 Alan Turing, Computing Machinery and Intelligence, 1950:: We can only see a short distance ahead, but we can see plenty there that needs to be done. 尽管目光所及之处,只是不远的前方,即使如此,依然可以看到那里有许多值得去完成的工作在等待我们。