首页 > 其他分享 >Serverless架构下的前后端一体化

Serverless架构下的前后端一体化

时间:2023-01-26 10:55:16浏览次数:36  
标签:Serverless 架构 前端 前后 一体化 Midway

天下大势,分久必合,合久必分。其实,技术的发展也遵循此规律。以Web应用的前后端为例,从前后端一体化到前后端分离,是为了解决高可用、高并发的问题;从前后端分离到前后端一体化,则是在Serverless架构的支持下,自然地解决了高可用、高并发等问题,同时使业务逻辑变得更具整体性,更易于开发,让开发者可以更专注于业务逻辑,提高整体的效率。

1 前后端一体化的发展

早些时候,一些业务的开发没有前后端概念,或者说是前后端是一体化的,工程师更多关注的是业务逻辑的开发;但是随着时间的推移、技术的进步和业务需求的变更,高可用、高并发逐渐成了前后端一体化项目的瓶颈。为了更好地解决前后端一体化中高可用、高并发的问题,前后端逐渐分离,也逐渐有了更加明确的分工。前后端分离后的Web结构简图如下所示。

 

前后端项目分离

前后端分离的最大好处是可以解决高可用、高并发的问题;同时,前端工程师可以更好地关注页面的还原,以及页面的逻辑,后端工程师可以更关注后端接口的稳定性,运维人员则可以更关注整体业务的稳定性。

但是,事实并非如此。前后端的分离,虽然在一定程度上解决了高并发、高可用的问题,却带来了更严重的问题:原本一体化的应用逻辑从此划分为前端逻辑和后端逻辑,产生了割裂,过去,前后端之间的界限往往是模糊的,分离之后开发联调的成本提高了,业务上线周期也因此进一步延长了;另外,前后端技术发展速度可能不均衡,这也给整个业务的迭代带来了极大的负面影响,前后端的代码抽象程度也随之提高,后期维护的复杂度也变得更高,因此运维成本也因前后端的分离而进一步增加了。

前后端的分离解决了一个问题,却带来了更多问题。而这些额外带来的问题,往往也是当今许多Web项目面临的问题。

随着Serverless架构的不断演进,其逐渐对前后端一体化的发展起到了促进作用。从前后端一体化到前后端分离是为了解决高可用、高并发的问题,而Serverless架构凭借着函数计算的弹性自然地解决了这些问题。同时,函数计算本身可以让业务开发者更关注业务逻辑,按量付费模式使函数计算具有成本更低的优势。因此,前后端一体化再次被人所关注。随着Serverless技术的不断发展,前后端一体化技术也再次成了众多开发者,尤其是前端开发者关注的焦点。基于Serverless架构的前后端一体化如下所示。

 

基于Serverless架构的前后端一体化

在基于Serverless架构的前后端一体化项目中,业务应用层主要包括前端、后端和共享逻辑三个部分:

  • 前端即用户的页面,一些静态资源部分;
  • 后端即一些业务逻辑的接口,可以对数据库进行增删改查操作,也可以处理一些计算任务;
  • 所谓共享逻辑,是指前后端的共享逻辑,过去由于前后端分裂,很难做到前后端层面的代码抽象,在前后端融合后,这件事变得简单且自然。

基于Serverless架构的前后端一体化项目在享用Serverless架构的技术红利的同时,也进一步推动了前端技术的发展,同时也逐渐引导前端角色向全栈开发角色转型。阿里巴巴Midway FaaS项目以前后端一体化为核心,在其Mydway Serverless2.0的发布会上,曾以“全栈”为题,讲述基于Serverless架构的Midway Serverless前后端一体化的全栈解决方案,如下所示。

 

基于Serverless架构的Midway FaaS前后端一体化的全栈解决方案

在Midway Serverless方案中,我们可以明显看到三个核心点:

  • 同仓库、同依赖、同命令;
  • 共享src、类型、代码;
  • 一起开发、一起部署。

Serverless架构下的前后端一体化项目发展至今,不仅局限于从前端到后端,也为打通从前端到后端再到数据库的全链路而不断努力,从而实现全链路类型的安全方案。

例如Prisma可以实现数据库中的一个user表通过TypeScirpt映射到后端和前端的类型校验上,如下所示。

 

从前端到后端再到数据库的全链路打通

2 Serverless与前后端一体化

基于Serverless架构的前后端一体化项目,可以根据业务需求的不同而组合使用不同的产品来完成,例如依靠函数计算和存储产品实现业务需求,如下所示。

 

基于Serverless架构的前后端一体化服务端结构简图

这种架构非常简单,只需要将函数计算与对应的存储产品结合,即可实现前后端一体化的部署。

但是,通过函数计算建设Proxy层存在一定的不合理性:通过对象存储、CDN等暴露的静态资源产生的流量费用,要比通过函数计算暴露产生的流量费用低很多;函数计算在当前环境下存在冷启动的情况,因此通过函数计算建设Proxy层会产生性能问题。

如果需要对上述架构进行优化,我们可以加入API网关或者CDN等产品,如下所示。

 

基于Serverless架构的前后端一体化服务端结构简图

