WEB后端架构的一些概念杂谈

目录

什么是框架呢?

什么是web.py

什么是接口

Web Server的soap接口

HTTP API接口

Nginx和uWSGI服务器的通信

什么是Nginx代理服务器

什么是uWSGI接口服务器

什么是WSGI接口

CGI

fastCGI

通信大体流程

正向代理和反向代理


什么是框架呢?

后端框架就是值用于开发的服务器端应用程序的一些可重用的设计,通俗的来说,就是一个实现某种功能的半成品,提供一些常用的工具和基础通用化的组件。它主要就是负责为处理业务逻辑,数据储存,通信协议等功能提供基础的框架,实现交互功能。调用这些框架就可以实现一些常见的业务逻辑。

这些框架大多是简单高效的,能极大地提高我们的开发效率。

一个优秀的的框架,它相当于是一个模板代码库,很多基础性的功能,底层功能操作都已经帮我们实现了,我们只需要专心的实现所需要的业务逻辑就可以了。这样,就大大提高了我们的开发效率,所以技术的发展,多数情况下是为了满足业务的需求。

什么是web.py

web.py是一个轻量级的python web框架,为什么选择用python写呢,原因就是python的开源扩展库很丰富,能够更好的支持业务开发,并且框架大多稳定。

什么是接口

API(Application Programming Interface)应用程序开发接口的缩写

接口就是方法与方法、模块与模块之间的交互程序需要抛出一个调用交互操作的一个写好的方法。

或者是第三方应用程序为主程序提供一些基于数据服务的方法

Web Server的soap接口

soap: Simple Object Access Protocol.(简单对象访问协议)

SOAP定义了数据交互种如何传递消息的规则,可以类比http协议。走spap通过http传输,请求和返回报文都是xml格式的,测试时需要通过工具进行调试和测试。现在使用的比较少见。少数公司还在使用这个接口如医院

HTTP API接口

当使用HTTP API接口时,通常会通过HTTP请求发送数据到服务器并获取响应数据。而JSON作为数据的格式之一,在API通信中扮演着重要的角色。通常情况下,客户端发起HTTP请求时携带JSON格式的数据作为请求体,服务器收到请求后解析JSON数据并进行相应的处理,然后将处理结果以JSON格式返回给客户端。

在使用HTTP API接口时,JSON数据可以包含各种类型的信息,如文本、数字、布尔值、数组和对象等。通过将数据序列化为JSON格式,可以实现不同平台和系统之间的数据交换和沟通,实现数据的统一格式化表示和传递。

Nginx和uWSGI服务器的通信

Nginx和uWSGI都是常用于Web服务器环境的软件,它们通常用于搭建和运行Python Web应用程序。但是两者在Web应用程序部署中扮演着不同的角色。

什么是Nginx代理服务器

Nginx是一个高性能的开源Web服务器,同时也是可以充当反向代理服务器、负载平衡器和http缓存的轻量级,高性能,可扩展的服务器。

它可以处理静态文件和传输,并将动态文件转发给uWSGI服务器。

什么是uWSGI接口服务器

uWSGI是一个Web服务器网关接口(Web Server Gateway Interface,WSGI)服务器,它能够运行Python Web应用程序。通过uWSGI,可以将Python应用程序与Web服务器进行连接,实现Web请求的处理和应用程序的运行。

uWSGI接收来自Nginx的动态请求,并将这些请求传递给Python应用程序进行处理。它提供了一个通用的方式来连接Web应用程序和Web服务器,支持多种语言和框架。

什么是WSGI接口

WSGI是 Web Server Gateway Interface 的缩写。

它是 Python应用程序(application)或框架(如 Django)和 Web服务器之间的一种接口,已经被广泛接受。

有了WSGI,你不用再因为你使用的web 框架而去选择特定的 web server软件。

web 服务器 和 web 框架,分工不同,职责不同(web 服务器专注于接收并解析请
求以调用的方式将请求的内容传web框架),缺一不可,可以说它们是两个组件,共
同协作才能实现web网页的访问,既然是两个组件,那总要定义一些约定俗成的通讯
协议,而这就是WSGI,所以必须有WSGI。

