共计 3717 个字符,预计需要花费 10 分钟才能阅读完成。
来自 Serverless,向世界说句你好。
背景常识
什么是 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 具备的以下劣势:
您无需洽购和治理服务器等基础设施,运维成本低。
您只需专一业务逻辑的开发,应用函数计算反对的开发语言设计、优化、测试、审核以及上传本人的利用代码。
以事件驱动的形式触发利用响应用户申请。与阿里云对象存储 OSS、API 网关、日志服务和表格存储等服务无缝对接,帮忙您疾速构建利用。例如,通过 OSS 解决图片和视频的存储问题,当有新数据写入您的 OSS 资源时,主动触发函数解决数据。
提供日志查问、性能监控和报警等性能疾速排查故障。
毫秒级别弹性伸缩,疾速实现底层扩容以应答峰值压力。
按需付费,反对百毫秒级别免费。只需为理论应用的计算资源付费,适宜有显著波峰波谷的用户拜访场景。
总而言之,Serverless 是在传统容器技术和服务网格上倒退起来,更多指的是后端服务与函数服务的联合。对于开发者而言,可能将更多的精力关注在函数服务上,更偏重让使用者只关注本人的业务逻辑即可。
同时,Serverless 也是云计算倒退到肯定阶段的必然产物。作为普惠科技,云计算倒退的指标肯定是绿色科技和公众科技的产品 —— 而 Serverless 可能很好的诠释这些:最大水平利用资源、缩小闲暇资源节约;同时升高学习老本和应用老本。
Serverless 架构被称为是 ” 真正实现了当初云计算的指标 ”,这种说法尽管有些夸大,然而也从另一方面体现出了大家对 Serverless 架构的期盼和信念。自 2012 年被提出至今,Serverless 架构也是经验了 7 年工夫,正在逐步的走向成熟。
开明并进入到阿里云 Serverless 产品
1. 通过阿里云首页,找到 ” 产品 ”->” 弹性计算 ”->”Serverless”->” 函数计算 FC”
2. 点击进入函数计算 FC 的页面
- 点击治理控制台按钮,并进行账号注册 / 登陆
4. 针对首次应用的用户须要进行函数计算服务的开明,须要浏览协定,并且批准(点击 1 中的抉择框),而后点击右下角的立刻开明即可
5. 进入控制台之后,如果右上角有“体验新版控制台”按钮,请点击该按钮,如果没有该按钮,能够跳过本步骤
创立服务和函数
1. 抉择左侧的服务及函数之后,能够先进行服务的创立
- 依照页面揭示,进行服务名称设定,而后能够选择性的进行形容信息填写、日志服务和链路追踪性能开启,最初点击确定即可
- 实现服务的创立之后,能够进行函数的创立
- 须要咱们天蝎函数名,抉择一个本人相熟的编程环境,以及设置一个内存规格,最初点击创立即可
- 创立之后能够在代码框中,编写代码,例如默认的 Hello World
# -*- coding: utf-8 -*-
import logging
# To enable the initializer feature (https://help.aliyun.com/document_detail/158208.html)
# please implement the initializer function as below:# def initializer(context):
# logger = logging.getLogger()
# logger.info('initializing')
def handler(event, context):
logger = logging.getLogger()
logger.info('hello world')
return 'hello world'
6. 当代码有变更之后,零碎会进行揭示,咱们须要部署代码
- 部署代码之后,咱们能够进行测试函数
测试实现之后,能够看到最终的return
将会作为返回后果进行展现,两头的logger.info
将会作为日志输入进行展现
创立一个能够通过网址拜访的 Hello World
在刚刚的流程中,咱们创立的是一个通过其余触发器触发函数的案例,此时咱们能够创立一个通过 HTTP 申请触发函数的案例。
此时须要留神的几个点:
什么是触发器:https://help.aliyun.com/docum…
什么是 HTTP 触发器:https://help.aliyun.com/docum…
创立一个新的函数,并在创立函数的时候,抉择“通过 HTTP 申请触发”
- 创立实现之后,与刚刚的代码不同的是,这个 Http 触发的代码包含了一些 Http 的信息
# -*- coding: utf-8 -*-
import logging
HELLO_WORLD = b'Hello world!\n'
# To enable the initializer feature (https://help.aliyun.com/document_detail/158208.html)
# please implement the initializer function as below:# def initializer(context):
# logger = logging.getLogger()
# logger.info('initializing')
def handler(environ, start_response):
context = environ['fc.context']
request_uri = environ['fc.request_uri']
for k, v in environ.items():
if k.startswith('HTTP_'):
# process custom request headers
pass
# do something here
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return [HELLO_WORLD]
对于不同语言的 HTTP 触发办法案例能够参考文档:https://help.aliyun.com/docum…
在文档最上面有绝对应的案例链接:
- 创立实现函数之后,咱们能够进行触发器查看
- 能够看到,这个函数下又一个 HTTP 触发器,并附带一个申请地址,咱们能够通过 POSTMAN 等工具,对这个地址进行测试:
额定阐明:如果在浏览器中间接关上申请地址,将会以附件的形式下载响应。这是因为 Http 触发器会主动在响应头中增加 Content-Disposition: attachment 字段。开发者能够应用自定义域名防止该问题。自定义域名文档:https://help.aliyun.com/docum…
至此咱们实现了通过不同事件触发函数计算的 Hello World 案例
更多场景体验 至 https://developer.aliyun.com/…