追本溯源,详解Serverless架构及应用

随着2014年AWS Lambda的发布和流行,近年来有关Serverless的话题和讨论越来越频繁。究竟什么是Serverless?为什么需要Serverless? Serverless是否意味着从此不再需要服务器了?Serverless究竟能为开发运维带来哪些便利呢?

回溯本源

让我们先来回顾一下常见的应用服务开发上线流程。

一、直接使用物理设备:

开发者将应用程序开发测试完毕后,直接将程序和相关软件部署在物理设备上。服务器直接使用物理机。直接使用物理设备部署应用程序不可避免地需要大量人工运维和重复劳动。比方说,用户数量逐渐增长时,我们需要扩容物理设备以应对更高的网站访问压力。

这时候我们需要购置更多的物理服务器,并且搬运到机房的对应机架机柜中。然后,我们需要手动为新购置的物理服务器安装各种运行软件,填写好配置文件,手动部署启动好需要运行的应用程序。这些大量的重复运维劳动造成产品上线慢,迭代周期长。其次,使用物理设备直接部署应用程序将导致资源浪费。如今的物理服务器的配置越来越强大,64核128G在今天看来也不过是普通配置。很难想象你买了一台32核的物理机,却只想搭建个人博客。此外,电商行业经常为了应对促销秒杀等活动准备大量的物理资源,然而在非促销等流量低谷时段,大量物理资源处理闲置状态,不利于节约成本。

最后,为了解决资源浪费的问题,我们很容易想到,可以将多个应用程序部署在同一台服务器上来充分利用资源。但由此又导致了新的麻烦,不同的应用程序经常会抢占CPU,磁盘IO,内存,难以做到隔离资源,各行其是,互不干扰。

二、IaaS托管硬件

虚拟化技术的成熟直接解决了上述直接使用物理设备的几个痛点。

首先,使用IaaS平台,服务器由物理机变成了虚拟机。申请服务器资源仅需要调用IaaS平台的API或者点击控制台页面就可以轻松完成。CPU个数,内存大小,网络带宽,存储磁盘大小都可以按需指定,随心所欲。虚拟机被玩坏了也不需要重装系统修复,删除重建新虚拟机即可。扩容服务器不再需要大量的重复人工运维劳动,加速了产品上线和迭代。

其次,使用IaaS平台一定程度上减轻了资源浪费。在IaaS平台上很容易得申请和删除虚拟机,升降带宽配置等操作,这样当业务低谷时段直接删除多余的虚拟机,降低带宽购买配额,就能节约不少成本。

最后,IaaS平台解决了资源隔离的问题。不同虚拟机之前有独立CPU,内存,磁盘,网卡,不同虚拟机之前的程序不会进行资源抢占。

然而,IaaS平台仅仅为开发者做好了硬件托管的工作。开发者依然需要为虚拟机安装操作系统和各种软件,填写配置并部署应用;依然需要关注服务器,带宽,存储等资源的使用量和扩容缩容。此外,IaaS平台没有完全解决资源浪费的问题,实际上,大量虚拟机在日常运行中依然存在超低负载运行的情况。

三、 PaaS托管应用

使用PaaS平台,开发者无需关注服务器的申请采购、系统安装和资源容量。PaaS服务提供商为开发者提供好了操作系统和开发环境以及支持的SDK和API,还能自动调整资源来帮助应用服务更好的应对突发流量。有了PaaS平台,开发者仅仅需要把应用开发好,然后在PaaS平台完成服务部署,应用服务即可上线。

相比IaaS平台,PaaS平台能更加精准的为应用程序所消耗的资源计费。IaaS平台仅仅依据用户申请的资源量,如CPU核心数,网络带宽来计费,而不关注用户是否实际真正充分使用了其所申请到的资源。PaaS平台则可以通过统计应用程序所占用的CPU使用率和内存使用率来做的更精准的计费,甚至可以实现应用层面的计费,比如服务响应时间,或者应用所消耗的事务。

什么是Serverless?

架构详解1

图1:互联网应用传统架构的模型和Serverless架构模型