作为 Java 开发程序员,你知道什么是 Serveless 架构吗?

Hello 大家好,我是阿粉,在了解什么是 Serveless 架构之前,我们先看下传统的项目发布和部署的流程是什么样子的。

物理机

最初的时候每个公司如果想发布自己的应用,则需要建设自己的机房,然后购买服务器主机,组装路由器交换机和网络,网络通了过后还要安装 Linux 系统以及安装各种软件,最后将开发完成的 Java 项目打包放到 Tomact 容器里面或者以 Jar 包的形式运行起来对外服务。这个过程好一点的公司是通过 JenkinsCICD 的方式来完成的,但是更有很多公司是通过人工手动拷贝的方式来进行的。这种方式很容易出错,而且也不方便回滚,更无法应对高峰期的缩扩容。每次升级部署的时候都是一个很艰巨的任务,如果说业务初期这种方式还是可以的,不需要多大的成本,但是当我们的业务发展到一定程度的时候,需要开发的部署的服务越来越多的时候就不行了。

简单的形式如上图所示,在自建机房的时候还是要考虑很多细节问题的,比如机房温度往往都较高所以要安装空调;然后如何保证机房长期不断电,毕竟机房如果断电服务将不可用。

云主机

物理机的机房建设对于很多公司来说不会考虑,因为并没有相应的能力去建设。所以很多公司往往采用的是购买云主机的方式来部署服务,云主机的方式与物理机的区别就是不用自己去搭建机房,不用考虑机房的建设和机器的维护,这些都是云厂商负责。国内知名的云厂商有阿里云,腾讯云,华为云等。根据自己服务的要求我们可以选择购买对应配置的云主机,自有选择内存和硬盘以及带宽等配置。

虽然说云主机解决了我们不用建设机房的问题,但是在整个过程中我们依然需要关注服务器的状态,内存是不是不够了,磁盘是不是不够了,高峰期的时候需要及时购买服务器去扩容,低峰期的时候又不能立马退掉机器,对于我们开发或者运维的同学来说还是要对服务器进行管理。

对于很多公司来说目前的服务部署都是基于云主机的,通过购买云主机自建各种组件的集群用于支持自己的服务器,这无疑更加增加了对服务器的维护成本以及人力成本。

Serveless 架构

既然上面的架构都有缺点,那有没有一种方式可以免去开发同学和运维同学的一些烦恼呢?答案是肯定的,随着云原生开发模型的诞生 Serveless 架构被大家广泛提出。

Serveless 无服务器架构是一种云原生开发模型,可使开发人员专注构建和运行应用,而无需管理服务器。

Serveless 架构中文是无服务器架构 ,是一种基于云原生的开发模型,虽然说的是无服务器但是并不代表不需要服务器,只是表示的是开发人员不需要关注服务器,只需要关注应用的构建即可。对于服务器可以做到透明,整个服务器的管理和维护完全由云厂商来负责,开发人员只需要将自己的应用打包到容器中即可对外提供服务。

同时在收费的方面也有了很大的变化,不管是上面自己搭建机房亦或是购买云主机,在服务不使用的时候依然会产生相应的费用,但是,基于云原生的 Serveless 方式,只有在服务被使用的时候才会产生计费,无请求的时候是不会产生任何费用的。另外对于服务的扩容和缩容由于是基于云原生的容器部署的,所以可以做到即时动态扩容和缩容来适配流量的峰值情况。

Serveless 架构还有以下优点

  1. 降低运营和开发成本;
  2. 自动扩缩容;
  3. 更简单的架构和高效的性能;

Serveless 架构的产品通常分为两类,分别是 BaaS 后端即服务,另一种是 Faas 功能即服务。BaaS可以让开发人员访问各种第三方服务和应用,可以使用很多云厂商提供的服务,包括认证,加密,数据库等;不过我们经常提到的 Serveless 通常指的是 FaaSFaaS 模型下我们通常还是正常的编写业务逻辑,只不过是可以完全运行在云厂商提供的容器里面。

FaaS 功能即服务

FaaS 是一种事件驱动计算模型,开发人员正常的编写业务逻辑,部署到云厂商的容器中,然后按需执行。容器是由云厂商提供的,无状态的,并且能随停随启的基于事件驱动的,在需要的时候自动运行。

对于我们开发人员来说,实现了 Serveless 架构过后,我们的整个架构就变了,以一个简单的 web 应用为例,在我们以前的架构简化成下面这边样子

但是当我们切换到 Serveless 架构的时候,整个架构就变成了下面这个样子

可以看到整个架构已经处于服务器不可见的状态了,对于开发人员不需要关心具体的服务器了,只需要关注自己的业务逻辑就行,统一的接入,安全,认证和调度都交给了云厂商。

前面讲的都是原理部分,下面通过实践阿粉带大家一起看下 Serveless 应用要怎么玩,我们通过腾讯云来演示 Serveless 的玩法。

实现 Serveless 架构的 Hello World

首先我们打开腾讯云,找到 Serveless 下面的云函数,点击进去过后会提示让我们进行授权,直接点击前往授权,并且同意就好了,如下图。

前往授权

直接同意就好了

授权完成过后,我们新建应用,通过自定义创建,当然也可以选择模板创建,阿粉这边就自定义创建了,直接点击完成就好,一个基于 Python 的云函数就创建好了。

前面提到 FaaS 是基于事件的,所以我们需要创建触发,这里我们创建一个基于 API 的触发方式,创建完成过后系统会生成一个地址,复制这个地址,当浏览器去执行就好了。

执行完成过后,我们看下日志查询,会看到有相应的日志输出了,这是默认的代码输出的,我们可以把 Python 脚本调整下,直接输出 Hello world,如下图,调整完成过来点击部署,再次访问原先的地址就可以了。

结果如下:

总结

阿粉今天给大家介绍了什么 Serveless,以及通过腾讯云带大家实践了一下云函数的创建,更多的玩法大家可以自行解锁。

参考

  1. Infoq 入门 Serverless:如何实现 Hello World
  2. AWS 从IaaS到FaaS—— Serverless架构的前世今生
Java Geek Tech wechat
欢迎订阅 Java 极客技术,这里分享关于 Java 的一切。