C/S架构
- 比较早的软件架构,主要用于局域网内,也叫客户端/服务器模式
- 第一层:用户表示层 -- 客户端系统上结合了界面显示与业务逻辑
- 第二层:数据库层 -- 通过网络结合数据库服务器
- 客户端不仅仅是一些简单的操作,也会处理一些运算,业务逻辑等,也就是说客户端也做着一些本该由服务器来做的事
- 优点:
- 界面和操作可以很丰富(客户端操作界面可以随意排列,满足客户需求)
- 安全性能很容易保证(只有两层的传输)
- 由于只有一层交互,响应速度很快(直接相连,中间无阻隔,比如QQ,那么多人在线,我们也不觉得慢)
- 缺点:
- 适用面窄,通常用于局域网中。需要专门的客户端,不能跨平台
- 用户群固定。软件需要安装才可使用,因此不适合面向一些不可知用户
- 维护成本高,一次升级,所有客户端程序都要发生改变
B/S架构
- Browser/Server,即浏览器/服务器架构
- Browser指的是web浏览器,极少数事务逻辑在前端实现,但主要业务逻辑还是在服务端实现
- 无须特别安装,只有web浏览器即可
- B/S架构的分层
- 三层架构
- 表现层:主要完成用户和后台的交互及最终查询结果的输出功能
- 逻辑层:主要是利用服务器完成客户端的应用逻辑功能
- 数据层:主要是接受客户端请求后独立进行各种运算

- 优点
- 客户端无需安装,有web浏览器即可(基于网页语言,与操作系统无关,跨平优势)
- B/S架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性强
- B/S架构无需升级多个客户端,升级服务器即可。
- 缺点
- 在速度和安全性上需要花费巨大的设计成本
- 客户端服务端的交互时请求-响应模式,通常需要刷新页面*(Ajax技术缓解)
B/S架构的几种形式
第一种:客户端-服务器-数据库

这个应该是我们平时比较常用的一种模式:
1、客户端向服务器发起Http请求
2、服务器中的web服务层能够处理Http请求
3、服务器中的应用层部分调用业务逻辑,调用业务逻辑上的方法
4、如果有必要,服务器会和数据库进行数据交换. 然后将模版+数据渲染成最终的Html, 返送给客户端
第二种:客户端-web服务器-应用服务器-数据库

类似于第一种方法,只是将web服务和应用服务解耦
1 客户端向web服务器发起Http请求
2 web服务能够处理Http请求,并且调用应用服务器暴露在外的RESTFUL接口
3 应用服务器的RESTFUL接口被调用,会执行对应的暴露方法.如果有必要和数据库进行数据交互,应用服务器会和数据库进行交互后,将json数据返回给web服务器
4 web服务器将模版+数据组合渲染成html返回给客户端
第三种方法:客户端-负载均衡器(Nginx)-中间服务器(Node)-应用服务器-数据库
这种模式一般用在有大量的用户,高并发的应用中

1、整正暴露在外的不是真正web服务器的地址,而是负载均衡器器的地址
2、客户向负载均衡器发起Http请求
3、负载均衡器能够将客户端的Http请求均匀的转发给Node服务器集群
4、Node服务器接收到Http请求之后,能够对其进行解析,并且能够调用应用服务器暴露在外的RESTFUL接口
5、应用服务器的RESTFUL接口被调用,会执行对应的暴露方法.如果有必要和数据库进行数据交互,应用服务器会和数据库进行交互后,将json数据返回给Node
6、Node层将模版+数据组合渲染成html返回反向代理服务器
7、反向代理服务器将对应html返回给客户端
Nginx的优点有:
1、它能够承受、高并发的大量的请求,然后将这些请求均匀的转发给内部的服务器,分摊压力.
2、反向代理能够解决跨域引起的问题,因为Nginx,Node,应用服务器,数据库都处于内网段中。
3、Nginx非常擅长处理静态资源(img,css,js,video),所以也经常作为静态资源服务器,也就是我们平时所说的CDN
比如:前一个用户访问index.html, 经过Nginx-Node-应用服务器-数据库链路之后,Nginx会把index.html返回给用户,并且会把index.html缓存在Nginx上,
下一个用户再想请求index.html的时候,请求Nginx服务器,Nginx发现有index.html的缓存,于是就不用去请求Node层了,会直接将缓存的页面(如果没过期的话)返回给用户