Serverless被誉为下一代云计算技术,因为其能带来研发交付速度提升与成本的降低在业内异常火爆。本文主要为大家分享 Serverless Framework 的架构演进、技术解析以及应用发展,并通过 Serverless Hexo 实战案例,分享如何快速基于 Serverless Framework 进行业务开发部署。
文章整理自Serverless Framework 社区专家陈涛在腾讯云大学的视频分享,完整分享视频如下,感兴趣的读者也可以点击文末【阅读原文】下载讲师PDF。
文章大纲:
1、Serverless 架构演进 2、Serverless 技术解析 3、Serverless 应用与发展 4、Serverless 静态博客实战
1、Serverless 架构演进
单体架构使最原始的站点架构模型,采用单一 VPS 或者服务器做业务支撑,数据库、静态存储和 PAP 脚本打包在一起,提供对外的访问,显著缺陷复杂性高,并且随着业务的增长,其技术载会逐渐上升,部署速度变慢,扩展性能也会受限。所以引出了第二种架构方式即 SOA 架构,最常用的企业架构,通过各个服务模块,将较为复杂的业务拆分治理,是面向服务的架构,也是目前为止用得最多的架构方式。容器架构与 SOA 架构并没有明显的差异。容器架构只是更好的 SOA 载体,是底层计算的革新,但还是会强依赖自身运维能力。Serverless 架构封装了所有的底层资源管理和系统运维工作,使开发人员更容易使用云基础设施。
首先是从最原始的 SOA,有一个管理机构完成功能、接口的定义,然后各个系统统一调用接口,通过服务器进行访问,从而需要运维一个服务器集群。
接下来看Kubernetes容器编排,它是属于主从分布式的架构,主要是由Master节点和工作节点组成的,它主要的意义是对传统 SOA 的服务层做改造,来实现自动化部署容器、水平扩展、负载均衡等,总的来说,不论是Docker还是Kubernetes,其实现的意义主要是替代服务层级的使用调度分布式方面的改造。
下图是 Serverless 架构的简单模型,Serverless 架构封装了所有底层资源,包括MVM、Docker和 BaaS 的功能,进行集成封装,只需要关注 Serverless 应用的架构模型等,简化了运维,具有弹性伸缩的能力。
开发一个全栈应用需要了解的东西,首先是最底层的 K8S、系统安全、网络安全、备份等,中间需要留意到监控、日志报警、负载均衡、可靠性等,再上一层是DB、框架、文件存储、CDN,这样开发出一个 Full-stack 网站,对于一个普通的开发者来说是不可接受的,因为需要学习大量底层又不是很必要的知识,而Serverless 架构最核心的价值是让开发者可以聚焦到最核心最关键的业务能力上,而无需关注通用、底层、标准化的东西。
最后,总结一下,Serverless 是什么?
无服务器云计算(Serverless Computing)几乎封装了所有的底层资源管理和系统运维工作,使开发人员更容易使用云基础设施。Serverless 提供了一种方式,极大地简化了基于云服务的编程,犹如汇编语言到高级编程语言般的转换。
Serverless一定是未来的架构方式,而且更方便企业层级做出更好的架构和应用。
2、Serverless 架构演进
Serverless的开发模型,应用层有 REST API、BFF、 SSR、Website、Full-Stack APP,需要研发团队与 TencentCloud 进行功能的对接,如API、SCF、存储、DB,这只是现有的 Serverless 的开发模型,现在看来是还不够优雅的,需要庞大的研发团队来支撑。
于是引出了一个问题,有没有办法可以改善团队研发的进程,或是中间对接的环节呢,那么也就是引出了今天的主题我们需不需要框架?
先看一下Serverless Framework 框架能带来什么效益,我个人认为框架的帮助有两个部分,第一部分是组件化开发,第二部分是标准化框架。组件化开发通常是跨业务的可复用性来提高业务能力,对上通过组件化来提高代码复用的能力跨产品的。标准化框架的作用是帮助我们对接更多的云服务,如 COS、SAF、API 等一系列云服务。
那么组件化和标准化具体是替代哪些功能?组件化能够提供一些component来制作一些组件化的轮子,如 Express、website、FullStack 、Next.js等,帮助我们完成组件化的功能。标准化做的是部署、调试、架构、资源整合、应用、监控、告警等,对上是承接应用层,如REST API、BFF、SSR、Website、Full-Stack App;对下是接入云服务,如 API、COS、DB 等。以上是我们技术大纲,帮助大家理解Serverless Framework到底是做什么,可以帮助实现什么东西。
- Serverless Framework 应用生命周期管理是由CLI和Dashboard组成,覆盖了serverless的整个应用生命周期,如服务的部署/删除/查看/回滚、调试、查看日志、统计运行数据、DevOps支持。
- Serverless 应用,也就是上述提到的标准化框架和组件化开发。
- Serverless资源,是可以无缝对接腾讯云Serverless资源。Serverless Framework 其实类似一个承接层或开发组件或包管理的工具。
3、Serverless 应用与发展
下图是 IVWEB 团队在 Serverless 的业务落地,用到了 Serverless 值出渲染。首先是在客户端层,然后到 NGW 接入层完成业务转发、灰度、鉴权、统计,再接到 Apigateway 完成最终的访问环节,涉及到云函数同构环境,Koa 业务逻辑,最后直出返回结果。那么这一套应用架构最方便最可取之处是免运维、全量日志、多维度数据统计、云 API 打通工作流,使得业务上线&维护工作量降低了80%。
下图是NOW直播B侧运营平台的架构图,主要是实现了 BFF 到 SFF,Serverless 主要包括创建、更新代码、删除、容灾,达到了提高迭代效率、按需取用,用完即走、分离部署,安全可靠、细粒度的业务逻辑拆分。
下图是挑选的具有代表性的 component,可供使用,可以在 Serverless 官网站找到 component 文档。
总结一下Framework的功能:
- 代码重用,减少代码重复的开发量
- 统一规范,Framework是对下进行标准化,通过它可以直接对接到基础产品的功能
- 降低运维门槛和难度
- 专注业务逻辑
- 社区优势,Serverless Framework其实是北美完成了主力开发,由很多开发者进行维护,具体可以在GitHub搜索Serverless Framework进行了解。
- 易于维护,其实serverless不需要维护的,是将维护的工作交给云端。
- 提升效率,提高工作和应用效率。
4、Serverless 静态博客实战
接下来以一个 Serverless Hexo 的案例,分享下如何基于 Serverless Framework 快速进行开发部署。实战步骤很简单,只有3步:
- 安装 Serverless Framework、HEXO
- 配置 YML 文件
- 部署到腾讯云 其中的环节很多是免费的,所以大家可以大胆放心地部署项目。
1. 安装
安装前提:
- 安装Node.js (Node.js 版本需不低于 8.6,建议使用 Node.js 10.0 及以上版本)
- 安装Git
首先,安装 Serverless Framework
$ npm install -g serverless
安装 Hexo
代码语言:javascript复制$ npm install -g hexo-cli
安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。
$ hexo init hexo # 生成hexo目录$ cd hexo$ npm install
新建完成后,指定文件夹的目录如下:
.├── _config.yml├── package.json├── scaffolds├── source| ├── _drafts| └── _posts└── themes
安装完成后,可以通过hexo g命令生成静态页面
$ hexo g # generate
注:如果希望在本地查看效果,也可以运行下列命令,通过浏览器访问 localhost:4000 查看页面效果。
$ hexo s # server
2. 配置
在 hexo 目录下,创建 serverless.yml 文件
$ touch serverless.yml
在 serverless.yml 文件中进行如下配置
# serverless.yml
myWebsite: component: '@serverless/tencent-website' inputs: code: src: ./localhexo/public # Upload static files generated by HEXO index: index.html error: index.html region: ap-guangzhou bucketName: my-bucket
配置完成后,文件目录如下:
.├── .serverless├── hexo| ├── public| ├── ...| ├── _config.yml| ├── ...| └── source└── serverless.yml
3. 部署
通过 serverless deploy 命令(或者 sls 命令)进行部署,并可以添加--debug参数查看部署过程中的信息。
如您的账号未登陆或注册腾讯云,您可以直接通过微信扫描命令行中的二维码进行授权登陆和注册。
$ serverless --debug
DEBUG ─ Resolving the template's static variables. DEBUG ─ Collecting components from the template. DEBUG ─ Downloading any NPM components found in the template. DEBUG ─ Analyzing the template's components dependencies. DEBUG ─ Creating the template's components graph. DEBUG ─ Syncing template state. DEBUG ─ Executing the template's components graph. DEBUG ─ Starting Website Component.
Please scan QR code login from wechatWait login...Login successful for TencentCloud DEBUG ─ Preparing website Tencent COS bucket my-bucket-1250000000. DEBUG ─ Deploying "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ "my-bucket-1250000000" bucket was successfully deployed to the "ap-guangzhou" region. DEBUG ─ Setting ACL for "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ Ensuring no CORS are set for "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ Ensuring no Tags are set for "my-bucket-1250000000" bucket in the "ap-guangzhou" region. DEBUG ─ Configuring bucket my-bucket-1250000000 for website hosting. DEBUG ─ Uploading website files from D:hexotinalocalhexopublic to bucket my-bucket-1250000000. DEBUG ─ Starting upload to bucket my-bucket-1250000000 in region ap-guangzhou DEBUG ─ Uploading directory D:hexotinalocalhexopublic to bucket my-bucket-1250000000 DEBUG ─ Website deployed successfully to URL: https://my-bucket-1250000000.cos-website.ap-guangzhou.myzijiebao.com.
myWebsite: url: https://my-bucket-1250000000.cos-website.ap-guangzhou.myzijiebao.com env:
13s » myWebsite » done
代码语言:javascript复制访问命令行输出的 website url,即可查看您的 Serverless Hexo 站点
注:如果希望更新 hexo 站点中的文章,需要在本地重新运行hexo g进行生成静态页面,再运行serverless更新到页面
4. 移除
可以通过以下命令移除 hexo 网站
$ sls remove --debug
DEBUG ─ Flushing template state and removing all components. DEBUG ─ Starting Website Removal. DEBUG ─ Removing Website bucket. DEBUG ─ Removing files from the "my-bucket-1250000000" bucket. DEBUG ─ Removing "my-bucket-1250000000" bucket from the "ap-guangzhou" region. DEBUG ─ "my-bucket-1250000000" bucket was successfully removed from the "ap-guangzhou" region. DEBUG ─ Finished Website Removal.
6s » myWebsite » done
最后,奉上实战源码地址:
https://serverlesscloud.cn/doc/providers/tencent/templates/hexo
敲黑板:感兴趣读者可以根据上述操作步骤完成 Serverless Hexo 博客部署,部署成功并提交链接至信息表:http://u6uvxlniyxhd4qgj.mikecrm.com/fMWq2Um,即可有机会获得腾讯企鹅公仔、腾讯云价值 50元产品代金券等精美礼品。
免费上云,就用 Serverless Framework
目前,Serverless Framework 服务暂时免费,且 Serverless Framework 服务用到云函数 SCF、API 网关、对象存储 COS 等产品,均提供免费额度。
具体免费详情可查阅:
https://cloud.tencent.com/document/product/1154/38792
立即使用 Serverless,只需三步!
Serverless Framework 是构建和运维 Serverless 应用的框架,简单三步,即可通过 Serverless Framework 快速实现服务部署。
1、创建本地应用
- 通过 npm 安装 Serverless
$ npm install -g serverless
- 基于 tencent_nodejs 模板创建 hello_world
$ serverless create --template tencent-nodejs --path my-service
2、安装相关依赖
- 执行 npm install 安装相关依赖
$ cd my-service$ npm install
3. 部署
- 扫描微信二维码一键登录腾讯云账号,部署函数到云端
$ serverless deploy
- 触发云函数
$ serverless invoke -f hello_world
部署完成后,即可在命令行中看到部署情况,也可以在腾讯云控制台看到对应资源。