从Python看Web架构的发展

更新日期: 2021-03-02 阅读: 2.6k 标签: 架构

静态web与动态web

静态WEB程序中,客户端使用WEB浏览器(IE、FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需要得到哪个页面,所有的请求交给WEB服务器,之后WEB服务器根据用户的需要,从文件系统(存放了所有静态页面的磁盘)取出内容。之后通过WEB服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果。


由于这种应用不能与用户交互、无法显示个性化的内容,所以动态网页技术应运而生。

动态WEB程序中,程序依然使用客户端和服务端,客户端依然使用浏览器(IE、FireFox等),通过网络(Network)连接到服务器上,使用HTTP协议发起请求(Request),现在的所有请求都先经过一个WEB Server 来处理,用于区分是请求的是静态资源还是动态资源。

如果WEB Server 发现客户端请求的是静态资源,则WEB服务器从静态文件系统中取出内容,发送回客户端浏览器进行解析执行。

如果WEB Server 发现客户端请求的是动态资源,则先将请求转交给 Web应用程序,由Web应用程序组织数据,最后把处理结果交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器。



web服务器与web应用程序的接口


gateway interface 是 web server 和 web应用程序 之间的接口规范,这种接口规范规定了web服务器:

如何将 request 参数化后传递给 web应用程序,web应用如何将它的输出发送给 webserver,

以及如何调用 web应用程序。

CGIFASTCGIWSGI 都是web服务器 与 web应用程序的接口规范,如:

web Server + CGI + shell + DB
web Server + FastCGI + shell php + DB
web server + Serverlet + java + MVC
web Server + WSGI + Python + MVC


web应用程序的再抽象

随着web应用的动态化, 传统的静态web server对于动态内容无能为力,CGI技术用于生成动态内容。 但是CGI技术的性能很差, 主要是因为对于每个请求都要创建一个进程来运行cgi程序, 而进程创建的开销比较大, 严重拖慢了响应速度。随后fastcgi技术出现了, 为了解决cgi技术中存在的问题, fastcgi使用一种进程管理器, 用来维持一个进程池,提前创建进程,从而提高了响应速度。


uWSGI 是一个 WSGI 协议的实现,包括四个部分:

实现了 uwsgi协议, 与web server 通信
web server 内置支持协议模块:
application server协议支持模块: 实现了 WSGI, 与 python 框架交互
进程控制程序: 为web request 的处理创建工作进程


为什么要隔离 framework 和webserver?

如果在nginx中直接用WSGI, 那么 nginx线程中就要启动python解释器。通常最好在与主Web服务器不同的进程中运行Python。 这样,Web服务器可以具有许多微小的线程,这些线程可以非常快地提供静态内容,而单独的Python进程又大又笨重,并且每个进程都在运行自己的Python解释器。

更灵活。开发人员可以从Green Unicorn切换到uWSGI,而无需修改实现WSGI的应用程序或框架。

易于扩展。一次为成千上万个动态内容的请求提供服务是WSGI服务器的任务,而不是框架,职责分离对于有效地扩展和分派Web流量很重要。


web框架

Web框架的作用主要是方便我们开发 web应用程序,HTTP请求的动态数据就是由 web框架层来提供的。没有框架时,实现业务逻辑要面对如何设计路由逻辑,数据如何访问, 视图如何设计等问题。

以MVC开发模式来说, 我们要实现MVC 这三个方面的各种细节。 每次开发一个新的app都有大量重复的工作要做。 这些重复的固定的工作与流程被抽象出来,每次只用开发相应的业务逻辑, 大大加快了web开发的速度。


原文地址:https://www.cnblogs.com/stay-real/p/14464321.html


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/10178

相关推荐

前端架构师对于框架的技术选型

前端技术发展日新月异,互联网上出现的新型框架也比较多,如何让新招聘的人员能够直接上手接替项目,或者有相关人员请假,替补人员的接替工作,如何做到不同前端工程师的开发的差异性更小

基于 NodeJS 的 serverless 架构实践

通过将 BFF 构建于 serverless 之上,将人工智能实验室(天猫精灵)数十个中后台应用整合到了一个统一入口。用云函数的方式取代了传统基于 NodeJS 的 BFF 层,提供了在一个站点下不同应用以及不同环境的快速切换能力

C/S和B/S两种架构区别与优缺点分析

C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据

业务架构师给你一些建议

搬运工: 付老师讲述了自己成为业务架构师的一些个人经历,并且也给出了学习建议,最后推荐了一些不错的书籍。希望对你成为业务架构师有帮助或者启发,也可以在完成业务开发建模等有所帮助。

怎么判定web前端架构师的能力高低?

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。传统软件架构描述的对象是直接构成系统的抽象组件,侧重于系统的抽象、拆分、组织方式等

高级架构设计师 推荐书籍

关于程序员类的技术书籍有很多,但是往往没有时间阅读,下面的这些书籍,是由John Sonmez(《软技能》作者)精选的架构经典书籍,可以帮助你提高技术技能,让你成为一名更好的程序员

微内核架构在大型前端系统中的应用

架构和框架是独立的,本文仅仅是提出一种架构思路,而且这个架构也在百度的某款用户量很大的复杂前端产品中得以应用。基于这一套弹性架构并结合Vue/React的现代化开发理念,可以很好的完成高复杂度的前端系统。

如何架构一个中后台项目的前端部分?

不管是前端抑或后端,从零开始做一个新项目避免不了技术选型这一块,其应该也是最先需要考虑的内容,之后的一切都会建立在这之上。这篇文章便主要来谈谈在架构一个中后台系统的前端部分上我的实践点。

Vue实战_从目录结构谈可扩展项目架构设计

很多人都会用项目脚手架,也会跑hello world,然后再写写简单的todolist。但是再往下深入就难了。比如很多教程和老师都会说,大家要多问一个为什么。其实我想说多问你妹啊。我都不知道问为什么怎么多问?

微服务架构 VS 单体架构

在软件行业,微服务架构是一种重要的发展趋势。这一趋势,不仅仅是对企业内的IT信息系统建设,甚至在企业向数字化转型方面,都有着深远的影响

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!