最近几年的技术圈,对于 Serverless 技术的讨论异常火热,在业内也有了很多成熟的案例国外发展较早,比较有代表性的就是亚马逊和谷歌, 而在国内,腾讯和阿里两位巨头,都将Serverless 定义为集团战略型项目,不遗余力的推广和研发自己的 Serverless 技术。
Serverless 是一种后端架构技术,更准确的说,它应该是一种后端架构的概念或者思维。
后端架构的演进
每一个 B/S 架构的互联网应用,都是由最基础的客户端和服务端构成的,客户端要呈现内容,就需要服务端提供服务。
最初,搭建一个服务器是非常繁琐的,我们需要购买一台电脑主机,然后找一个机房对机器进行托管,要将外观拍照,将各项硬件参数提交到备案中心进行备案,链接电源和网线,安装好操作系统,然后搭建好代码的运行环境,部署程序代码后,再将申请的域名和静态IP做好解析,就算是上线部署完毕了。
这样的服务器架构是单机版的单体架构,数据库、应用代码、HTTP服务器等服务全都在一台你自己管理的服务器上运行,因为我们要接触物理机,所以,我们也把它成为【物理机时代】。
在物理机时代不仅仅是上线部署非常繁琐的问题,在整个应用的运行中,还有各种各样的问题出现,比如磁道磨损的硬盘,机房的意外停电,老鼠咬断的网线。随着技术的不断发展,我们终于摆脱了物理机时代,跨入【虚拟机时代】。
其中一个重要节点之一就是 2001年 VMWare 带来的针对 x86 服务器的虚拟化产品,通过虚拟化技术,可以把一台物理机分割成多台虚拟机提供给用户使用,充分利用硬件资源,而对于硬件设备的管理,统一由云厂商负责,对于开发者来说,就不用再买硬件了,直接在云平台买虚拟机,比如 AWS 的 EC2、阿里云 ECS、腾讯云 CVM;
云服务器的使用使得开发者再也不用担心硬件设备的维护,不过业务量的不断
增长,用户越来越多,数据库每天都有几千万条数据写入,数据库性能很快就会达到瓶颈;除此之外,
每天也有上百万图片存到磁盘,磁盘也快要耗尽了。为了降低服务器负载,我们把数据库迁移到了云厂
商提供的云数据库上,把图片存储迁移到对象存储:
对象存储能无限扩容,不用担心磁盘不够了。云数据库有专门的服务器,并且还提供了备份容灾,比自己在服务器上安装数据库更稳性能更强。
这样一来,服务器就只负责处理用户的请求,把计算和存储分离开来,既降低了系统负载,也提升了数
据安全性。并且单机应用升级为了集群应用,通过负载均衡,会把用户流量均匀分配到每台服务器上。
不过在服务器扩容的过程中,你还是会遇到一些麻烦。 比如购买服务器后,都需要在上面初始化软件环
境和配置,还需要保证所有服务器运行环境一致,这是个非常复杂还容易出错的工作。这对运维工程师
也是一个非常大的挑战。
总的来说,虚拟机可以让你不用关心底层硬件,但是我们依然要为服务器集群的管理工作付出高昂的成 本, 如果有一项技术,能够在每次的服务器扩容时,让服务器的运行环境保持一致,那就太好了,于 是,容器技术应运而生。
2013 年 Docker 的发布,代表着容器技术替代了虚拟化技术,云计算进入容器时代。 容器技术就是在 虚拟化技术的基础上,把代码和运行环境打包在一起,这样,不论服务器的配置怎样,代码和运行环境 均能保持一致性。有了容器技术,你在服务器上部署的就不再是应用了,而是容器。当容器多了的时 候,如何管理就成了一个问题,于是出现了容器编排技术,比如 2014 年 Google 开源的 Kubernetes, 就是俗称的 K8S。
在目前的后端架构中,容器技术依然是主流的服务器架构技术,但是随着互联网应用的普及,我们需要 面对各种各样的应用场景,举个栗子,每当大型购物节来临,我们的在线商城会面临巨大的流量洪峰, 而在平时,流量显然要小很多,为了迎接购物节的流量洪峰,我们需要大量扩充服务器,服务器的扩充 和大量容器的编排工作,也是一个不小的难题,如果我们对流量的压力预估不到位,还会有服务器宕机 的风险, 而在平时,如此多的服务器运行显然是在浪费资源增加成本。
那么,有没有一种技术,让我们只关心业务代码的功能实现,脱离服务器的管理呢?让我们不再为运行 环境劳心伤神,不再为服务器的扩缩容半夜惊醒,当流量洪峰来临时,自动调配更多的服务器资源支 撑,当流量低谷时,自动释放服务器资源节约成本;这样美好的时代,正在想你走来,它叫 serverless。