《前端serverless 面向全栈的无服务器架构实战》读书笔记

发布时间 2023-03-22 21:08:56作者: 张Sir6

第1章 什么是severless

什么是NoOps

利用自动化运维代替手工运维模式

什么是severless

开发者无需关注服务器资源配置情况、部署情况、操作系统以及依赖软件等在内等所有细节,这一切都由平台完成,开发者只需要专注于业务实现。

serverless是指在应用的构建环节或应用环节都无需对服务器进行操作

云原生计算基金会CNCF

2015年谷歌用go语言重构了内部用于容器编排的项目也就是后来的k8s。随着k8s的发布,谷歌与linux基金会合作成立了cncf(cloud native computing foundation)。

最初云原生主要包括微服务、容器编排、容器三大能力。随着云计算的发展,cncf于2018年重新定义了云原生技术。官方描述如下:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网络、微服务、不可变基础设施和声明式api.

云原生计算基金会cncf致力于培育和维护一个厂商中立的开源生态系统,已推广云原生技术。

serverless应该包含哪几种能力

serverless应该包含任意一种能力

  • 函数即服务fass 即function as a service,提供基于事件驱动的计算服务。开发者以函数片段的方式来管理应用代码,这些函数通过事件或者http请求来触发函数。与传统应用相比,其以更细粒度的函数方式来进行部署。
  • 后代即服务baas 即backend as a service,指的是可以用来替换应用程序中的一些核心能力,且可以通过api的方式提供的第三方服务。通常是我们使用的各个中间件服务,比如数据库、缓存、消息队列等。

前端架构的演化

静态内容展示

主要是以静态内容展示为主,主要展示文字,图片使用的比较少。服务端主要由CGI完成开发。前端只需要编写简单的html页面就可以了。

可交互页面

网景发现当用户填写一个网页表单之后,需要提交整个表单内容才能确认是否填写正确。消耗流量且需要重复多次。网景公司希望通过客户端脚本,让用户在发送表单请求之前就在客户端中完成对表单内容的检查,以提高用户体验和使用效率。

js语言在这个时期诞生,让网页具备了动态运行脚本的能力。

同时服务端领域诞生了asp、php、jsp三大技术。

与之前的CGI相比,js更加容易的编写动态网站,结合js脚本能力,成为复杂客户端的web应用。

同时期bbs、ie6浏览器兼容等成为这个阶段的主要问题。

web2.0

1998年ajax技术被提出,在这之前,服务端处理的每一个请求都需要在浏览器中重新刷新并加载整个网页,用户体验、使用效率方面都不理想,而ajax解决了这部分问题,使得网页局部刷新成为了可能。ajax的大规模普及则在2004年。

2006年jquery诞生,为操作浏览器dom提供了大量强大且易用的api. 同时抹平了浏览器之间的差异,逐渐成为最广泛使用的函数库。

这一时期逐渐分化出前端研发工程师的岗位,前后端协作也开始。️有2种协作模式

  • 第一种是前端研发人员写完静态页面交由给后端工程师改写为动态页面如jsp、php等。后端工程师需要将我们页面写死的固定数据改为动态循环数据。我们将这种模式成为套模板。优势是前端无需了解后端实现,只需要实现静态仿真页面;缺点是功能变更或扩展难,项目上线后原有代码已经与服务端进行融合,因此让前端开发新的仿真页面很难进行替换。
  • 前端研发搭建后端运行环境。也就是前端可以运行后端环境并进行修改,解决了产品迭代的问题。缺点是将不必要的后端代码暴漏给了前端,增加了学习成本。

在这两种模式下,前后端的工作存在大量交互且边界有些模糊。

单页面应用

随着web技术的发展,spa概念被提出。伴随着这个概念还有数十个相关的前端框架。

在这种模式下,通过服务端渲染的页面开始向前端迁移,这时前后端协作的模式发生了变化。前端的所有逻辑都将打包成一个js bundle,因此我们只需要后端提供一个入口html页面就可以加载整个应用。这时后端只需要提供api接口即可完成数据都交换。

当前端发布时,只需要在入口文件中,修改js bundle的版本号即可。前端负责整个view页面的开发,包括与api的对接。这个时候通常是开发的时候相互开发,但前端会将打包后的bundle文件通过入口html引入加载整个应用。

前后端分离

在angular发布的同一年2009年,nodejs也登上了舞台。nodejs的出现让我们前端工程化的成熟。

2015年,基于bff的架构理念被提出。也就是在ui和后端服务之间加入中间层用来处理业务逻辑。

基于serverless的前后端分离

由于增加了bff层,前端需要关注服务器的系统稳定性、可扩展指标,同时需要排查如内存溢出等问题,这是我们之前未接触过的工作甚至有点陌生。后来随着devOps配套工具的成熟,前端可以比较容易的监控日志、异常排查等一系列服务器操作。

云计算工具在一定程度上解决了运维问题稳定性得到了保障,但在bff真实架构中,除了稳定性问题,我们还需要考虑部署成本和服务器成本的增加。

假设伴随着业务发展,移动端、pc端等都需要一个bff中间层,我们要考虑稳定性问题就会采用一个机房多个实例和多个机房部署都策略,但bff层的流量偏低的话会浪费大量的计算资源。

如果能够通过serverless实现bff架构,让前端研发人员仅编写和部署函数,当没有请求的时候基于云原生技术的弹性计算能力这些函数的实例将自动缩容。这样一来,基于serverless的bff不仅降低了前端在服务器运维上的成本,还能快速完成函数的部署,还可以按需计费。