WEB架构 |
(1)简易拓扑图示:
(2)后端资源分类:
-
静态资源:(永恒不变的资源和可变的资源)
①图片:一旦创建好,图片资源文件将不再改变。图片数目多,占用磁盘空间大,一般使用单独的图片服务器。优化:分布式存储/缓存策略(缓存时间可较长)
②HTML、CSS、JS:文本文件,前端程序员可以修改这些文件,但修改次数较少,一段时间内保持不变 -
动态资源
内容有后台程序动态生成,比如查询数据库后,将查询的结果生成为HTML
(3)PC端访问一个网页的过程(WEB原理)
- ①浏览器(client):访问一个URL(例如:https://www.XXX.com/index.html) --> http请求报文header 首行 --> server加载资源,并构建响应报文
- ②server将html文件响应给client(http响应报文正文部分) html标签和数据 --> 浏览器(解析HTML文件内容 --> 解析为DOM(document object modle --> 渲染))
==> 目前为止或者一开始仅响应html文件,浏览器第一次只发了一个请求。
- ③当浏览器在解析HTML文件内容时,发现<script src=‘index.js’> --> 此时浏览器将发起新的HTTP请求
发现<img src=‘test.png’> --> 此时浏览器又将发起新的HTTP请求
main.css --> http请求
==> 以上是在解析html文件内容时,浏览器再向WEB server发起的http请求,其中.js、.css、.png … 请求均为静态资源请求
==> 因此浏览器不是同时向WEB server发起诸多的资源请求的。
==> JS代码中AJAX request请求,异步请求
https://www.XXX.com/index.jsp(动态请求) --> Tomcat --> Java --> mysql
动态生成HTML内容 <--
(4)移动端
-
JS开发(now):Nodejs时代、JS开发都使用框架则对于一个小型网站,JS文件少则几万个,但是如果这些JS文件仅仅是因为使用浏览器或者APP访问一下,JS上万的文件传输至客户端? JS的这上万的文件由于相互依赖,导致一次访问需要传输上万的JS资源,(可能使用仅仅只有几千几万行代码)。目前将这上万的JS文件通过代码扫描的方式,找到使用的类和函数,将使用的资源重新打包成一个文件,然后将这一个文件下载至客户端,但是即使这样打包,一个JS文件小则1M/2M,PC端可以抗住这样的流量,但是4G流量就不一定能抗住这样的流量,因此需要提前安装APP,装APP时会将这些静态资源(JS文件)直接装在本地。因此目前在移动端,安装APP时就将静态资源放本地了(图片还是要去WEB server去请求)
-
WEB APP访问:
①内置了HTML和JS文件,不需要从静态WEB服务器下载JS和HTML,目的是为了减少文件的发送,现代前端开发使用的JS文件太大和太多
②有需要才从图片服务器请求图片
后台应用架构 |
WEB图示中的业务服务器
单体架构 (现在已经不适用现在的业务开发)
JSP、servlet
单体架构不管项目多么打,都打包成一个jar、war部署
服务器有开源的Tomcat、jetty。商业的有Jboss、weblogic、WebSphere、GlassFish
Dobbo
分布式服务框架
将单体程序分解成多个功能模块,模块之间使用Dubbo框架提供的高性能RPC(远程过程调用)通信
阿里开源贡献给ASF,目前已经是Apache的顶级项目
内部协调使用Zookeeper,实现服务注册、服务发现、有服务治理
spring cloud 微服务
将单体应用拆分为粒度更小的单一功能服务
RPC通信