Serverless的中文含义是无服务器,是一种云原生开发模式,可使开发人员专注构建和运行应用,而无需关注和管理服务器等底层基础设施及其运维。事实上,Serverless并不是真的不需要服务器,而是把服务器从应用开发中抽离出来了,转由云厂商接管相应的置备、维护和扩展等工作。
我们知道,计算模式中有自建基础设施、IaaS和PaaS,这些是基于服务器运行应用程序的Serverful模式。Serverless与这些计算模型的区别在于,Serverless无需关注与业务逻辑无关的部分,从繁重的底层资源的管理运维中解放了开发人员的精力,将业务逻辑无关的部分工作交给云厂商去管理,包括基础架构和应用扩展、管理运维等工作。
几种不同的开发模式比较
在Serverful模式中,用户需要预先购买资源,根据业务负载的波动动态调整资源的规模,在业务空闲时段仍要保留一定的运行资源,以保证负载增长时可以扩容,存在一定程度的资源浪费。此外,还要管理操作系统、安全补丁、负载平衡、容量规划、资源扩展、日志和监控等工作。与之相反,Serverless模式下的Serverless平台会自动分配和销毁资源,在某些时候可以将资源缩减到零,而不再产生任何费用,将代码开发之外的工作都转移给云厂商,释放了开发人员的生产力。
那么,Serverless架构是如何构成的呢?按照 CNCF(云原生基金会) 对 Serverless 计算的定义,Serverless 架构由 FaaS(函数即服务)和 BaaS(后端服务)结合而成,如下图。
我们使用各种计算模式,就是为了实现特定业务目的。举一个日常出行的例子,我们的出行目标是从A地到B地,然而为了实现这个目标,往往有几种不同的出行交通方式:
- 我们购买物理服务器,就好比我们自己买了一辆车直接开过去,显然,这种方式投入大、还需要持续进行车辆维护。
- 我们也可以使用虚拟机,这就好比租一辆车,自己开过去,这种方式下租用期间的维护也很头疼。
- 当然,我们也可以使用Serverless,就好比直接打车过去,这是最简单愉快的方式了,只需告诉出租车师傅去哪里,到了目的地,按实际费用支付即可。
- 另外,我们还可以使用SaaS,就像是通过公共交通,只是SaaS都是通用场景的实现,不会根据我们目标做调整,所以难免会遇到各种换车,不可避免的要走很多路花很多时间。