Serverless架构在软件工程的研发实践—JAMStack原理介绍-阿里云开发者社区

开发者社区> 开发者小助手> 正文

Serverless架构在软件工程的研发实践—JAMStack原理介绍

简介: 本篇内容分享了Serverless架构在软件工程的研发实践之JAMStack原理介绍。
+关注继续查看

分享人|王庆,阿里云云原生前端负责人

直播地址:0 基础晋级 Serverless 高手课 — Serverless 架构在软件研发工程实践方面的价值


本篇文章将通过五个部分为大家介绍Serverless架构在软件工程的研发实践和JAMStack的原理。

  • Ÿ现代化web站点构建方式JAMStack介绍
  • Ÿ阿里云JAMStack解决方案
  • JAMStack服务化实现介绍
  • Ÿ部署工具介绍
  • Ÿ其他Serverless工程实践

 

一、现代化web站点构建方式JAMStack介绍

在介绍JAMStack原理之前,首先介绍下什么是JAMStack。


JAMStack是当下前端推崇的一种新的站点开发理念,它将内容进行预渲染,然后把静态的部分交给CDN进行加速来实现更好的访问体验;然后再把动态的API用背后的Serverless技术来实现整个站点的动态能力,这样开发的站点在用户体验上就会有很大的改进。


JAMStack三个主要的概念构成,即Javascript、API和Markup。

  • Javascript是主流的web开发的语言,能够做数据的交互,也能增强站点动态能力;
  • API提供站点数据的动态能力,是由传统Server提供,也可以使用Serverless提供API的能力,实现降低成本和应对大规模流量以及容灾的诉求;
  • Markup是标记类型语言,HTML,Markdown这类也是标记型语言的一种。这是JAMStack实现静态化预渲染的基础。


JAMStack具有五大优势,它们是:

  • 更好的性能,即将预渲染的静态内容交给CDN,极大提升用户访问你的站点效率;
  • 更安全性,当站点静态化,被攻击的面就比较少了,动态API本身的Serverless服务运行也有很高的安全保障;
  • Ÿ更便宜,静态资源本身的托管费用比较低,基于Serverless的API服务弹性调用花费也比较低;
  • 更容易扩展,动态API部分跟静态资源解耦,动态API扩展起来更加便捷;
  • 更好的开发体验,松散的耦合方式可以让开发者专注在某个部分,比如前端页面或是后端接口,基于Git的工作流也能大幅减少集成部署时间。


JAMStack基本实现原理

由下图可见,传统的web一般通过客户端访问你它背后的数据库或是内容系统,这里会有几个链路。通过客户端访问web server, 然后web server再去发起请求调用背后的应用服务,应用服务也可以被拆分成各种微服务,也都是通过这种间接的方式调取的。应用服务也会在背后直接操作数据库和内容管理系统。JAMStack其实是简化了这个架构。

image.png


整个策略就是把静态的部分都交给CDN,因为静态的部分是提前做了渲染的,然后CDN帮助加速,意思是用户可以第一时间就看到这个站点的效果。动态的部分再做处理,通过其他方式扩展到站点上。总而言之,JAMStack实际上减少了动态的访问路径,可以通过提升站点的访问呢性能,并实现更好的安全保障。

 

二、阿里云JAMStack解决方案

在JAMStack服务化实现之前,这里先介绍一下,基于阿里云提供的服务完成的JAMStack解决方案。介绍这些解决方案的好处是老师可以介绍给学生,让学生了解了之后增加动手的能力。


目前,用阿里云的一些产品来做JAMStack框架,可以通过下图来了解一下。途中一共包含了几个产品,比如CDN,OSS和FC函数计算产品。这些产品中,CDN是主角,它一方面处理对静态资源的缓存和全球网络加速,另外还具备写脚本的能力,提供一些边缘脚本,可以利用这个能力做一些网关处理。


image.png


