无服务器计算是指开发者在构建和运行应用时无需管理服务器等基础设施,应用被解耦为细粒度的函数,函数是部署和运行的基本单位。用户只为实际使用的资源付费。这些代码彻底由事件触发(event-trigger),平台根据请求自动平行调整服务资源,拥有近乎无限的扩容能力,空闲时则没有任何资源在运行。代码运行无状态,能够轻易实现快速迭代、极速部署。html
以函数为扩展单位,虚拟化运行时环境(Runtime)。是现有计算资源的最小单位,具备彻底自动、一键部署、高度可扩展等特色。前端
运营成本,Serverless将用户的服务器,数据库,中间件委托于BaaS/FaaS,用户将再也不参与基础设施及软件的维护,尤为在大规模的集群运营上成本大幅度下降。 开发成本,对比IaaS或者PaaS平台的服务器或者操做系统,Serverless的架构中,用户操做的是服务化的组件好比存储服务,受权服务等,能够缩短开发周期,下降开发难度。数据库
Serverless/FaaS区别于IaaS/PaaS预先分配计算资源的计费方式,其计费方式一般是按请求次数及运行时间,一方面能够最大程度利用资源,另外一方面真正的按需计费能够下降用户的资源成本。编程
Serverless架构一个显而易见的优势即“横向扩展是彻底自动的、有弹性的、且由服务提供者所管理”。json
据统计,商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出,本质上这是对社会资源的一种浪费。而在Serverless架构下,提供商将提供更细力度的计算能力最大限度知足实时需求,资源利用率将大幅度提高,能够认为相对IaaS与PaaS Serverless/FaaS是一种 “绿色” 计算。bash
运维的发展经历了人肉运维,自动化运维,DevOps,AiOps等,而Serverless带来一种新的运维模式,这种模式下用户须要管理的只有Code能够认为NoOps。服务器
目前各大公有云厂商都上线了本身的serverless,如:架构
目前有客户有需求对数量众多的测试环境想经过非工做时间进行关机操做,天天早上工做时间提早进行开机,如此若是人工来操做重复周期性的操做显然很是不合适,可是共有云目前没有提供这种对服务器定时开关机操做的产品功能,只能利用其API来进行,可是须要一台具有公网能力的服务器来发起API调用请求,此时恰好利用Serverless小试牛刀,本次示例利用腾讯无服务器云函数(CFS)简单示例下Serverless的一小部分功能,来实现此需求。less
无服务器云函数入门能够参考官网文档:入门概述运维
填写函数名称,选择程序函数运行的环境,选择内存及函数运行的超时时间,最后能够在高级配置内,配置函数环境变量,在此我将腾讯云的ak配置在环境变量中以便后续调用。 注意:在配置函数中若是选择VPC,编写的函数是具备出公网调用的能力,对应的VPC须要具有此能力。
在此我利用腾讯云的CVM的SDK进行了云服务器的中止与开机操做,代码的输入支持在线编程,以及本地zip上传和cos上传代码 ** 注意**:若是为本地代码调用的二进制或可执行文件,须要打包一并上传。
# -*- coding: utf8 -*-
# _auth:kaliarch
from tencentcloud.common import credential
from tencentcloud.cvm.v20170312 import cvm_client, models
import os
import logging
# 腾讯云secretid
SecretId = os.getenv('secretid')
# 腾讯云secretkey
SecretKey = os.getenv('secretkey')
# 事件
def cmvstart_handler(event, context):
# 定义操做的CVM地域及实例ID
event = {
"region": "ap-shanghai",
"instanceids": ["ins-kqf9os9x"]
}
logger = logging.getLogger()
cred = credential.Credential(SecretId, SecretKey)
Region = event['region']
InstanceIds = event['instanceids']
cvmoper = cvm_client.CvmClient(cred, Region)
request = models.StartInstancesRequest()
request.InstanceIds = InstanceIds
logger.info('requests:%s' % request)
# 操做CVM启动
response = cvmoper.StartInstances(request)
result_content = response.to_json_string()
logger.info('result_content')
print(result_content)
return result_content
复制代码
中止的函数与此一致,在此只是抛砖引玉,其余的重启,中止,已经对其余云产品的操做等也均可以利用此来完成。
能够利用在线函数测试功能,对功能函数进行测试 注意:在线测试的数据格式必须为json格式,其传入为event变量中
目前腾讯云支持图中的四种触发方式,在此示例中适用于定时任务进行触发
定时任务能够选择自定义配置,和Linux下的crond服务器配置一致。 注意:定时任务形式触发不会传入event变量,须要本身函数内部指定在建立函数配置时进行变量配置。
函数返回值部分将显示运行结果,还将显示代码中 return 语句返回的函数执行结果。 运行信息部分将显示函数运行的时间、内存等信息。 日志部分将显示函数运行时生成的日志,包括用户代码中的打印语句、函数运行失败trace stack等,将会写入至日志模块。
腾讯云官网为咱们了解及如何使用CFS,提供了不一样的触发条件示例及最佳实践,能够进行进一步了解:最佳实践