1

前言

近年来,IT技术的更新迭代速度非常快,每个时间点都有典型的代表名词以及概念,就目前而言,人工智能领域中的机器学习、深度学习、强化学习等名词和概念就非常热,同时区块链、物联网等技术发展也是异常火热。在云计算领域,有这样一个技术被众多云厂商认为是“风口项目”,甚至可以颠覆现有云计算中的某些格局,为此包括AWS、谷歌以及腾讯云、阿里云等在内的云厂商,都为此投入了重大人力以及精力进行相关产品建设,它就是Serverless技术。

单纯的和大家分享什么是Serverless,可能不是很符合我的个人性格,所以,我将会在这个专栏,通过实践,和大家一起学习Serverless,没有华丽的语言和修饰,没有夸张的修辞和描述,一切建立在生产,实践,工程之上。

入门Serverless云函数

我们可以打开腾讯云云函数:

在这里点进去,新建一个函数:

建立函数的时候,我们可以填写一个函数名字,然后选择运行环境:

在这里,大家可以看到,这里有Python(2.7/3.6),Nodejs(6.10/8.9),PHP(5.6/7.2)以及Java,Golang等语言,是不是有一点小激动,主流的编程语言,这里都可以用,也就是说,无论你是什么语言爱好者,只要在这个列表中,那么OK,你就可以愉快的来使用Serverless架构。

填写好相关信息,点击下一步即可到写代码的地方:

看一下这个代码很简单:

    # -*- 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的函数入口。再看一下描述:

可以看到,这里就是一个执行方法,以Python语言为例:



index.main_handler

这里面index就是文件名,main_handler就是入口方法。

我们点击完成,来体验一下:

选择函数代码:

点击测试,就可以愉快的体验:

可以看到,这里的测试结果,已经输出了:

"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")

输出结果:

由此,我们可以对应的看出两个神秘参数的真实身份:

初步判断,event里面是一些入参内容,可能是用户指定,而context则是函数执行的上下文,包括一些环境变量、函数信息等。

通过腾讯云的文档:

可以看到这样的描述:

由此可见,我们的猜测,貌似没毛病。

接下来,我们来做一个神奇的操作:让Hello World成为不一样的Hello World!

选择这样的API网关触发器:

保存之后可以看到这样一个地址:

我们打开网址:

看到了什么?是的,看到了我们刚才的你好世界。改变我们的程序代码:



# -*- coding: utf8 -*-
import json
def main_handler(event, context):
    return("I love Serverless! So cool!")

保存之后,刷新刚才的网页:

简单的配置,就让我们的你好世界,成了web版的你好世界,要知道,这是我们Serverless的入门第一节课,我们就可以做一个网页了!

百度一下,如何配置一个Web,有超级多的教程,但是无论如何apache,nginx的安装和配置貌似都是需要的,但是在Serverless架构下:你可以点点点。

非常简单的,我们完成了一你好世界,非常简单的,我们做了一个网页,非常简单的....

总结

So cool!

是的,云函数,你可以当作是一个非常有趣项目,他是云计算的一种表现形式,也被很多人称之为真正的云计算,用户真的可以不再关注服务器资源:如何配置环境,如何安装服务器软件,如何......用户只需要关注自己的代码,就可以实现自己想要的一起,这是一个你好世界,更是在向Serverless架构,云计算问好,这是一个你好世界,更是一个不一样的你好世界。

通过Serverless架构,你可以更简单,更快速的创建自己的项目,完成自己的工作,怎么样,想不想和我一起来Serverless?



anycodes
7 声望8 粉丝

浙江大学软件工程硕士毕业,现腾讯科技Serverless架构后台研发,Serverless Framework中国开发者之一,先后开发维护Plugin和多个Components,著有图书《Serverless架构》,是Serverless忠实粉丝和“拓荒者”