举个例子,当用户通过浏览器发起一个域名访问,这个域名会首先经过CDN,然后CDN本身是有一套默认配置的,这套配置提供了边缘配置,可以把它理解成是一个钩子的流程,用友前后关系。经过这些配置之后,会自动分析动态请求,比如build部分,就先去缓存中看有没有,如果没有再去OSS里查看,OSS这边也会给一个回源,表示这边是更新的,可以先把它缓存下来然后再把内容返回去。也就是直接把静态的部分呈现给用户了。而动态的部分,需要经过边缘脚本,通过它判断这是一个动态的API,然后再根据传的路由转发到背后的API服务,比如说这里依赖了一个函数计算的服务,函数计算返回一个域名,那么转发到函数计算上,然后再把他返回到页面上做渲染。经过这样的处理可以看到整个JAMStack的动静态分离的能力。好处也很明显,用户不需要再去搭建各种CDN、OSS或是函数计算的服务了,基于现有一些服务已经可以构建高性能站点服务了。

【解决方案效果演示,请点击视频观看】

 

三、JAMStack服务化实现介绍

JAMStack服务化实现与阿里云已有的能力差距还是很大的。因为需要考虑当很多用户上来用的时候,怎么去做多租以及怎么去应对整个大规模的资源请求。


首先介绍下已经提供的JAMStack所包含的能力,如下:


域名托管+自定义域名,可以提供resume.net.cn一级域名,用户根据自己需求填写二级域名,比如Zhangsan.resume.net.cn即可使用。另外也支持自定义域名。

  • Ÿ   重定向处理,这个功能主要解决的是静态化文件重定向的问题;比如一个旧站点因为某种原因需要把它的某个配置文件重新命名,但是旧站点已经有人在访问了,这个时候就可以利用重定向处理能力,把旧的直接签到新的名字上,实现无缝升级。
  • Ÿ   KvStore通过存储静态资源,并且将资源更新,跟站点部署解耦,实现动态化能力。
  • Ÿ   动静态分流,这是JAMStack比较核心的能力。通过自定义网关把静态资源和动态资源的请求做分流,静态的到CDN上,动态的到API上。
  • Ÿ   多站点管理,意思是一个用户目前最多可以创建32个站点。


JAMStack服务整体架构图

如下JAMStack服务整体架构图,可以从两个部分来介绍。

image.png


首先,当JAMStack项目部署的时候,需要做一系列操作。比如先通过工具链执行S deploy,把需要的一些静态数据和动态的API,做一个分包。比如动态API可以直接上传函数计算,而静态部分会通过文件同步的服务,把它同步到OSS上。这个文件同步服务还会把站点的原数据,比如域名信息和路由信息等做二次存储。这是一个具有持久化的能力,可以存到OTS服务,然后再去发起一个消息通知给到终解析站点的Gateway,Gateway接到通知后会反过来查一下存储的网站原数据信息,然后在网关缓存下来,使得用户在访问网关的时候,不用再去查询相关的原数据信息。


所以如上可见,当应用在做部署的之前已经准备了很多东西了。包括把静态的文件做分离部署、创建动态API和把站点原数据信息同步到最终解析站点的网关上。

image.png


JAMStack项目用户的访问流程

用户像往常一样通过浏览器访问刚刚建好的域名,这时候域名会解析到Gateway上,然后因为Gateway已经拿到了这些原件信息,包含路由请求等等,这个时候就开始把这些请求做内部代理,也就是提供了一个service的内部网关,它会根据原数据信息去分别访问动态和静态部分,以及做好的KvStore部分,最终把所有的东西收集起来,从而呈现一个完整的结果给用户。

image.png

 

四、部署工具介绍

部署工具Serverless Devs

上面视频里演示的主体是Desktop,Desktop是用跨平台技术开发的,是用前端的技术HTML、CSS和js.技术打造的。它跟另外一个端侧命令行最大的区别是,当用户希望企业级管理基于JAMStack能力构建的企业站点的时候,势必需要回看部署好之后返回的域名并对它进行二次部署。甚至,要去对站点做一些性能提升,包括压测等等,然后做整个线上和线下的调试端。这一系列的企业服务能力实际上是命令行不具备的。

