专栏首页KaliArchServerless初探
原创

Serverless初探

一、背景

1.1 Serverless是什么:

无服务器计算是指开发者在构建和运行应用时无需管理服务器等基础设施,应用被解耦为细粒度的函数,函数是部署和运行的基本单位。用户只为实际使用的资源付费。这些代码完全由事件触发(event-trigger),平台根据请求自动平行调整服务资源,拥有近乎无限的扩容能力,空闲时则没有任何资源在运行。代码运行无状态,可以轻易实现快速迭代、极速部署。

1.2 Serverless的特点:

以函数为扩展单位,虚拟化运行时环境(Runtime)。是现有计算资源的最小单位,具有完全自动、一键部署、高度可扩展等特点。

1.3 Serverless的作用:

  • 低成本

运营成本,Serverless将用户的服务器,数据库,中间件委托于BaaS/FaaS,用户将不再参与基础设施及软件的维护,尤其在大规模的集群运营上成本大幅度降低。

开发成本,对比IaaS或者PaaS平台的服务器或者操作系统,Serverless的架构中,用户操作的是服务化的组件比如存储服务,授权服务等,可以缩短开发周期,降低开发难度。

  • 按需计费

Serverless/FaaS区别于IaaS/PaaS预先分配计算资源的计费方式,其计费方式通常是按请求次数及运行时间,一方面可以最大程度利用资源,另一方面真正的按需计费可以降低用户的资源成本。

  • 弹性伸缩

Serverless架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。

  • “绿色”计算

据统计,商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出,本质上这是对社会资源的一种浪费。而在Serverless架构下,提供商将提供更细力度的计算能力最大限度满足实时需求,资源利用率将大幅度提升,可以认为相对IaaS与PaaS Serverless/FaaS是一种 “绿色” 计算。

  • NoOps

运维的发展经历了人肉运维,自动化运维,DevOps,AiOps等,而Serverless带来一种新的运维模式,这种模式下用户需要管理的只有Code可以认为NoOps。

1.4 演进历史

云计算的发展从IaaS,PaaS,SaaS,到最新的BaaS,FasS,在这个趋势中serverless(去服务器化)

计算资源发展Physical->Virtualisation->Cloud Compute->Container->Server-less

1.5 各厂商产品

目前各大公有云厂商都上线了自己的serverless,如:

二、简单示例

2.1 示例背景

目前有客户有需求对数量众多的测试环境想通过非工作时间进行关机操作,每天早上工作时间提前进行开机,如此如果人工来操作重复周期性的操作显然非常不合适,但是共有云目前没有提供这种对服务器定时开关机操作的产品功能,只能利用其API来进行,但是需要一台具备公网能力的服务器来发起API调用请求,此时刚好利用Serverless小试牛刀,本次示例利用腾讯无服务器云函数(CFS)简单示例下Serverless的一小部分功能,来实现此需求。

2.2 创建函数

无服务器云函数入门可以参考官网文档:入门概述

  • 选择地域创建函数服务
  • 进行函数配置

填写函数名称,选择程序函数运行的环境,选择内存及函数运行的超时时间,最后可以在高级配置内,配置函数环境变量,在此我将腾讯云的ak配置在环境变量中以便后续调用。

注意:在配置函数中如果选择VPC,编写的函数是具有出公网调用的能力,对应的VPC需要具备此能力。

  • 编写功能函数代码

在此我利用腾讯云的CVM的SDK进行了云服务器的停止与开机操作,代码的输入支持在线编程,以及本地zip上传和cos上传代码

注意:如果为本地代码调用的二进制或可执行文件,需要打包一并上传。

完整启动代码(多个CVM可以写入event的json instance列表内)

# -*- 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变量,需要自己函数内部指定在创建函数配置时进行变量配置。

2.3 查看日志

函数返回值部分将显示运行结果,还将显示代码中 return 语句返回的函数执行结果。

运行信息部分将显示函数运行的时间、内存等信息。

日志部分将显示函数运行时生成的日志,包括用户代码中的打印语句、函数运行失败trace stack等,将会写入至日志模块。

2.4 官网示例

腾讯云官网为我们了解及如何使用CFS,提供了不同的触发条件示例及最佳实践,可以进行进一步了解:最佳实践

三、思考

  • 在此只是最简单的试用了一下CFS,其更强大的功能及优势在云计算的潮流下后期会越显明显,适用场景众多,业务进行拆分,分工更加精细。截取官网的一张最常用的移动与WEB应用图,业务各模块分离,函数具有弹性伸缩,前端入口为各业务模块的API网关,配合CDB/COS完成总体架构。
  • 无服务器云函数想要后期更快的发展,需要进行业务逻辑的精细梳理和各函数调用,其次需要云厂商多个性化定制服务,已经自己需要完善生态,最少无服务器云函数支持自家云上各产品。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【玩转腾讯云】Serverless+CVM实战

    写过一篇Serverless初探,后期结合Tencent Serverless Toolkit for VS Code的IDE插件,刚好借此使用下,相较于之前没...

    KaliArch
  • Python利用sphinx构建个人博客

    KaliArch
  • Python实现翻译小工具

    利用Requests模块获取有道词典web页面的post信息,BeautifulSoup来获取需要的内容,通过tkinter模块生成gui界面。

    KaliArch
  • 《税务信息系统网络日志留存工作指引》解读

    根据2017年正式实施的《中华人民共和国网络安全法》中第二十一条规定,网络运营者应当按照网络安全等级保护制度的要求,采取监测、记录网络运行状态网络安全事件的技术...

    安恒信息
  • 见者有份!喜迎新年,coding贺卡领代金券

    农历新年即将到来, 对于新的一年,我们充满了期待。 从前车马很慢,书信很远, 一张小小的贺卡就能承载很多情谊。 想制作高大上的专属贺卡送给小伙伴? 腾讯云教你...

    腾讯云数据库 TencentDB
  • python: pop函数

    JNingWei
  • Bootstrap HTML编码规范

    语法 用两个空格来代替制表符(tab) -- 这是唯一能保证在所有环境下获得一致展现的方法。 嵌套元素应当缩进一次(即两个空格)。 对于属性的定义,确保全部使用...

    企鹅号小编
  • JVM优化之逃逸分析与分配消除

    在这期文章中,我们将要深入介绍一下逃逸分析(escape analysis)技术,这是JVM最有意思的优化手段之一。逃逸分析是JVM的一项自动分析变量作用域的技...

    哲洛不闹
  • 关于5G时延的深度解读,非常详尽!

    双向延迟(Round Trip Time, RTT),指的是信息从发送方到达接收方,加上接受方发信息给发送方所花费的总时间。双向延迟在工程中更加常见,因为我们可...

    鲜枣课堂
  • CodeReview常见代码问题

    空值恐怕是最容易出现的地方之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上结果的...

    三哥

扫码关注云+社区

领取腾讯云代金券