1.1 Serverless的价值
从广义上来说,针对非专业人员提供的计算资源服务,也可以被称为 Serverless 服务。比如用户只需要输入 URL 即可访问一个站点,后面的所有与计算资源相关的事项都完全由这个站点的维护者实现。无论是域名的解析,还是 HTTP 连接的建立,以及后续网页内容的生成和传输,用户都无须关心。并且,用户也不用关心这个站点背后服务的稳定性、可用性、延迟等技术内容。因此我们可以认为,这个站点对于访问的用户来说,是“Serverless”架构的。
从这种角度来看,我们所使用的各种服务,包括每天几乎都在使用的支付服务、电商服务、地图服务等,以及在上班路上看到的红绿灯、广告牌,因为我们都无须了解背后的服务器以及计算资源,所以基本都是 Serverless 服务。更进一步,如果站在普通用户的角度,整个互联网都应该是Serverless架构的。
而本书所讨论的 Serverless,其实与这一理念类似,只是它面向的对象变成了研发人员。作为开发者,我们在部署和发布应用程序时,需要关心服务器和计算资源的情况,这似乎是再正常不过的场景了。然而,之所以习以为常,我认为是我们长久以来所接触和使用服务器的方式所导致的。
在探讨 Serverless 价值之前,我们需要站在更高的层面思考一个问题:企业为什么需要研发人员?
一个企业的根本目标是赢利;而为了达到这一目标,企业需要能够给客户创造价值。互联网本身并非一个独立的实体行业(比如能源行业、医疗行业、教育行业),它通常是将 IT 作为一种能力或工具,赋予某一个或多个行业,以提升相应行业的生产力。比如 Microsoft 的Office,是通过提供通用的办公软件来提高企业的运转效率,从而降低人力成本的;阿里巴巴公司的淘宝网,是通过电子商务技术来提供商品的买卖平台,以达到降低商品交易成本目的的;腾讯公司的微信则通过即时通信服务,降低了人与人之间的沟通成本。它们有一个共同的特点,即都给自己的客户带来了价值。
既然希望通过IT创造价值,那么必然需要研发人员开发相应的应用程序。也就是说,我们应当面向客户的痛点,结合业务的实际情况,开发出相应的IT工具来提高生产力。因此,我们可以认为IT企业之所以招聘研发人员,是为了开发出能够解决客户实际业务中所遇到的问题,从而提高客户生产力的应用软件。而应用软件的核心内容,是处理客户的业务逻辑,最终提高其生产力。
通过应用程序来处理业务逻辑,这似乎是没有争议的。然而问题在于,作为研发人员,当我们在发布和部署应用程序时,却需要关心那些与业务逻辑无关的内容,即服务器运维工作。这就像作为驾驶员需要关心内燃机原理一样不合理。但是要知道,在汽车被发明之前,我们是通过马车等来实现人员运输的。马车车夫除正常的驾驶外,通常还需要给马匹喂食、清洁,以及给它们配备马厩用于休息等一系列额外操作。对于马匹的管理知识,几乎成了马车车夫的必修课。而在内燃机发明之后,这些与实际使用无关的操作都被汽车厂商封装在了一个黑盒中,所有的维护工作都由汽车厂商或其他专业机构完成。内燃机的发明,大大减少了人员运输的附加成本。
目前研发人员仍然需要关注服务器及其计算资源的情况,但我认为这是暂时的,只是因为云计算的基础设施仍然不够完善。以计算机语言的发展举例,在计算机编程语言诞生之初,我们使用机器码的方式来告诉计算机我们期望执行的内容。而编写机器码时,需要从指令表中查到计算步骤对应的机器语言,再人工编码成对应的代码交给机器执行。后来,人们发现翻译这件事情很适合计算机自己完成,于是就有了汇编器。通过汇编器,我们只需要编写汇编语言,就能自动将其转换为机器码来执行。到了这个时候,人们不再需要学习机器码也能实现让计算机完成期望的指令了。随着计算机技术的发展,高级语言也随之诞生,我们无须关注底层汇编内容,通过更高级的指令即可生成汇编代码并执行,最终完成自己期望的计算操作。
与计算机语言的发展类似,以 IaaS 为代表的云计算技术的普及,让我们无须关注物理服务器。随着云计算技术的逐步发展,它将各种细节屏蔽在了黑盒之中,让我们在不用了解底层技术的情况下,就能够更轻松地达到目标。正如上面提到的,驾驶员的根本目标其实是将客户从 A 点送达 B 点。驾驶汽车前往只是一种手段;伴随无人驾驶技术的发展和推广,我们终将不再需要驾驶,就能实现根本目标。无论是内燃机、无人驾驶还是云计算,它们都是通过更便捷、更低成本的新技术来实现客户目标的。
而 Serverless 正是这样一种新技术。它帮助我们进一步屏蔽了服务器、操作系统、系统软件等概念,让我们无须关心服务器的负载情况、部署节点等技术细节,而能更聚焦于研发人员的本质工作:实现业务逻辑。
另外,Serverless 提出了按用量付费的理念,即当对应的任务被触发执行时,才会计费。这一模式使得我们无须为那些自己没有使用的计算资源买单,这能极大地降低服务器的成本。初创企业或个人开发者无须一开始就付出高昂的服务器费用,即可使其业务快速上线运行。
极低的运维成本和大幅下降的服务器费用,正是 Serverless 迅速被开发者接受并普及开来的原因。