Serverless: 你好,世界
前言
近年来,IT技术的更新迭代速度非常快,每个时间点都有典型的代表名词以及概念,就目前而言,人工智能领域中的机器学习、深度学习、强化学习等名词和概念就非常热,同时区块链、物联网等技术发展也是异常火热。在云计算领域,有这样一个技术被众多云厂商认为是“风口项目”,甚至可以颠覆现有云计算中的某些格局,为此包括AWS、谷歌以及腾讯云、阿里云等在内的云厂商,都为此投入了重大人力以及精力进行相关产品建设,它就是Serverless技术。
单纯的和大家分享什么是Serverless,可能不是很符合我的个人性格,所以,我将会在这个专栏,通过实践,和大家一起学习Serverless,没有华丽的语言和修饰,没有夸张的修辞和描述,一切建立在生产,实践,工程之上。
入门Serverless云函数
我们可以打开腾讯云云函数:
![](https://img.haomeiwen.com/i17600915/04e166ffb715a90b.png)
在这里点进去,新建一个函数:
![](https://img.haomeiwen.com/i17600915/41bf3fff1db77869.png)
建立函数的时候,我们可以填写一个函数名字,然后选择运行环境:
![](https://img.haomeiwen.com/i17600915/5e0216a108f7a426.png)
在这里,大家可以看到,这里有Python(2.7/3.6),Nodejs(6.10/8.9),PHP(5.6/7.2)以及Java,Golang等语言,是不是有一点小激动,主流的编程语言,这里都可以用,也就是说,无论你是什么语言爱好者,只要在这个列表中,那么OK,你就可以愉快的来使用Serverless架构。
![](https://img.haomeiwen.com/i17600915/5db9b64e7b875f2b.png)
填写好相关信息,点击下一步即可到写代码的地方:
![](https://img.haomeiwen.com/i17600915/0267378ac75d2272.png)
看一下这个代码很简单:
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
print("Received event: " + json.dumps(event, indent = 2))
print("Received context: " + str(context))
print("Hello world")
return("Hello World")
整个代码内容,只有一个函数,就是main_handler,动脑一下,都可以猜到,这个一定就是腾讯云Serverless的函数入口。再看一下描述:
![](https://img.haomeiwen.com/i17600915/560a8e80e9ad81f4.png)
可以看到,这里就是一个执行方法,以Python语言为例:
index.main_handler
这里面index就是文件名,main_handler就是入口方法。
我们点击完成,来体验一下:
![](https://img.haomeiwen.com/i17600915/fe288ac7e609189a.png)
选择函数代码:
![](https://img.haomeiwen.com/i17600915/25f22d43716ec260.png)
点击测试,就可以愉快的体验:
![](https://img.haomeiwen.com/i17600915/8c4c4bd8e13a9a70.png)
可以看到,这里的测试结果,已经输出了:
"Hello World"
这说明,我们已经成功跑起来了云函数:你好,世界
超乎想象
刚刚,我们简单的运行了一下函数,我们有没有发现一件事情:
- 我们没有配置环境
- 我们没有安装Python环境
这貌似是一个在线的编辑器?
传统情况下,我们要写一个python程序,我们需要下载Python软件,然后安装,配置环境,才可以编写程序,而就在刚刚,我们貌似,在线编写了一个软件,并且运行了?
是的,Serverless架构实际上可以看作是FaaS+BaaS,其中FaaS就可以看成是函数计算,而BaaS就是后端的服务。我们目前体验的这种在线的编程运行过程,就是FaaS重的一部分。
说完这里,我们再来看看我们的代码和输出的结果:
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
print("Received event: " + json.dumps(event, indent = 2))
print("Received context: " + str(context))
print("Hello world")
return("Hello World
"Hello World"
日志:
START RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a
Event RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a
Received event: {
"key1": "test value 1",
"key2": "test value 2"
}
Received context: {'memory_limit_in_mb': 128, 'time_limit_in_ms': 3000, 'request_id': '2ba40ad6-1806-11ea-9ec2-52540075364a', 'environ': ';SCF_NAMESPACE=default', 'function_version': '$LATEST', 'function_name': 'hello_world', 'namespace': 'default', 'get_remaining_time_in_millis': <function main.<locals>.<lambda> at 0x7f063a9f9488>}
Hello world
END RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a
Report RequestId: 2ba40ad6-1806-11ea-9ec2-52540075364a Duration:0.34ms Memory:128MB MaxMemoryUsed:19.5039MB
我们通过这样一个对比,我们可以看到这样一个对应关系:
行数4的代码:
print("Received event: " + json.dumps(event, indent = 2))
输出结果:
Received event: {
"key1": "test value 1",
"key2": "test value 2"
}
行数5的代码:
print("Received context: " + str(context))
输出结果:
Received context: {'memory_limit_in_mb': 128, 'time_limit_in_ms': 3000, 'request_id': '2ba40ad6-1806-11ea-9ec2-52540075364a', 'environ': ';SCF_NAMESPACE=default', 'function_version': '$LATEST', 'function_name': 'hello_world', 'namespace': 'default', 'get_remaining_time_in_millis': <function main.<locals>.<lambda> at 0x7f063a9f9488>}
行数6的代码:
print("Hello world")
输出结果:
Hello world
行数7的代码:
return("Hello World")
输出结果:
![](https://img.haomeiwen.com/i17600915/0f8841f5e877a34b.png)
由此,我们可以对应的看出两个神秘参数的真实身份:
![](https://img.haomeiwen.com/i17600915/ef0cc52006d0b566.png)
初步判断,event里面是一些入参内容,可能是用户指定,而context则是函数执行的上下文,包括一些环境变量、函数信息等。
通过腾讯云的文档:
可以看到这样的描述:
![](https://img.haomeiwen.com/i17600915/a303ff199475407f.png)
由此可见,我们的猜测,貌似没毛病。
接下来,我们来做一个神奇的操作:让Hello World成为不一样的Hello World!
![](https://img.haomeiwen.com/i17600915/83f9fb2797a67de8.png)
选择这样的API网关触发器:
![](https://img.haomeiwen.com/i17600915/3aa8d78afedbe430.png)
保存之后可以看到这样一个地址:
![](https://img.haomeiwen.com/i17600915/24f79e35d708184a.png)
我们打开网址:
![](https://img.haomeiwen.com/i17600915/dacfc7efd375b25c.png)
看到了什么?是的,看到了我们刚才的你好世界。改变我们的程序代码:
# -*- coding: utf8 -*-
import json
def main_handler(event, context):
return("I love Serverless! So cool!")
![](https://img.haomeiwen.com/i17600915/95c03a16f51df917.png)
保存之后,刷新刚才的网页:
![](https://img.haomeiwen.com/i17600915/4dd0e74961db53c9.png)
简单的配置,就让我们的你好世界,成了web版的你好世界,要知道,这是我们Serverless的入门第一节课,我们就可以做一个网页了!
![](https://img.haomeiwen.com/i17600915/a0b5a8ce213c6b9d.png)
百度一下,如何配置一个Web,有超级多的教程,但是无论如何apache,nginx的安装和配置貌似都是需要的,但是在Serverless架构下:你可以点点点。
非常简单的,我们完成了一你好世界,非常简单的,我们做了一个网页,非常简单的....
总结
So cool!
是的,云函数,你可以当作是一个非常有趣项目,他是云计算的一种表现形式,也被很多人称之为真正的云计算,用户真的可以不再关注服务器资源:如何配置环境,如何安装服务器软件,如何......用户只需要关注自己的代码,就可以实现自己想要的一起,这是一个你好世界,更是在向Serverless架构,云计算问好,这是一个你好世界,更是一个不一样的你好世界。
通过Serverless架构,你可以更简单,更快速的创建自己的项目,完成自己的工作,怎么样,想不想和我一起来Serverless?
![](https://img.haomeiwen.com/i17600915/60d9330c6b40f88a.png)