Hello 大家好,我是阿粉,在了解什么是 Serveless 架构之前,我们先看下传统的项目发布和部署的流程是什么样子的。
物理机
最初的时候每个公司如果想发布自己的应用,则需要建设自己的机房,然后购买服务器主机,组装路由器交换机和网络,网络通了过后还要安装 Linux
系统以及安装各种软件,最后将开发完成的 Java
项目打包放到 Tomact
容器里面或者以 Jar 包的形式运行起来对外服务。这个过程好一点的公司是通过 Jenkins
等 CICD
的方式来完成的,但是更有很多公司是通过人工手动拷贝的方式来进行的。这种方式很容易出错,而且也不方便回滚,更无法应对高峰期的缩扩容。每次升级部署的时候都是一个很艰巨的任务,如果说业务初期这种方式还是可以的,不需要多大的成本,但是当我们的业务发展到一定程度的时候,需要开发的部署的服务越来越多的时候就不行了。
简单的形式如上图所示,在自建机房的时候还是要考虑很多细节问题的,比如机房温度往往都较高所以要安装空调;然后如何保证机房长期不断电,毕竟机房如果断电服务将不可用。
云主机
物理机的机房建设对于很多公司来说不会考虑,因为并没有相应的能力去建设。所以很多公司往往采用的是购买云主机的方式来部署服务,云主机的方式与物理机的区别就是不用自己去搭建机房,不用考虑机房的建设和机器的维护,这些都是云厂商负责。国内知名的云厂商有阿里云,腾讯云,华为云等。根据自己服务的要求我们可以选择购买对应配置的云主机,自有选择内存和硬盘以及带宽等配置。
虽然说云主机解决了我们不用建设机房的问题,但是在整个过程中我们依然需要关注服务器的状态,内存是不是不够了,磁盘是不是不够了,高峰期的时候需要及时购买服务器去扩容,低峰期的时候又不能立马退掉机器,对于我们开发或者运维的同学来说还是要对服务器进行管理。
对于很多公司来说目前的服务部署都是基于云主机的,通过购买云主机自建各种组件的集群用于支持自己的服务器,这无疑更加增加了对服务器的维护成本以及人力成本。
Serveless
架构
既然上面的架构都有缺点,那有没有一种方式可以免去开发同学和运维同学的一些烦恼呢?答案是肯定的,随着云原生开发模型的诞生 Serveless
架构被大家广泛提出。
Serveless
无服务器架构是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器。
Serveless
架构中文是无服务器架构 ,是一种基于云原生的开发模型,虽然说的是无服务器但是并不代表不需要服务器,只是表示的是开发人员不需要关注服务器,只需要关注应用的构建即可。对于服务器可以做到透明,整个服务器的管理和维护完全由云厂商来负责,开发人员只需要将自己的应用打包到容器中即可对外提供服务。
同时在收费的方面也有了很大的变化,不管是上面自己搭建机房亦或是购买云主机,在服务不使用的时候依然会产生相应的费用,但是,基于云原生的 Serveless
方式,只有在服务被使用的时候才会产生计费,无请求的时候是不会产生任何费用的。另外对于服务的扩容和缩容由于是基于云原生的容器部署的,所以可以做到即时动态扩容和缩容来适配流量的峰值情况。
Serveless
架构还有以下优点
- 降低运营和开发成本;
- 自动扩缩容;
- 更简单的架构和高效的性能;
Serveless
架构的产品通常分为两类,分别是 BaaS
后端即服务,另一种是 Faas
功能即服务。BaaS
可以让开发人员访问各种第三方服务和应用,可以使用很多云厂商提供的服务,包括认证,加密,数据库等;不过我们经常提到的 Serveless
通常指的是 FaaS
。FaaS
模型下我们通常还是正常的编写业务逻辑,只不过是可以完全运行在云厂商提供的容器里面。
FaaS 功能即服务
FaaS
是一种事件驱动计算模型,开发人员正常的编写业务逻辑,部署到云厂商的容器中,然后按需执行。容器是由云厂商提供的,无状态的,并且能随停随启的基于事件驱动的,在需要的时候自动运行。
对于我们开发人员来说,实现了 Serveless
架构过后,我们的整个架构就变了,以一个简单的 web
应用为例,在我们以前的架构简化成下面这边样子
但是当我们切换到 Serveless
架构的时候,整个架构就变成了下面这个样子
可以看到整个架构已经处于服务器不可见的状态了,对于开发人员不需要关心具体的服务器了,只需要关注自己的业务逻辑就行,统一的接入,安全,认证和调度都交给了云厂商。
前面讲的都是原理部分,下面通过实践阿粉带大家一起看下 Serveless
应用要怎么玩,我们通过腾讯云来演示 Serveless
的玩法。
实现 Serveless 架构的 Hello World
首先我们打开腾讯云,找到 Serveless
下面的云函数,点击进去过后会提示让我们进行授权,直接点击前往授权,并且同意就好了,如下图。
前往授权
直接同意就好了
授权完成过后,我们新建应用,通过自定义创建,当然也可以选择模板创建,阿粉这边就自定义创建了,直接点击完成就好,一个基于 Python
的云函数就创建好了。
前面提到 FaaS
是基于事件的,所以我们需要创建触发,这里我们创建一个基于 API
的触发方式,创建完成过后系统会生成一个地址,复制这个地址,当浏览器去执行就好了。
执行完成过后,我们看下日志查询,会看到有相应的日志输出了,这是默认的代码输出的,我们可以把 Python
脚本调整下,直接输出 Hello world
,如下图,调整完成过来点击部署,再次访问原先的地址就可以了。
结果如下:
总结
阿粉今天给大家介绍了什么 Serveless
,以及通过腾讯云带大家实践了一下云函数的创建,更多的玩法大家可以自行解锁。
参考
- Infoq 入门 Serverless:如何实现 Hello World
- AWS 从IaaS到FaaS—— Serverless架构的前世今生