WSGI规范下,Web服务器在转发请求给应用程序时,会传递一些环境变量和其他相关信息给应用程序,以便应用程序能够获取一些关于请求的额外信息,比如设备号、客户端IP地址、HTTP头部信息等。这些环境变量和信息能够帮助应用程序更好地理解和处理客户端的请求。

一些用到的协议的解析,我看了一篇博客写的很好,跟大家分享一下:

网关协议学习:CGI、FastCGI、WSGI、uWSGI - hzhtracy - 博客园 (cnblogs.com)

CGI

是一个通用网关接口(早些年比较通用),它的工作模式是:

  • 创建一个进程

  • 进程处理请求

  • 处理结束后kill进程

CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许 Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。通俗的讲CGI 就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。 CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。

CGI方式在遇到连接请求(用户请求)先要创建cgi的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork- and-execute模式。所以用cgi方式的服务器有多少连接请求就会有多少cgi子进程,子进程反复加载是cgi性能低下的主要原因。当用户请求数 量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。

CGI脚本工作流程:

  1. 浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL。
  2. 服务器收发到请求。
  3. 服务器执行所指定的CGI应用程序。
  4. CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容。
  5. CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档(通常是HTML网页)。
  6. 网络服务器把结果返回到浏览器中。

fastCGI

fastCGI的主要工作方式可以总结为:

  1. 创建主进程(worker)---
  2. 创建线程(子进程)----
  3. 如果请求过多,会再创建(进程线程),过少也会调整

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析 器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。FastCGI像是一个常驻(long-live)型的CGI, 它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。CGI 就是所谓的短生存期应用程序,FastCGI 就是所谓的长生存期应用程序。由于 FastCGI 程序并不需要不断的产生新进程,可以大大降低服务器的压力并且产生较高的应用效率。它的速度效率最少要比CGI 技术提高 5 倍以上。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。

FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解 释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、 Fail-Over特性等等。FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多 个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让 HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

通信大体流程

Client发送请求,然后Nginx服务器拿到请求之后会判断当前请求是否是访问静态资源,如果是要访问静态资源的话就读取静态资源直接返回给客户端。

但是如果Client请求的是动态资源的话就会交给uWSGI服务器,uWSGI服务器会根据自身的uwsgi协议和WSGI协议找到对应Django框架中的应用程序做逻辑处理,将返回值发送到uwsgi服务器。

然后uwsgi服务器在返回给nginx,最后nginx将返回值返回给client进行渲染展示给用户。

正向代理和反向代理

正向代理就是为客户端进行服务器配置的代理,即为代理服务器为客户端服务。当客户端发送请求的时候,会通过代理服务器向目标IP发送请求。

使用正向代理的作用:

  1. 可以通过代理服务器访问一些受限的资源,不是使用自己的客户端去请求资源。

  2. 可以做缓存,加速访问资源,将频繁访问的资源缓存起来,加速客户端的访问。

  3. 对客户端授权,上网访问认证。通过代理服务器的认证模块,可以实现对客户端访问的控制和限制,确保只有经过认证的用户能够访问特定的资源或服务。

  4. 代理服务器能记录用户的访问记录和上网行为,对外隐藏了这些信息。

总的来说:

正向代理充当客户端和互联网资源之间的中间层,为客户端提供访问受限资源的途径,并且可以实现访问控制、过滤、缓存和加速等功能。在特定场景下,正向代理能够提升网络访问效率、保障网络安全。

反向代理和正向代理相反,他是为服务器进行服务的,当我们向服务器发送一个请求的时候,代理服务器就会向内部的服务器转发请求的响应。

使用反向代理的作用:

  1. 保证内网的安全,阻值web攻击,大型网站通常都将反向代理作为公网访问地址,而真正的web服务器是内网。

  2. 负载平衡,通过反向代理服务器可以优化各个服务器的负载。

    负载平衡的策略:

    1. 轮询分配
    2. IP负载平衡
    3. 哈希算法平衡
    4. 一致性哈希
  3. web加速,反向代理能压缩入站和出站数据并缓存常见的请求内容,还能够执行其他任务,减轻Web服务器的负载。

  • 38
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值