场景介绍
场景介绍如何应用函数计算服务开发一个 IP 查问工具。
背景常识
什么是 Serverless
自 2006 年 8 月 9 日,Google 首席执行官埃里克·施密特(Eric Schmidt)在搜索引擎大会(SESSanJose2006)首次提出“云计算”(Cloud Computing)的概念之后,云计算的倒退能够用突飞猛进这个词来形容。那么到底什么才是 Serverless 呢?
简略来说,Serverless 能够说是一种架构,一种云计算倒退的产物,至于具体说什么是 Serverless,可能没有谁能给他一个明确的概念,如果非要说一个能够略微容易了解一些的概念,那或者能够参考 Martin Fowler 在《Serverless Architectures》中对 Serverless 这样定义:Serverless=BaaS + FaaS
Serverless 架构和传统的我的项目的区别
首先,咱们以一个常见的 Web 服务为例:
在这个图中,服务器中可能波及路由规定、鉴权逻辑以及其余各类简单的业务代码。同时,开发团队要付出很大的精力在这个服务器的运维下面,例如要时刻关注以下问题:
客户量忽然增多时是否须要扩容服务器。
服务器上的脚本和业务代码等是否还在衰弱运行。
是否有黑客在一直地对服务器发动攻打。
当咱们把这个思路切换到 Serverless 的逻辑之后,变成了这样:
能够认为,当客户端和数据库未发生变化的前提下,服务器变动微小。
之前须要开发团队保护的路由模块以及鉴权模块都将接入服务商提供的 API 网关零碎以及鉴权零碎,开发团队无须再保护这两局部的业务代码,只须要继续保护相干规定即可。
在这个构造下,业务代码也被拆分成了函数粒度,不同函数示意不同的性能。
咱们曾经看不到服务器的存在,是因为 Serverless 的目标是让使用者只关注本人的业务逻辑即可,所以一部分平安问题、资源调度问题(例如用户量暴增、如何实现主动扩容等)全都交给云厂商负责。
绝对于传统我的项目而言,传统我的项目无论是否有用户拜访,服务都在运行中,都是有老本收入,而 Serverless 而言,只有在用去发动申请时,函数才会被激活并且执行,并且会按量免费,相对来说能够在有流量的时候才有反对,没有流量的时候就没有收入,相对来说,老本会进一步升高。
通过以上剖析和形容,不难看出 Serverless 架构绝对于传统的开发模式的区别,也逐步的发现了它的劣势。然而问题来了,很多工作都交给了云厂商来做,那咱们做什么呢?
应用 Serverless 架构后:
开发团队不须要再本人保护服务器,也不须要本人操心服务器的各种性能指标和资源利用率,而是能够让开发团队付出更多的工夫和精力去关注应用程序自身的状态和逻辑。
Serverless 利用的部署将变得非常容易。咱们只有上传根本的代码,例如 Python 程序只须要上传其逻辑与依赖包,C/C++、Go 等语言只需上传其二进制文件,Java 只须要上传其 Jar 包等即可,同时不需应用 Puppet、Chef、Ansible 或 Docker 来进行配置管理,大大降低了运维老本。
Serverless 架构也不再须要监控底层的数据,例如不再须要监控磁盘使用量、CPU 使用率等,能够更加专一的将监控眼光放到监控应用程序自身的度量。同时在 Serverless 架构上,运维人员的工作角色会有所转变,部署将变得更加自动化,监控将更加面向应用程序自身。
应用 Serverless 架构的劣势
从上文中咱们不难看出,绝对于传统我的项目,Serverless 具备的以下劣势:
您无需洽购和治理服务器等基础设施,运维成本低。
您只需专一业务逻辑的开发,应用函数计算反对的开发语言设计、优化、测试、审核以及上传本人的利用代码。
以事件驱动的形式触发利用响应用户申请。与阿里云对象存储 OSS、API 网关、日志服务和表格存储等服务无缝对接,帮忙您疾速构建利用。例如,通过 OSS 解决图片和视频的存储问题,当有新数据写入您的 OSS 资源时,主动触发函数解决数据。
提供日志查问、性能监控和报警等性能疾速排查故障。
毫秒级别弹性伸缩,疾速实现底层扩容以应答峰值压力。
按需付费,反对百毫秒级别免费。只需为理论应用的计算资源付费,适宜有显著波峰波谷的用户拜访场景。
总而言之,Serverless 是在传统容器技术和服务网格上倒退起来,更多指的是后端服务与函数服务的联合。对于开发者而言,可能将更多的精力关注在函数服务上,更偏重让使用者只关注本人的业务逻辑即可。
同时,Serverless 也是云计算倒退到肯定阶段的必然产物。作为普惠科技,云计算倒退的指标肯定是绿色科技和公众科技的产品——而 Serverless 可能很好的诠释这些:最大水平利用资源、缩小闲暇资源节约;同时升高学习老本和应用老本。
Serverless 架构被称为是“真正实现了当初云计算的指标”,这种说法尽管有些夸大,然而也从另一方面体现出了大家对 Serverless 架构的期盼和信念。自 2012 年被提出至今,Serverless 架构也是经验了 7 年工夫,正在逐步的走向成熟。
步骤一:连贯 ECS 服务器
阿里云云产品资源体验地址:https://developer.aliyun.com/…
场景将提供一台配置了 CentOS 7.7 的 ECS 实例(云服务器)。通过本教程的操作,您能够基于已有的环境开发一个基于函数计算的 IP 查问工具。
步骤二:开明函数计算服务
在应用函数计算前,须要开明函数计算服务。
阐明:本场景中提供的阿里云子账号无函数计算服务操作权限,请应用您本人的阿里云账号操作。您无需放心扣费问题,因为函数计算服务有肯定的收费额度,请参见计费形式。
1. 应用您本人的阿里云账号登录阿里云控制台,而后进入函数计算产品详情页。
2. 单击【收费开明】。
- 浏览《函数计算服务协定》勾选批准服务协定,最初单击【立刻开明】。
4. 单击【治理控制台】进入函数计算控制台。
步骤三:装置 Funcraft 工具
Fun 是一个用于反对 Serverless 利用部署的工具,能帮忙您便捷地治理函数计算、API 网关和日志服务等资源。它通过一个资源配置文件
(template.yml),帮助您进行开发、构建和部署操作。
本步骤将在 ECS 服务器上安装 Funcraft 工具。
1. 执行以下命令装置 NodeJS。
curl -sL https://rpm.nodesource.com/setup_10.x | bash - && yum install -y nodejs
2. 执行以下命令装置 Funcraft。
npm install request @alicloud/fun -g
3. 执行 fun config 命令进行本地配置。
fun config
请参考以下信息输入您的阿里云账号 ID、AccessKeyID 和 AccessKey 密钥等信息。
Aliyun Account ID:请在账号平安设置页面查看您的账号 ID。
Aliyun Access Key ID 和 Aliyun Access Key Secret:请在 平安信息管理 页面查看您账号的 AK ID 和 AK Secret。
如果您应用的是阿里云主账号,请在平安信息管理页面的平安提醒弹框中单击持续应用 AccessKey。
Default region name:请抉择开明的函数计算服务所在地区。
正确设置如下所示:
步骤四:运行模板示例
1. 执行以下命令新建工作空间。
mkdir search_ip && cd search_ip
2. 执行 fun init 命令新建一个 HTTP 函数触发器。
fun init http-trigger-nodejs10
命令执行后果如下所示:
其中 index.js 文件为生成的 HelloWorld 函数模板,template.yml 文件中蕴含了 HelloWorld 函数和 HTTP 触发器的默认配置信息。
3. 执行 fun deploy - y 命令部署利用到函数计算服务。
fun deploy -y
命令执行后果如下所示:
4. 应用 curl 命令拜访 HTTP 触发器。请将上面命令中的 11905929798* 替换为您的阿里云账号 ID。
curl https://11905929********.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/search_ip/search_ip/
命令执行后果如下所示:
在返回后果中能够看到,在应用 HTTP 触发器的时候,能够默认传递一些参数,包含 Path,Queries 以及 Headers,Method 等,其中有一个参数是 clientIP,该字段的值就是客户端的 IP 地址,咱们能够通过该地址来确定客户端的 IP 地址。
接下来咱们将利用 clientIP 字段开发 IP 查问工具。
步骤五:开发 IP 查问工具
1. 参考以下步骤批改 index.js 文件内容。
a. 将 index.js 文件内容清空。
cat /dev/null > index.js
b. 应用 vim 关上 index.js 文件。
vim index.js
c. 按下 i 键进入 vim 的编辑模式,在文件中新增以下内容。
var getRawBody = require('raw-body')
module.exports.handler = function (request, response, context) {getRawBody(request, function (err, data) {var respBody = new Buffer.from("您的 IP 是:" + request.clientIP);
response.setStatusCode(200)
response.setHeader('content-type', 'text/html')
response.send(respBody)
})
};
d. 按下 esc 键进入命令模式,输出 :wq 保留并退出 vim。
2. 执行 fun deploy -y 命令重新部署利用到函数计算服务。
fun deploy -y
命令执行后果如下所示:
3. 应用 curl 命令拜访 HTTP 触发器。请将上面命令中的 11905929798* 替换为您的阿里云账号 ID。
curl https://11905929798*****.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/search_ip/search_ip/
命令执行后果如下所示: