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

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本篇内容分享了Serverless架构在软件工程的研发实践之JAMStack原理介绍。

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

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


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

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

 

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

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


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


JAMStack三个主要的概念构成,即JavascriptAPIMarkup

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


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

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


JAMStack基本实现原理

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

image.png


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

 

二、阿里云JAMStack解决方案

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


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


image.png


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

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

 

三、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服务,然后再去发起一个消息通知给到终解析站点的GatewayGateway接到通知后会反过来查一下存储的网站原数据信息,然后在网关缓存下来,使得用户在访问网关的时候,不用再去查询相关的原数据信息。


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

image.png


JAMStack项目用户的访问流程

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

image.png

 

四、部署工具介绍

部署工具Serverless Devs

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

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


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


image.png


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


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


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

 

五、其他Serverless 工程实践

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

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

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


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

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
6天前
|
监控 Java 持续交付
后端开发中的微服务架构实践与挑战####
在当今快速迭代的软件开发领域,微服务架构以其灵活性和可扩展性成为众多企业的首选。本文探讨了微服务架构的核心概念、实施策略及面临的主要挑战,旨在为后端开发者提供一个全面的指南。通过分析真实案例,揭示微服务在提升系统敏捷性的同时,如何有效应对分布式系统的复杂性问题。 ####
|
7天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
31 5
|
8天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
8天前
|
消息中间件 缓存 Cloud Native
云原生架构下的性能优化实践与挑战####
随着企业数字化转型的加速,云原生架构以其高度解耦、弹性伸缩和快速迭代的特性,成为现代软件开发的首选模式。本文深入探讨了云原生环境下性能优化的关键策略与面临的主要挑战,通过案例分析,揭示了如何有效利用容器化、微服务、动态调度等技术手段提升应用性能,同时指出了在复杂云环境中确保系统稳定性和高效性的难题,为开发者和架构师提供了实战指南。 ####
22 3
|
8天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####
|
运维 Cloud Native 关系型数据库
活动回顾|阿里云 Serverless 技术实战与创新成都站回放&PPT下载
7月29日“阿里云 Serverless 技术实战与创新”成都站圆满落幕。可免费下载成都站|阿里云 Serverless 沙龙演讲 PPT。
|
人工智能 弹性计算 运维
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
阿里云宣布 Serverless 应用引擎 SAE2.0 将公测上线,多款产品全新升级
70430 53
|
人工智能 弹性计算 运维
阿里云容器服务 Serverless 版(ACK Serverless)全新升级
阿里云容器服务 Serverless 版(ACK Serverless)全新升级
1609 10
|
人工智能 Serverless 开发者
阿里云丁宇:云上开发成为主流,Serverless 定义新范式
阿里巴巴研究员、阿里云智能云原生应用平台总经理丁宇,在阿里云峰会·粤港澳论坛上的发言。
阿里云丁宇:云上开发成为主流,Serverless 定义新范式
|
弹性计算 人工智能 运维
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线
7月31日,阿里云智能云原生应用平台负责人丁宇宣布,Serverless 应用引擎 SAE2.0 将于8月7日公测上线,开源版将于9月30日发布。本次升级围绕极简体验、标准开放、极致弹性三大优势展开,应用冷启动全面提效,支持缩容到 0,应用成本下降 40% 以上。
阿里云宣布 Serverless 应用引擎SAE2.0 将公测上线

热门文章

最新文章

相关产品

  • 函数计算
  • 下一篇
    无影云桌面