但是命令行也有它的优势,即被集成很方便。首先,一个专业的开发者一定希望有个非常清亮的工具,命令行就是最佳选择。通过安装命令行工具之后,依然可以操作建站能力,并且可以把命令行集成到工作流里。


所以这两种方式各有优势,大家可以基于自己的习惯和需求去使用。下图是整个工具链的功能列表,除了上述的两种,还有桌面端和应用中心。应用中心承载了很多场景,包括电商建站、博客建站等等模板,通过这些模板用户使用起来更便捷。


image.png


部署工具Serverless Devs还有一个最大的特色,即可以实现跨厂商的服务能力。当前的云服务都是每家厂商为自己提供服务的,这个时候一个开发者想要为多云服务,或是他自己本身就有多元服务,想要在不同的云厂商上尝试Service技术的花,需要安装不同的工具。 


Serverless Devs拥有很强的扩展能力,也就是说具有基于组件的方式可以构建各个云上的业务的能力。所以只需要安装Serverless Devs就可以实现为多个云厂商服务了。这本身也是一种非常开源开放的理念。


目前Serverless Devs支持30款web框架;拥有7大应用场景模板,而且还在不断增加;另外也在跟其他社区有了更多合作,包括docker上的支持、国内外代码托管服务等等。

 

五、其他Serverless 工程实践

Serverless Devs本身是一个实际的例子。当前Serverless接口就是Service工具的接口,天生就是用Service的方案的。也就是说,上线当天就是用这套方案做的,本身代码也是用Python写的,10天内就开发了30个接口;而且运行到现在7个多月的实践仍然是0故障的状态。这全部得益于Service这套稳定的服务。

Serverless Devs官网本身也是用工具去做的部署,整个开发部署和上线及持续集成仅仅用了2天时间。

希望通过以上的分享,能够让大家看到Serverless架构在软件工程开发实践的价值,也希望能过激发大家的实践。


最后补充一点,如果想要获取命令行工具、桌面工具等等,可以直接登录官网下载,工具包括Mac版和Windows两个版本。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python模块介绍- SocketServer 网络服务框架
来源:https://my.oschina.net/u/1433482/blog/190612 摘要: SocketServer简化了网络服务器的编写。它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。
848 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7699 0
VisualSvn Server介绍
1 、VisualSvn Server  VisualSvn Server是免费的,而VisualSvn是收费的。VisualSvn是Svn的客户端,和Visual Studio集成在一起,但是不免费,使用AnkhSvn(VS2008插件)来代替VisualSvn。
711 0
quick easy ftp server软件在机子上架设了个服务器
  需要在你的路由上转发21#端口,TP-LINK路的在转发规则里设置,就是把21端口指向你的那台装FTP的机子。   另外Serv-U FTP Server 也是一款很不错 FTP服务器软件、  
673 0
SQLServer CDC数据迁移和数据抽取功能介绍
CDC介绍 cdc.png 为了满足数据迁移和数据抽取的业务需要,使得有机会在数据库层面上直接实现增量抽取功能,ORACLE综合性能和场景需要,在数据库引擎层面直接集成了CDC功能,由于提供了类似API的功能接口,变更数据捕获和更改跟踪均不要求在源中进行任何架构更改或使用触发器,所以比第三方工具具有一定的优势。
1565 0
软件产业正经历裂变 SaaS渐成生态
本文讲的是软件产业正经历裂变 SaaS渐成生态,SaaS发展至今已有近十年的历史,尤其是近几年来,随着互联网接入和使用的大规模普及,软件服务提供商和使用者的供需市场日趋繁荣,SaaS取得了飞速发展,其服务品类和用户数量得以剧增。
1456 0
SQLServer CDC数据迁移和数据抽取功能介绍 2
数据库环境: 1、SQLServer 2008R2 2、SQLServer 代理打开 一、新建一个数据库 创建数据库 Incremental_DB image.
918 0
1326
文章
282
问答
来源圈子
更多
开发者免费资源中心,技术电子书、会议PPT、论文资料持续供应中
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载