什么是Serverless无服务器架构?
Serverless不代表再也不需要服务器了,而是说:开发者再也不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。
Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署,你甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地开发软件。
这种架构是云计算发展的必然结果,云计算的发展历程:
- 硬件组用,不用再自己搭建机房运维机房,这时需要组用整台主机。
- 虚拟化机器租用,整台机器租用费用高昂,将一台主机虚拟化成多台,降低用户租用费用,也降低运维成本。
- 计算资源和存储资源组用,弹性的计算资源随租随用(此时用户租用的多为操作系统层面,每一个弹性计算带必须由一种操作系统管理才能方便的提供服务),超大的存储资源按使用量付费(软件定义存储,以阿里云oss和亚马逊s3存储为代表)。该方式为目前使用最为广泛的。进一步降低了使用者的租用成本。
- 运行环境租用,用户不在租用操作系统,而是租用应用运行环境(比如java运行环境(tomcat等), nodejs运行环境,python环境等等)以docker+k8s容器服务代表,天然支持微服务架构,提供容器化的服务。
- 无服务器架构时代,用户只需上传代码,剩下的并发、运维、安全等交给第三方云计算公司去做。按使用量付费,不用不付费,进一步降低用户使用成本。
人民都有这么一个美丽的畅想,我只关注我的业务或想法的实现,不关心服务器的配置甚至不用考虑并发、安全、运维等等一系列问题。我只用代码完成我的想法,然后剩下的事情由第三方帮我完成。无服务架构更加接近了这个想法,但是目前发展还有待完善,相信不久的将来可以实现这个美好的愿望。
以亚马逊的AWS Lambda为案例,Lambda能让不用思考任何服务器,也就是说,不用你处理服务器上的部署、服务器容量和服务器的扩展和失败容错,还有服务器上选择什么OS操作系统,语言的更新,日志等等问题。你的应用程序只需要和多个第三方的API或服务打交道,也可以自我创建一个无服务器的API。
无服务的指导思想:社会分工。每个人做自己最擅长的事情,专业的事情交给专业的人去做,不重复无差别的劳动。
Serverless有以下几个特点:
- Serverless意味无维护,Serverless不代表完全去除服务器,而是代表去除有关对服务器运行状态的关心和担心,它们是否在工作,应用是否跑起来正常运行等等。Serverless代表的是你不要关心运营维护问题。有了Serverless,可以几乎无需Devops了。
- Serverless不代表某个具体技术,有些人会给他们的语言框架取名为Serverless,Serverless其实去除维护的担心,如果你了解某个具体服务器技术当然有帮助,但不是必须的。
- Serverless中的服务或功能代表的只是微功能或微服务,Serverless是思维方式的转变,从过去:“构建一个框架运行在一台服务器上,对多个事件进行响应”变为:“构建或使用一个微服务或微功能来响应一个事件”,你可以使用python,java,nodejs等多种语言或技术实现,但是serverless本身超越这些框架概念。框架变得也不那么重要了。
- Serverless规模扩展性方面由于充分利用云计算的特点,因此其扩展是平滑的,同时由于Serverless是基于微服务的,而一些微功能微服务的云计算是零收费,这样有助于降低整体运营费用。
- Serverless真正的实现了云计算的目标。
无服务架构适用场景
每种架构都有合适的场景,并不存在说一种套路可以打遍天下无敌手的架构。
无服务架构基本要求
- 指导思想:函数即服务,一个函数实现一个服务。
- 计算和存储分离,这个是核心也是必要条件,应用产生的所有数据都云端存储,由软件定义存储,而不是放在本机硬盘。函数运行时动态申请计算资源,使用完立即释放资源。好处是,不用担心服务器出现故障或被攻击,服务器变得不再重要,随时可以被替换。
- 全面云计算,目前无服务器架构的主要推动者为云计算公司,以亚马逊和阿里云为例,你的应用受限于你选择的云计算公司。
底层实现原理:事件驱动,消息驱动,所有触发都由消息完成,由消息中间件发送和定域消息,由消息触发事件,对应不同的事件,云计算做出不同的响应。将大量的计算机资源用一个云操作系统管理,所有的资源由事件驱动调用给用户使用和服务。
目前适用场景和可行的设计方案
以阿里云函数计算为例:
数据存储全部入oss(对象存储服务)
- 函数计算支持Java,c#,nodejs,python等常见开发语言
- 适用场景
- 静态页面展示,比如推广页,官网页,静态博客资源
- 数据统计分析,比如非结构化数据处理,视频转换,图片裁切等
- 机器学习场景,比如图片鉴黄,视频截取等等
- 物联网行业,比如大规模的机器集群,实时接收大量消息,然后转为数据流存储和计算
- 大数据计算,比如基因测序,气象观测数据分析等等
- 微服务系统,每个服务就是一个函数,支持SpringBoot,express等多种框架
目前无服务架构的本质
是云计算厂商提供一套API接口,你的应用使用该套api接口开发,而不依赖于任何一台主机、任何一种操作系统。优势是降低开发成本,劣势是受限云计算厂商。该架构是社会发展必然趋势,云计算厂商会越来越多,他们之间的竞争与合作会进一步促进该架构模式的发展。