本文整理自 ServerlessDay · China 大会 - 《企业级 Serverless 应用实战》的分享,讲师为腾讯云 Serverless 高级产品经理方坤丁。前端
本文主要分为四个部分:node
首先,谈一下对于 Serverless 在 2020 的趋势。我大概是从 3-4 年前开始接触 Serverless,到了今年,发现有如下一些特征,我会把他们分红三个部分:git
可是,与此同时,咱们也发现,随着这些趋势的发展,也面临了很多的挑战,依然分红三个方面来讨论:github
那么,在和企业的实践中,咱们也发现 Serverless 对于几种典型的场景支持的很是优秀,在这里也但愿和你们分享:数据库
接下来谈谈部署企业级应用的几个诉求。这里的一些经验都是在实际的上云过程当中,客户反馈,而且提到的很是多的问题。也是咱们在帮客户一块儿查看问题的时候,实际解决的问题。express
好比咱们的一个客户,但愿 All in Serverless,这几个问题他们全都遇到过,那么咱们能够一块儿来看下是怎样解决的。npm
在咱们帮助企业客户部署 Serverless 应用的时候,须要考虑到的几个特性:后端
接下来,咱们逐个看一下,企业客户在上云过程当中是怎么解决这些问题的:api
当前在大企业中,须要使用主帐号+子帐户的用户、用户组划分权限。可是怎样让子帐户之间权限隔离,更加安全的部署资源一直都是一个挑战。为了确保子帐户之间的隔离和细粒度控制,Serverless Framework 开发平台支持在 serverless.yml 文件中,经过指定配置角色来获取对应权限。同时,支持运维配置不一样的角色只能被某个子帐户调用,从而保证其严格隔离。浏览器
随着企业客户 Serverless 架构上云过程当中,资源的增加,不可避免会出现资源管理困难,须要有效划分资源,隔离环境的问题。那么,腾讯云 Serverless Framework 是怎样解决这个问题的呢?
主要是经过 yaml 配置中对 stage、 app 和 org 等几个字段的灵活引用,而且在控制台中提供开箱即用的资源管理视图的查看,从而有效的隔离不一样环境中的底层资源。
以下面例子,对应的 yaml 配置中,stage 字段能够从 .env 中读取配置;此外对应的资源名称中能够用 ${app}-${stage}
的方式动态命名。从而针对不一样环境建立配置相同、相互隔离的资源。
运维和排障一直是 Serverless 架构中客户反馈不少的问题,主要集中于如下两个方面:
针对这样的状况,腾讯 Serverless Framework 提供了开箱即用的应用级别监控视图,而且结合高级的日志查询功能,能够有效下降配置的学习成本,快速排障定位问题。
针对企业客户来讲,接入自动化的 CI/CD 流程十分必要,主要有以下几个优点点:
那么针对企业级客户链接 CI/CD 的诉求,Serverless Framework 既支持开源 CI/CD 产品的打通,如 Jenkins, Github Actions 等,也支持和 Coding 产品的一键打通,从而针对 Serverless 应用提供了“0”配置的 CI/CD 解决方案,实现构建、部署的流程的自动化。
最后,经过一个 Serverless SSR 的实战,演示一个 SSR 应用快速部署,并提供了动静分离(静态资源托管到对象存储),提供了开箱即用的应用级别监控的能力。从而实现了完善的脚手架能力,而且能够方便的针对权限管理、灰度和 CICD 进行打通及扩展。
腾讯云 Next.js 组件经过使用 Tencent Serverless Framework,基于云上 Serverless 服务(如 API 网关、云函数等),实现「0」配置,便捷开发,极速部署采用 Next.js 框架的网页应用,Next.js 组件支持丰富的配置扩展,提供了目前便捷实用,开发成本低的网页应用项目的开发/托管能力。
Next.js 特性介绍:
$ mkdir serverless-next && cd serverless-next $ npm init next-app src
经过 npm 全局安装 Serverless CLI:
$ npm install -g serverless
在项目根目录(此例中为serverless-next)下建立 serverless.yml
文件:
$ touch serverless.yml
在 serverless.yml
中进行以下配置:
# serverless.yml component: nextjs # (必填) 组件名称,此处为nextjs name: nextjsDemo # (必填) 实例名称 org: orgDemo # (可选) 用于记录组织信息,默认值为您的腾讯云帐户 appid app: appDemo # (可选) 该 next.js 应用名称 stage: dev # (可选) 用于区分环境信息,默认值是 dev inputs: src: src: ./src exclude: - .env functionName: nextjsDemo region: ap-shanghai runtime: Nodejs10.15 apigatewayConf: protocols: - http - https environment: release
查看 更多配置及说明 >>
3.1 构建静态资源
进入到 next 项目目录下,构建静态资源:
$ cd src && npm run build
3.2 部署到云端
回到在 serverless.yml 文件所在的项目根目录,运行如下指令进行部署:
$ sls deploy serverless ⚡ framework Action: "deploy" - Stage: "dev" - App: "appDemo" - Instance: "nextjsDemo" region: ap-shanghai apigw: serviceId: service-xxxxxx subDomain: service-xxxxxx-10000000.sh.apigw.tencentcs.com environment: release url: https://service-xxxxxx-10000000.sh.apigw.tencentcs.com/release/ scf: functionName: nextjsDemo runtime: Nodejs10.15 namespace: default 59s › nextjsDemo › Success
部署时须要进行身份验证,如您的帐号未 登陆 或 注册 腾讯云,您能够直接经过微信扫描命令行中的二维码进行受权登陆和注册。
若是但愿查看更多部署过程的信息,能够经过
sls deploy --debug
命令查看部署过程当中的实时日志信息(sls
是serverless
命令的缩写)。
部署了 Next.js 应用后,能够经过开发调试能力对该项目进行二次开发,从而开发一个生产应用。在本地修改和更新代码后,不须要每次都运行 serverless deploy
命令来反复部署。您能够直接经过 serverless dev
命令对本地代码的改动进行检测和自动上传。
能够经过在 serverless.yml
文件所在的目录下运行 serverless dev
命令开启开发调试能力。
serverless dev
同时支持实时输出云端日志,每次部署完毕后,对项目进行访问,便可在命令行中实时输出调用日志,便于查看业务状况和排障。
除此以外,咱们通过压测发现,该架构的性能和自建 node server 相比持平,甚至在响应时间方面更加有优点;而在价格测算上,基于 Serverless 弹性伸缩,按需付费的特色,有着十分显著的优点。
在 serverless.yml
文件所在的目录下,经过以下命令查看部署状态:
$ serverless info serverless ⚡ framework Last Action: ifo (a few seconds ago) Deployments: 21 Status: active region: ap-shanghai apigw: serviceId: service-xxxxxx subDomain: service-xxxxxx-10000000.sh.apigw.tencentcs.com environment: release url: https://service-xxxxxx-10000000.sh.apigw.tencentcs.com/release/ scf: functionName: nextjsDemo runtime: Nodejs10.15 namespace: default nextjsDemo › Info successfully loaded
最后,我相信 Serverless 的时代已经到来,它可以赋能开发者,助力企业上云,并将从新定义云的概念!
3 秒你能作什么?喝一口水,看一封邮件,仍是 —— 部署一个完整的 Serverless 应用?
复制连接至 PC 浏览器访问:https://serverless.cloud.tencent.com/deploy/express
3 秒极速部署,当即体验史上最快的 Serverless HTTP 实战开发!
传送门:
- GitHub: github.com/serverless
- 官网:serverless.com
欢迎访问:Serverless 中文网,您能够在 最佳实践 里体验更多关于 Serverless 应用的开发!