专栏首页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 初探

    点击领取新用户礼包-> 选择您最常用的编程语言,体验 Serverless Demo >>

    腾讯云serverless团队
  • 腾讯云 Serverless 应用初探 —— 印象笔记

    印象笔记是最具影响力的知识管理工具,它既是管理个人信息的智能助手、同时也是提高团队效率的企业工具、富集高价值信息的内容平台、优秀知识和信息相关智能硬件的生产商...

    腾讯云serverless团队
  • Serverless架构实践初探|洞见

    随着云计算技术的进步,软件系统的架构方式也因此发生着一些变化,其中Serverless架构就是这里的一个典型的例子。 ? (图片来自:http://t.cn/R...

    ThoughtWorks
  • 用户体验测评笔记:OpenFaaS和腾讯云Serverless

    最近看到《用 Serverless 架构部署 TensorFlow 模型推理函数》的活动,对 Serverless 非常感兴趣,本着学习的心态初步探索两个 S...

    腾讯云serverless团队
  • Serverless教父惊现北京798,首次对话中国开发者,大胆提问,周日见!

    由腾讯主办的2020 Techo Park 开发者大会将于本周末在北京798召开。Serverless 技术作为云计算重要的前沿领域,将于本周日(12月20日...

    腾讯云serverless团队
  • 腾讯云 Severless 项目开发和灰度发布实践之路

    Serverless作为一种新的开发模式,吸引我们众多开发者想一探究竟,然而现在Serverless开发缺乏相关的文档指引,而不能很好的完成开发、调试和部署,接...

    邓愉悦
  • 腾讯云+社区技术沙龙预告

    在很多外行人的眼里,程序员就是神一样的存在。他们全年996,节假日无休,不仅Python、Java、PHP要样样精通,还要会修电脑修音响修手机,做前端要懂运维,...

    Python中文社区
  • Kubernetes对阵Serverless,未来究竟是谁的?

    近两年里,kubernetes的风头之盛可谓一时无两,在谷歌和大量开源社区的推动下,k8s技术不仅把容器的大规模应用彻底激活,提升了诸多编程语言的适用环境,更重...

    猿天地
  • 腾讯Techo开发者大会Serverless阵容热炸,云计算教父级大咖直播连线,马上预约!

    12月19日至20日,由腾讯主办的2020 Techo Park开发者大会将于北京召开。本次大会将邀请全球超过200位顶级技术专家来到现场,和数千位参会者就云...

    腾讯云serverless团队

扫码关注云+社区

领取腾讯云代金券