Life is too important to be taken seriously

0%

Serverless Framework 迁移实践

本文以一个 Express.js 应用为例,分享如何将 Component 切换到最新版本,使用最新的开发调试模式等。

新老版本 Component 有什么区别?

新版本 Component 支持以下特性:

1.【降低门槛】交互式的一键部署指引:对于新用户而言,只需要在终端输入 serverless 命令,即可按照引导快速部署一个 Express 或 静态网站应用。
2.【极速部署】将一个 Express.js 应用部署到云端只需要5-6s 的时间,使本地和云端代码可以顺畅、快速同步。
3.【灵活复用】支持云端注册中心,每位开发者都可以贡献自己的组件到注册中心中,便于团队进行复用。
4.【实时日志】支持部署阶段实时输出请求日志、错误等信息,此外支持检测本地代码变化并自动部署云端,方便的进行云端代码开发。
5.【云端调试】针对 Node.js 应用,支持一键开启云端 debug 能力,对云端代码打断点调试,真正实现了在云端进行开发和调试的能力,无需考虑本地环境和远端环境的不一致问题。
6.【状态共享】通过云端部署引擎存储应用部署状态,便于账号和团队之间共享资源,协作开发。

而老版本的 Component 的原理如下:

  1. 需从 npm 安装 Component 到本地
  2. 本地存储部署状态
  3. 无法支持实时日志、云端调试等能力

怎样区分新老版本?兼容性如何?

Serverless Framework 1.67.2 版本及以上支持新版本 Component,以如下 express 应用为例,新版的 yaml 有如下特点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
component: express # (required) name of the component. In that case, it's expre$
name: express-api # (required) name of your express component instance.
org: test # (optional) serverless dashboard org. default is the first org you c$
app: expressApp # (optional) serverless dashboard app. default is the same as t$
stage: dev # (optional) serverless dashboard stage. default is dev.

inputs:
src: ./src # (optional) path to the source folder. default is a hello world a$
region: ap-guangzhou
runtime: Nodejs10.15
exclude:
- .env
apigatewayConf:
protocols:
- http
- https
environment: release
  1. component 的引用方式改变了,同时新增了 name, org,appstage字段
  2. inputs 中,增加了 src 配置,代表的是源码的路径
Read more »

Serverless 学习资料(持续更新)


收集和更新一些学习 serverless 时的资料,包含 github 项目、实战、案例、演讲、大会等

目录

项目

大会

社区

↑ 返回目录 ↑

Serverless 文本翻译工具


基于上周的 Webinar 直播,通过 Serverless Framework 的 Express Component 实现的文本翻译工具。基于腾讯云 TMT 机器翻译工具,支持多种语言的互相翻译。点此查看 Demo 部署效果

特性:

  • 开箱即用 - 只需要关心项目代码,一键部署后 Serverless Framework 会完成所有配置。
  • 极速部署 - 仅需 5-6 秒,部署整个 Serverless 应用。
  • 实时日志 - 通过实时日志的输出查看业务状态,便于直接在云端开发应用。
  • 云端调试 - 针对 Node.js 框架支持一键云端调试能力,屏蔽本地环境的差异。
  • 应用监控 - 提供应用级别的监控页面,“0”配置即可实现业务监控能力。
  • 按需付费 - 按照请求的使用量进行收费,没有请求时无需付费。并且本用例中使用到的产品均有免费额度。
    Read more »

最近在重新整理之前 Webinar 中的例子,其中很典型的一个是 Serverless Websocket 的实现和应用。特地整理一下原理和部署过程,并且通过案例的方式分享出来。

1. 消息实时推送

消息实时推送的技术在很多领域都有广泛的应用。例如实时报价、在线教育、社交订阅、线上游戏等。在这些场景下,需要后台将发生的变化实时,主动地推送给浏览器端,无需用户手动刷新页面。

和移动端的 socket 方式不同,在 web 端实现消息实时推送有几种常见的方案,简要介绍如下:

1.1 短轮询(polling)

轮询指的客户端和服务器端一直进行连接,每隔一段时间就请求一次。其优点是实现简单,对 HTTP 实现无需做过多修改,但缺点也非常明显,即轮询的间隔过长时客户端无法及时收到更新;此外轮询间隔短时又会导致连接数过多,增加服务器端负担。

1.2 长轮询(Long-polling)

长轮询基于短轮询做了改进,即客户端发送 HTTP 给服务端时,如果没有新消息时就会等待,如有新消息时再返回给客户端。从而缓解了服务端的连接压力,并且可以保证比较好的时效性。但缺点也依然存在,因为持续的保持连接会消耗网络带宽,并且当服务端没有数据返回时,会造成请求超时。

1.3 WebSocket

