一、 什么是Web应用?
Web应用是运行在服务器上,且用户可通过浏览器或其他客户端远程访问使用的应用程序。Web应用包括前端和后端(服务端)两种,前端负责用户界面和交互,后端负责数据处理和业务逻辑。
二、Web应用(包括前端、后端)的数据流
![](https://img.haomeiwen.com/i3330184/eed3b04e77c6307b.png)
注:图中客户端和服务端通信的协议是Http协议,其他协议基本数据流程也是如此。
CS/BS:如上图,一个Web应用往往是一个更大平台或者系统的一部分,多个用户通过客户端/浏览器来访问使用Web应用,这种多对一的整体架构叫做CS架构(Client/Server,客户端/服务器模式)或者 BS架构(Browser/Server,浏览器/服务器模式)。
三、Web框架相关概念
Web应用基本数据流程是:监听特定协议约定的端口→从该端口获取到协议数据包后→解析数据→根据解析的结果分发给不同的方法处理→最后把处理的结果封装成协议数据包发送出去。
这其中有一部分功能是依赖具体业务的,比如拿到业务数据如何处理、返回什么数据;有一部分功能是不依赖具体业务的,比如监听端口并获取协议数据,解析协议数据包、将业务处理结果封装成协议数据包,将数据包发送给请求者等等,这些非业务功能以及数据处理流程是公共能力(所有Web应用可以复用),把它们一个个抽离出来形成一个软件包,这个包含众多公共能力的软件包就是Web框架。Web框架使开发者可以专注于业务逻辑而不是通信、数据分发、数据解析等通用技术的实现细节,大大加快了Web应用的开发速度。
随着Web应用业务和技术的发展,一个个公共能力被抽离并添加到Web框架中,Web框架的功能也越来越丰富,比如端口监听、路由管理、 协议数据解析和封装、数据发送、中间件支持、错误处理等等,其下面简单介绍下路由管理、中间件、Engine:
3.1 路由管理
路由作用就是根据请求数据的url和相关参数把数据分发到对应的处理方法。最简单的路由管理也需要一个路由map(key是url,value是方法)和注册Api、数据解析能力(能够从数据中获取url)。
3.2 中间件
中间件(Middleware)是指在请求数据流程中拦截、处理请求和响应的组件。在 Web 框架中,中间件用于在请求到达路由分发的处理方法之前或响应返回给客户端之前,对请求和响应进行预处理、修改或执行额外的操作,一般在客户端网络请求框架(Okhttp)中它叫拦截器,中间件可以用于执行各种任务,包括但不限于:
- 请求日志记录:记录每个请求的信息,如时间、方法、路径等。
- 认证和授权:验证请求的身份信息,并决定是否允许访问某些资源。
- 错误处理:捕获和处理请求过程中发生的错误。
- 请求修改:修改请求对象,如添加自定义头部或参数。
- 响应修改:修改响应对象,如设置头部或状态码。
- 性能监控:收集和报告请求的性能数据
中间件跟拦截器一样,一般有内置中间件和自定义中间件,都可以通过Web框架方便的配置和添加。
3.3 Engine
Web框架提供了各种各样的公共能力,但在面向对象的开发语言中,使用这些能力我们需要一个对象,这个对象我们可以称之为权利机构,它是框架方法管理和使用的核心,我们首先要拿到它的实例才能进行各种能力和方法的使用。这个权利机构在Gin中叫Engine,在Android中叫Application(或者其他Context的实现类),在Express (Node.js)也叫Application,在ASP.NET Core (C#)叫WebHost。
四、负载均衡
如下图,当客户端访问量越来越大,一个Web服务器已经不能满足,所以将Web应用安装并运行在多个服务器上。这时候就出现一个问题,当有新的客户端请求到来,应该让哪个服务器响应呢。负载均衡就是做这个的,它是一个智能的分发器,把来自客户端的请求(负载),均衡的分配到各个服务器上,以达到提升整体响应速度的目标。
![](https://img.haomeiwen.com/i3330184/fd4eaefed3452167.png)
五、部署
从具体功能来看:部署=程序安装+启动运行,但服务端有两个限制因素
- 当服务端上线运行后,原则上是不能停机的;
- 服务端应用运行在多个主机上,如果不能“同时”部署,就会出现同一个用户可能在不同时段访问不同机器的时候出现了业务逻辑不一致,甚至数据不一致的问题。
在这两条限制因素下出现了各种部署策略。
六、云服务
最初搞服务端应用的开发者是把应用部署到自己的电脑(服务器)上,开发者还需要保持自己电脑一直不断电、系统运行良好、系统上各种服务正常等,这对于个人开发和小公司是不太友好的,比如你电脑突然断电、系统崩溃,被病毒入侵死机,并且你对修电脑硬件和系统是外行,这样开发一个服务端应用学习成本很高。
后来有公司把这些IT基础设施的管理和运维工作和具体业务剥离,并把他们以资源和服务形式(比如说购买双核、10G内存、10T硬盘、系统是Linux云主机)售卖,开发者购买后就可以把自己的程序部署在这些三方公司提供的服务器上了—— 这就是云服务的雏形了,开发者专注于自己的软件开发,云服务商则会进行基础设施的管理和运维。
七、前端与服务端
相同点
1 服务器处理请求:无论是提供API还是网页,服务器都会接收和处理客户端发送的HTTP请求。
2 路由处理:服务器使用路由机制,将不同的URL路径映射到相应的处理函数。
3 响应生成:服务器处理请求后生成响应,并通过HTTP协议返回给客户端。
4 部署: 都是程序安装+启动运行,但因为业务不同,使用的方案有所不同。
差异点
-
请求和响应的内容:
-
服务端:通常返回数据,数据格式多为JSON、XML等结构化数据。API通常被前端应用、移动应用或其他服务消费。
- 示例请求:
GET /api/v1/users
- 示例响应(JSON):
{"id": 1, "name": "John Doe", "email": "john@example.com"}
- 示例请求:
-
前端:通常返回HTML页面,包含文本、图像、样式、脚本等,直接用于在浏览器中渲染和展示。
- 示例请求:
GET /home
- 示例响应(HTML):
- 示例请求:
-
服务端:通常返回数据,数据格式多为JSON、XML等结构化数据。API通常被前端应用、移动应用或其他服务消费。
<!DOCTYPE html>
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>Welcome to the Home Page</h1>
</body>
</html>`
</pre>
- 响应内容不同带来的技术栈、开发工具、性能、安全策略等一系列差异。
网友评论