赞
踩
昨天,栈长应腾讯云小伙伴邀请参加了Techo Day 技术开放日的线上活动,这一期的主题是”轻量级云开发与云应用“,包括轻量级应用服务器、容器和中间件、云开发、微服务、大数据、安全等领域的应用和原理等。
这其中有一项技术讲解——Serverless让我感触比较深。这门课打破了我对软件开发领域的定义。
在现代越来越强大云计算加持下,我们大量运用了一些云组件,比如:
IaaS(基础设施即服务)
PaaS(平台即服务)
SaaS(软件即服务)
没错,即使云服务应用再多,我们也仅限在 "SaaS(软件即服务)" 层面的应用。
但这门课程提到的,传统的 "SaaS(软件即服务)" 不再是颗粒度最小的云服务了,取而代之的是,你可以理解为 "方法级别" 的云服务,即可以以方法作为独立载体被部署在云上,颗粒度更小、灵活性更强,可以获得尽可能大的弹性。
大部分人看到 Serverless 仍是一知半解,所以我想有必要给大家做个专题分享,包括 Serverless 的正确理解及实现方案,以及腾讯云的 Serverless 是如何应用的。
现在 Serverless 很火啊,到处都是,包括 Spring 都已经支持 Serverless 适配了,栈长当初看到这个名词的时候以为是指 "无服务器",相信很多人也会这样以为,不过不要理解错了,栈长在这里扫个盲。
Serverless 是指 "无服务器架构",这里的 "无服务器" 并不是指程序不需要服务器运行,而是指我们的开发工作不需要关注服务器底层的资源,比如我们部署应用时,经常遇到以下一些服务器及基础设施的相关工作:
应用需要用多少台服务器?
应用需要用多少带宽?
应用需要用什么操作系统?
应用需要运行多少个实例?
应用需要用到什么容器,怎么调度?
等等……
这些工作在传统的业务中需要运维人员和开发人员一起协调完成,而 Serverless 的到来,我们通通都不用管了,Serverless 帮我们去完成这些,程序员只需要关注业务逻辑本身即可。
来看 Spring Serverless 的一张图就明白了:
Serverless 只需要关注一件事:函数!!
这里的 FaaS 就是 Serverless 最基本的一种表现形式。
Serverless 具有资源编排、自动伸缩、事件驱动等能力,覆盖编码-调试-测试-部署等全生命周期,减少维护基础设施的成本和风险,利用云的能力可以更迅速的扩展。
我们来看下面这张图:
我们可以看到,Serverless 始终能满足日益增长的需求,并能对资源做到灵活动态调整,一方面能在闲时减少资源以避免浪费,另一方面,即使流量溢出也能应对。
这里总结下 Serverless 的优势:
高可用: 如多活、容灾、扩容、备份等能力,这些都不在话下;
高弹性: 以方法为部署载体,比微服务更微,获得极致弹性;
轻运维: 免去大量的运维工作,专注核心开发业务,大大节省工作量;
等等……
Serverless 经常不会单独出现,还有以下两个衍生概念,也是目前最常见的 Serverless 实现方案:
FaaS(函数即服务) + BaaS(后端即服务)
Function as a Service(FaaS)函数即服务,这也是 Serverless 的基石,它是比 SaaS(软件即服务)/ BaaS(后端即服务) 更小的载体,每一个函数就是一个服务,函数之间相互独立。
我们来看一张基于 FaaS 的架构图:
基于 FaaS 的服务器底层的关系从下到上依次是这样的:
物理服务器(IaaS) > 虚拟机(PaaS) > 容器(PaaS) > 函数(FaaS)
函数(也可说方法)颗粒度更小,可以帮助应用获得极致弹性。
Backend as a Service(Baas)后端即服务,即为应用提供后端云服务,可以理解为 PaaS 和 SaaS 之间的一种服务,它也是 Serverless 架构中的一种表现形式,大量开箱即用的后端云上功能提升研发效能。
后端服务 BaaS 并不是必须的,FaaS 和 BaaS 都属于 Serverless 架构不同的表现形式,也可以说 FaaS 和 BaaS 是 Serverless 架构,它们是相辅相成的。
腾讯云中的 Serverless 是指 Serverless Cloud Function,简称:SCF,也可以叫 "云函数",是腾讯云提供的 Serverless 服务,腾讯云用户无需购买云服务器和虚拟机,代码即可在腾讯云基础设施上弹性、安全地运行,支持所有主流的编程语言。
官方文档:
https://cloud.tencent.com/document/product/583
腾讯云函数的魅力如下:
栈长了解到的情况如下:
按量付费: 没有用户访问时不花钱,可节约服务器开销 30%;
超低运维成本: 无需学习服务器知识,大幅度降低运维成本;
弹性伸缩: 自动弹性伸缩,上不封顶,下可到 0;
超高并发: 每秒最高支持 10 万并发请求数;
整个请求逻辑如下:
虽然我们只需要写云函数,但前面会有一道 API 网关,是云函数的主要入口,它提供 HTTP 接口、参数校验、鉴权、限流、自定义域名、自动化文档等功能,这也是对云函数的强大支撑。
结合 API 网关,腾讯云函数提供基于小程序,H5,WEB 服务,微服务,REST API 等通用 HTTP 解决方案:
云函数无处不在,支持常用的、主流的客户端载体,现在都支持上了云函数。
这也让我联想到的一个云函数的优势:
比如我们写个 JavaScript 函数部署到了云端,然后客户端再调用该云函数,而不是像传统软件开发将函数直接内嵌在客户端代码中,这样在安全方面也能杜绝前端代码被破译的可能。
所以,用上云函数真香!
Serverless 应用中心:
https://cloud.tencent.com/product/sls
随着团队和业务规模的发展,后端服务逐渐从单体架构演变成微服务架构,微服务架构提供敏捷开发、灵活部署和高扩展性的同时,也增加了服务治理和运维的复杂度,提高了技术门槛。
弹性微服务(Tencent Cloud Elastic Microservice,TEM)是面向微服务应用的 Serverless 平台,实现 Serverless 与微服务的完美结合,提供开箱即用的微服务解决方案,提供应用托管、服务注册发现、微服务治理、多维度监控等能力,支持 Zookeeper、Nacos、Consul 等注册中心。
产品地址:
https://cloud.tencent.com/product/tem
我们来看官网的架构图:
通过它我们可以快速构建微服务应用,只需要实现我们自己的微服务即可(灰色区域),这样就能大幅提升运维效率,降低服务治理的复杂度与技术门槛,有更多的时间去聚焦核心业务本身。
栈长也第一时间拿到了腾讯云小伙伴给我的实验资格,终于体验了一把 Serverless 的魅力!
TCCLI 是管理腾讯云资源的统一工具,可以快速调用腾讯云 API 来管理您的腾讯云资源。
官方文档:
https://cloud.tencent.com/document/product/440/6176
需要安装 Python 环境和 pip 工具,Python 版本必须为 2.7 及以上版本。
这里我们使用使用yum安装Python3:
yum install python3 -y
安装 Python3 会同时安装一些相关的依赖包,比如 pip。
再执行下面的命令安装 TCCLI:
sudo pip3 install tccli
安装完成之后,执行以下命令,检测是否安装成功:
tccli --version
TCCLI 安装成功了。
TCCLI 提供了一个自动补全的功能,可以使用下面的命令进行启用:
echo "$(which tccli_completer)" && complete -C "$(which tccli_completer)" tccli
点击登录腾讯云控制台,开通云函数服务:
完成以后,自动进入概览控制面板,这里可以看到各种 SCF 应用的调用统计信息:
首先要获取访问密钥,访问密钥是构建腾讯云 API 请求的重要凭证,调用任何一个腾讯云 API 都需要提供访问密钥,一对完整的访问密钥包括 SecretId 和 SecretKey 两部分。
进入访问管理控制台,找到【访问密钥】- 【API密钥管理】,并在其中新建一个访问密钥:
再进行 TCCLI 初始化配置,使其完成使用云 API 的必要前提条件:
tccli configure
进入交互模式,TCCLI 会要求提供 SecretId 和 SecretKey 等信息,配置完成后,可测试下使用 CLI 拉取云主机列表:
tccli cvm DescribeInstances
OK,配置成功了。
下面我们来创建一个无服务器云函数,并且调用它。
mkdir -p /data/hello && touch /data/hello/hello.py
这里实验默认用的是 Python,云函数支持所有主流编程语言。
现在开始部署上面的云函数:
- tccli scf CreateFunction \
- --FunctionName "hello" \
- --Code '{"ZipFile":"'$(cd /data/hello && zip -r - * | base64 | tr -d "\n")'"}' \
- --Handler "hello.main_handler" \
- --Description "My first scf"
部署成功后,会有 Success
的返回。
再次进入控制台,可以看到刚部署好的云函数:
点击该函数进入函数管理页面:
其实在这个控制台页面也可以新建、编辑、上传、部署云函数。
新建一个测试模板发起测试:
点击测试按钮:
成功返回了,日志也输出了,到这里我就全程体验了一把云函数。
回到实验页面,退出实验。
实验默认使用的是 Python,并且会要安装、配置很多东西,那是实验台,而在真实控制台是不需要这么麻烦的流程的,我们到控制台来创建一个 Java 云函数试试。
在函数服务中点击新建按钮,官方有很多内置的 Java 云函数模板,我们选择一个 Java 8 相关的模板进行快速创建,当然也可以从 0 开始。
创建成功了。
现在进去部署吧:
下载示例代码,然后上传部署即可。
Java 云函数的核心代码其实就是一个基于 Spring Boot 的接口:
- @RestController
- @SpringBootApplication
- public class DemoApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
-
- @GetMapping("/hello")
- public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
- return String.format("Hello %s!", name);
- }
- }
部署成功后,现在发起测试:
Java 云函数也成功了!
栈长体验了两把云函数,最大的感受就是不需要自己运维服务器了,包括环境配置、JDK 安装配置、权限、开放端口、日志、网络等设置全都内置或者有自定义配置。
下面我们来看几个配置页面。
各种函数的配置管理:
流量设置,可以做灰度发布:
并发配额,可以设置函数独占配额、函数预置并发数:
还有更多配置,这里就不一一介绍了。
看到这里,想必大家对 Serverless 有了一定程序的认识了,总之,程序员要做的只是上传函数代码而已,其他一切底层资源都可以在云上管理,并且是函数级别的资源管理,再结合腾讯云的各种云能力,简直不要太香了。
当然,这也会产生一定的费用,但都是按量付费的,并且可以按需要自动弹性调整,肯定要比自己全套搞要划算,毕竟连运维和服务器都省了,最重要的是省心、省时间。
另外,腾讯云都提供很多免费额度:
还是很良心的,感兴趣的都去体验看下,完全不一样的开发体验。
这里再次奉上腾讯云 Serverless 地址:
https://cloud.tencent.com/product/sls
通过参与这次腾讯云的 Techo Day 技术开放日活动,栈长最大的感触就是,在技术领域,腾讯云确实走在了前沿,真不是吹,Techo Day活动分享了很多技术热点及解决方案,涵盖了我们平时开发的方方面面,不仅能学习、接触新兴技术,还能对技术有更多、更深入的认识,特别是栈长介绍的 Serverless 云函数,真正让我们释放双手,实现生产力质的提升。本次活动就分享了Severless相关的技术原理解析,更有动手实验室手把手指导如何通过云函数快速构建自定义邀请函,让栈长也受益匪浅。
最后,本次Techo Day 活动上发布和分享的更多产品内容及相关课件,包括如何像用自来水一样使用数据库、使用Lighthouse一键构建云上应用等技术原理解析分享,更有利用PAG十分钟完成 AE动效部署上线各平台的动手实践指导,各种干货都被整理成了一份《腾讯云轻量级工具指南》,可以说是非常实用了,尤其对于程序员、架构师,都是不可或缺的生产利器,能够助你大大提高生产力,有需要的可以点击阅读原文获取。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。