上述两种双向通信的实现方式并不够理想,在此背景下, WebSocket 协议出现了。WebSocket 将 TCP 的 Socket 应用在 webpage上,从而在服务端和客户端中建立了全双工(full-duplex)通信。WebSocket 连接一旦建立,无论客户端或服务端,都可以直接向对方发送报文。

相比于传统的 HTTP 每次请求和应答都需要服务端和客户端建立连接的通信方式,Websocket 在连接建立后,在断开连接前,无需服务端或者客户端重新发起连接请求。因此在并发量大的场景下,可以有效节约带宽资源,并且有显著的性能优势。

基于上述对比可知,WebSocket 协议十分适合实现实时通讯场景,一方面解决了 HTTP 协议中只能服务端发起通讯的被动性,一方面也解决了数据推送延迟的问题,并且具有明显的性能优势。

2. 基于 Serverless 实现 WebSocket 协议

以腾讯云为例,基于 Serverless 实现 WebSocket 协议可以参考WebSocket 原理介绍

对应到具体实现上,Websocket 在网关+函数中的实现,可以参考下图中的架构。一个 WebSocket API 会对应三个函数:

  • 注册函数: 在客户端发起和 API 网关之间建立 WebSocket 连接时触发该函数,通知云函数 WebSocket 连接的 secConnectionID。通常会在该函数中记录 secConnectionID 到持久存储中,用于后续数据的反向推送。
  • 清理函数:在客户端主动发起 WebSocket 连接中断请求时触发该函数,通知 云函数准备断开连接的 secConnectionID。通常会在该函数清理持久存储中记录的该 secConnectionID。
  • 传输函数:在客户端通过 WebSocket 连接发送数据时触发该函数,告知云函数连接的 secConnectionID 以及发送的数据。通常会在该函数处理业务数据。例如,是否将数据推送给持久存储中的其他 secConnectionID。

WebSocket 架构

关于用 Websocket 实现匿名聊天室的 Node.js 版本,也可以参考下面的 Github Repo

3. 部署 Serverless WebSocket 的外卖订单系统

3.1 订单系统演示

基于上述理论,我们可以在 Serverless 架构上部署一个 WebSocket 的点单系统。这里也有一个线上 demo 供大家参考。

分别打开点单系统和店铺系统,在店铺系统中点击营业,之后在点单系统中选取对应的店铺,进行下单。如下述动图所示。

动图

Read more »

本文整理自 ServerlessDay · China 大会 - 《企业级 Serverless 应用实战》的分享,讲师为腾讯云 Serverless 高级产品经理tinafang。

本文主要分为四个部分:

  • Serverless 2020 : 趋势与挑战
  • Serverless 典型场景
  • 部署企业级 Serverless 应用
  • 实战演示 : Serverless SSR

Serverless 2020 : 趋势与挑战

首先,谈一下对于 Serverless 在 2020 的趋势。我大概是从 3-4年前开始接触 Serverless,到了今年,发现有以下一些特征,我会把他们分成三个部分:

  • 第一点,对于开发者来说,Serverless 通过按需付费、弹性扩缩容的特性,极大的赋能开发者,让他们关注于实现业务,而不需要考虑底层资源。
  • 第二点,对于越来越多的企业来说,从2019年开始,他们逐步开始尝试、深入使用甚至拥抱 Serverless。因为 Serverless 能够显著的降低成本,并且减少运维的工作。这对于企业来说,尤其是非科技企业来说,是有非常强的吸引力的。并且在 2020年,已经可以看出更多的企业在借助 Serverless 来实现业务了。
  • 第三个方面,可以看到云服务和 Serverless 的结合越来越紧密。刚才也说到 BaaS 本身是 Serverless 中的重要部分。那么在 2020 年,越来越多的云服务,正在通过 Serverless 的方式提供。比如 PG SQL 提供了 Serverless DB ,Serverless HTTP,以及上午提到的 Serverless AI 等服务。

Serverless

但是,与此同时,我们也发现,随着这些趋势的发展,也面临了不少的挑战,依然分成三个方面来讨论:

  • 对于开发者来说,怎么提供一个完整的开发、调试和排障的能力,并且提供更强大的扩展能力,是非常关键的。也就是生态的建设。
  • 对于企业来说,面临的问题更加细节,很多概念在工业化的实践中,都会遇到很多实际的问题。包括权限的划分、资源的管理、还有 CI/CD 等解决方案,怎样无缝适配到企业的架构中呢?
  • 最后,对于云来说,结合越发紧密,但是云产品为了保证通用性和普适性,本身会有比较复杂的配置,并且云资源直接的组合需要带来比较大的学习成本,也对于企业带来了不少挑战。

Serverless

Read more »