持续集成与部署(四):部署 前后端分离

简介: 持续集成与部署(四):部署 前后端分离

1. 前后端分离的意义

1.1 分离前的前后端开发

后端程序渲染 HTML 模板,代理 JS / CSS / SVG / PNG 等前端静态资源。

image.png

  • 前后端不分离的问题

    1. 前后端开发协作困难
    2. 发布频率耦合
    3. 联调效率低
    4. 性能低下:前端资源的请求耗尽连接

1.2 分离后的前后端开发

  • 主要包含两个方面

    1. 工程拆分:不在同一工程中开发,有个字独立的开发节奏、构建发布策略
    2. 技术拆分:使用各自熟悉和易用的技术,两者完全通过 RESTFUL API 交流
  • 前后端分离的好处

    1. 解耦前后端架构
    2. 分工明确、界限清晰
    3. 提高开发效率
    4. 支持前后端不同的迭代频率
    5. 支持各自更适合的构建发布策略
  • 为什么现在可以实现前后端分离

    因为前端技术的工程化模块化组件化的方案已经进入成熟期,工具链完善,不需要作为后端的附庸了。

  • 现状

    现在前后端分离的方案可以说是百花齐放了。

    SSR 同构到 BFFServerlessGraphQL...

2. 前后端分离的实现

2.1 洪荒时代:不分离

在前后端不分离的时代,最典型的就是 MVC 架构了

image.png

MVC 架构中,前端作为 View 层通过后端的 Controller 去渲染,构建和发布的流程上,前端是后端的复用

2.2 探索时代:Nginx代理静态资源

为了实现前后端分离,有人提出了采用 Nginx 代理静态资源这种方案。

这种方案不使用页面模板,把 HTML 直接作为静态资源,通过 Nginx 或者 Apache HTTP Server 代理 HTML 和静态资源。

如下图的 Nginx 配置,它直接代理了所有对 HTMLCSSJS 的请求,对 /api 的请求会转发到真正的服务上。
image.png

Nginx代理静态资源是一个比较激进的方案,这种方式可以实现前后端分离,不过它的问题也不少:

  1. 只适合纯客户端渲染(CSR),只适合 SPA这种单页面应用(页面的本身就是一个空的div,具体内容由js代码在浏览器中生成)
  2. 首屏性能差(浏览器下载JS、执行JS都需要过程),对 C 端用户不友好(白屏)
  3. SEO 效果约等于0

2.3 探索时代:后端渲染页面 + 静态资源代理

为了解决 SEO 的问题,又有人提出了 后端渲染页面 + 静态资源代理 这种方案。

这种方案的特点是依然由后端渲染 HTML 模板,但是其他静态资源从 CDN 拉取。
前后端工程在构建时组合,后端此时拿到模板,模板中引用的资源的 URL 指向 CDN

这种方案解决了 SEO 的问题,也成功的拆分了前后端工程,但是依然存在问题:

  1. 流程依然耦合,多了一步模板联调
  2. 前端发布导致后端发布
  3. 前端需要学习后端模板语法(后端如果是 JAVA,那页面模板很可能还是 JSP

2.4 黄金时代:大前端

直到 Node BFF 的出现,前后端分离才进入了一个比较理想的时代

Node BFF:Backend For Frontend,属于前端的后端。利用 NodeJS 编写 BFF 层,可以用于模板渲染和接口聚合。

image.png

  • 同构

    同构是利用 Vue/React 这种前端框架提供的服务端渲染能力,在服务端就将页面渲染好,本质上还是一个BFF。
    但是使用 SSR 的好处是,我们可以像普通的 SPA 单页面一样去写应用,并且它还解决了普通的 SPA 单页面首屏性能低、SEO 效果差问题。

    SSR的代表是 VueNUXTJSReactNEXTJS

image.png

相关文章
|
3月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
5月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
3月前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
74 9
|
3月前
|
监控 Devops 测试技术
DevOps实践:持续集成与部署的自动化之路
【9月更文挑战第30天】在软件工程的世界中,DevOps已成为提升开发效率、确保软件质量和加快交付速度的关键策略。本文将深入探讨如何通过自动化工具和流程实现持续集成(CI)与持续部署(CD),从而优化软件开发周期。我们将从基础概念出发,逐步深入到实际操作,最终展示如何构建一个高效的自动化流水线,以支持快速迭代和高质量发布。
69 7
|
4月前
|
Devops jenkins Java
DevOps实践:持续集成和部署的自动化之旅
【9月更文挑战第20天】在软件开发的世界里,速度和质量是至关重要的。本文将带领读者踏上一场自动化之旅,深入探索DevOps文化中的两大支柱——持续集成(CI)和持续部署(CD)。我们将通过一个实际的案例,展示如何利用现代工具和技术实现代码从编写到部署的无缝转换,确保软件交付的高效性和可靠性。准备好让你的开发流程变得更加流畅和高效了吗?让我们开始吧!
|
3月前
|
安全 Java 测试技术
ToB项目身份认证AD集成(二):快速搞定window server 2003部署AD域服务并支持ssl
本文详细介绍了如何搭建本地AD域控测试环境,包括安装AD域服务、测试LDAP接口及配置LDAPS的过程。通过运行自签名证书生成脚本和手动部署证书,实现安全的SSL连接,适用于ToB项目的身份认证集成。文中还提供了相关系列文章链接,便于读者深入了解AD和LDAP的基础知识。
|
4月前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
229 1
|
5月前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
5月前
|
监控 安全 Devops
DevOps实践:持续集成和部署的自动化之旅
【8月更文挑战第30天】在软件开发的快节奏世界中,DevOps已成为推动项目成功的关键因素。本文将深入探讨如何通过持续集成(CI)和持续部署(CD)实现自动化,以加速开发流程、提升软件质量并确保快速交付。我们将从基础概念出发,逐步过渡到实际操作,最后讨论如何克服实施过程中的挑战。
|
5月前
|
监控 jenkins 测试技术
怎样做才能实现持续集成、部署
【8月更文挑战第28天】为了实现高效的持续集成与部署,需从技术、流程与文化三方面着手。技术上采用如Git的版本控制、自动化构建工具(Maven、Gradle)、自动化测试及持续集成服务器(Jenkins、GitLab CI/CD),并通过Docker与Kubernetes进行容器化与编排。流程层面强调团队协作、代码审查、持续部署策略以及系统的监控与反馈机制。文化层面上,提倡持续学习、改进及风险管理。这些措施共同促进了软件开发的高效与质量提升。
71 1

热门文章

最新文章