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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
函数计算FC,每月15万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 架构模式
相关文章
|
5天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
29 1
|
1天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
7天前
|
消息中间件 运维 开发者
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,从其核心概念、设计原则到实际部署过程中面临的挑战进行了全面剖析。不同于传统的单体应用,微服务通过将复杂系统拆解为一系列小型、独立的服务,提高了系统的灵活性和可维护性。然而,这种架构的转变也伴随着服务间通信、数据一致性、部署复杂性等新问题。本文旨在为开发者提供一套应对这些挑战的策略,同时分享一些成功案例,以期促进微服务架构的有效实施。 ####
|
9天前
|
缓存 负载均衡 API
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的可扩展性、灵活性及易于维护的特点,成为众多企业后端开发的首选架构模式。本文将深入探讨微服务架构的核心理念,通过具体案例分析其在实际应用中的实践策略与面临的挑战,为读者提供一份详尽的微服务架构实施指南。 ####
|
6天前
|
安全 测试技术 持续交付
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过一个虚构项目案例,详细阐述了从单体架构向微服务架构转型的过程、面临的挑战及解决方案。不同于常规摘要的概述性质,本文摘要旨在直接引入核心议题——如何有效实施微服务以提升系统的可扩展性、灵活性和容错能力,同时揭示转型过程中常见的技术陷阱与最佳实践策略,为读者提供实战指南。 ####
13 0
|
18天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
17天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
17天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
37 1
服务架构的演进:从单体到微服务的探索之旅
|
15天前
|
消息中间件 监控 安全
后端架构演进:从单体到微服务####
在数字化转型的浪潮中,企业应用的后端架构经历了从传统单体架构到现代微服务架构的深刻变革。本文探讨了这一演进过程的背景、驱动力、关键技术及面临的挑战,揭示了如何通过微服务化实现系统的高可用性、扩展性和敏捷开发,同时指出了转型过程中需克服的服务拆分、数据管理、通信机制等难题,为读者提供了一个全面理解后端架构演变路径的视角。 ####
38 8
|
16天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
42 5

热门文章

最新文章

相关产品

  • 函数计算