通过API网关或CDN建设Proxy可以实现分流,在一定程度上保证了性能。部分厂商的CDN具有边缘FaaS能力,如果可以在部分节点进行后端服务的运行反馈,整体性能将进一步提高。

当基于Serverless架构的前后端一体化项目实现时,我们不需要自己建设整体的后端服务架构,也不需要自己制定客户端资源描述规范,因为目前已经有相当数量的基于Serverless架构的前后端一体化项目工具(包括脚手架、项目开发、项目部署、后期运维等全生命周期的功能支持)帮助我们一键部署前后端一体化应用。阿里巴巴开源的Midway Serverless项目就是一个比较典型的例子。接下来我们以Midway Serverless工具为例,部署一个前后端一体化应用。

在使用Midway Serverless工具之前,首先需要安装工具:

npm install @midwayjs/cli -g --registry=https://registry.npm.taobao.org

安装命令行工具之后,可以创建一个前后端一体化应用:

mw new my-app

创建时,可以选择:

faas-hooks-react - A serverless boilerplate with react and use hooks

完成上述操作后显示如下所示。

 

Midway Serverless初始化前后端一体化项目

完成之后,进入项目,并将其部署到云端:

cd my-app && npm run deploy

稍等片刻,可以看到系统输出“Deploy success”,即该项目已完成部署,如下所示。

 

Midway Serverless部署前后端一体化项目

此时,打开浏览器,输入系统生成的地址,如下所示。

 

预览基于Midway Serverless部署的前后端一体化项目

可以看到,一个前后端一体化的项目已经完成了部署:

  • /src路径,将会被路由到静态资源(前端资源);
  • /apis路径,将会被路由到函数计算(后端服务)。

至此,使用Midway Serverless工具快速实现了一个基于Serverless架构的前后端一体化项目。

3 总结

随着Serverless架构的不断发展,以及前端技术的不断演进,Serverless架构和前端技术的结合也越来越紧密。通过Serverless架构可以快速部署一个SSR应用,也可以实现一个前后端一体化项目,Serverless架构凭借其弹性伸缩能力和分布式架构,让很多传统架构下较难实现的前端技术变得更加简单与便捷。与此同时,Serverless架构的按量付费模式和设计理念,使项目开发者能够在业务逻辑的实现上投入更多精力,并大幅度降本提效。

 

标签:Serverless,架构,前端,前后,一体化,Midway
From: https://www.cnblogs.com/muzinan110/p/17067612.html

相关文章

  • 京东达达核心系统架构:从短平快到体系化的设计精要
     前言 商品系统是电商系统最基础、最核心的系统之一。商品数据遍布所有业务,首页、门店页、购物车、订单、结算、售后、库存、价格等,都离不开商品。商品信......
  • 京东达达核心系统架构:从短平快到体系化的设计精要
     前言 商品系统是电商系统最基础、最核心的系统之一。商品数据遍布所有业务,首页、门店页、购物车、订单、结算、售后、库存、价格等,都离不开商品。商品信......
  • 京东达达核心系统架构:从短平快到体系化的设计精要
     前言 商品系统是电商系统最基础、最核心的系统之一。商品数据遍布所有业务,首页、门店页、购物车、订单、结算、售后、库存、价格等,都离不开商品。商品信......
  • 京东达达核心系统架构:从短平快到体系化的设计精要
     前言 商品系统是电商系统最基础、最核心的系统之一。商品数据遍布所有业务,首页、门店页、购物车、订单、结算、售后、库存、价格等,都离不开商品。商品信......
  • spark原理:概念与架构、工作机制
    一、Hadoop、Spark、Storm三大框架比较Hadoop:离线海量数据批处理,基于磁盘的Spark:基于内存。Spark特点:运行速度快,使用DAG执行引擎以支持循环数据流与内存计算,2、容易使用:多......
  • Ceph MDS服务的多主一备高可用架构
      cephmds高可用  Cephmds(metadataservice)作为ceph的访问入口,需要实现高性能及数据备份,而MDS支持多MDS结构,甚至还能实现类似于rediscluster的多主从结......
  • Serverless工作流程
    在实际生产中,Serverless架构通常都是FaaS与BaaS的结合,并且具备弹性伸缩和按量付费的特性。如下所示,当开发者想要开发一个项目的时候,通常只需要根据FaaS提供商所提供的Runti......
  • caddyserver 架构简单说明
    内容来自官方文档,通过了解可以更好的学习以及使用caddyserver概述caddy包含了command,corelibrary,以及modules,command主要是关于cli命令的corelibrary主要进行配置......
  • KubeFed架构设计
    KubeFed(KubernetesClusterFederation,Kubernetes集群联邦)是Kubernetes项目下的多集群特殊兴趣小组(SpecialInterestGroup,SIG)发布和管理的。集群联邦实现了单一集群统一管......
  • Argo CD核心概念及架构设计
    ArgoCD的核心概念Application(应用):一组Kubernetes资源清单的统一定义,属于CRD(CustomResourceDefinition,定制资源定义)资源。Applicationsourcetype(应用的源仓库类型):目......