我所理解的基于Web的IT系统层次结构

    大部分的 IT系统都会划分有很多层,无论是传统的基于C/S模式的系统,还是新的基于Web的B/S模式的系统。

   但不管哪种模式,均可大致划分为客户层、中间层、数据层,在基于C/S模式的系统中,安装在本地电脑的应用为客户层,通过配置文件连接相应的应用服务器(即中间层),中间层通过JDBC等方式连接数据层(Oracle\MySQL\MSSQL等);在基于B/S模式的系统中,浏览器即为客户层 ,web服务器(如Nginx、Apache等)、web服务器、应用服务器(如apache、Websphere、tomcat等)均可叫为中间层 ,同样,中间层通过JDBC等方式连接数据层(Oracle\MySQL\MSSQL等), 下面主要分享下我所理解的基于Web的IT系统的层次结构。

   1:基本概念理解,web服务器,应用服务器,web应用服务器
   1.1:web服务器,即支持http协议的服务器,又叫做http服务器,仅支持html文档格式,如Apache
   1.2:应用服务器,处理复杂的业务逻辑例如 (JSP/Servlet、 EJB、 JNDI和JMX API等J2EE API ),支持多种协议
   1.3:web应用服务器,涵盖1.1和1.2功能的服务器通常也可称之为web应用服务器

   2:客户层、中间层、数据层之间的关系,客户层通过http/https协议连接至中间层,中间层通过纯tcp协议(如jdbc采用的协议)连接至数据库层,中间层起到一个承上启下的作用,来之客户端的http/https请求(大部分最终都是tcp实现),同时发送给数据层纯tcp请求。数据层返回数据包给中间层,中间层返回数据包给客户层,最后客户层对数据进行展现。
   这里要注意的是,客户层可能通过tcp长连接或短连接连接到中间层(http1.1默认为长连接),中间层也可以设置keep-alive来是否保持这个长连接,数据库层一般不主动限制,而是交给他的客户端(此时即是中间层去控制),一般我们会设置数据库连接池,相对于中间层与数据层的连接而言,此时的连接是长连接。
   针对客户层的一次请求相当于中间层建立了两条连接,一条是与客户层的连接、一条是与数据层的连接,当其中一条连接断掉之后,会发生什么呢,不同的中间件产品可能实现的方式不一样,但通常会有一种检测机制来让整个线路清除掉资源。如果中间层到数据层的线路被清掉(例如手工kill掉数据库会话),此时客户层与中间层的连接也会被自动的清理(close掉)。
   于是当我们的应用产生阻塞时,怎样处理最好呢,如果清掉数据库会话资源,让中间层与数据层的连接暂时断开了,此时如果中间层的请求队列中(请求队列、中间件线程池、中间件连接池三者之间就像一个漏斗一样,比如分别将请求队列、中间件线程池、中间件连接池设置为1000、100、50的话,如果2000个客户同时请求过来,1000个会被放入请求队列中(剩下1000个会表现为网站忙),这1000个中的100个会被线程池处理,被线程池处理的100个中有50个会得到连接池,其他的需要等待)还有大量的会话存在,这时这些会话会马上涌入中间件线程池中进行处理,此时这些线程池又会创建数据库连接(直接从刚才已经释放掉的连接池中获得数据库连接),这样又会产生阻塞,当出现这种情况时,最后的办法是直接重启中间件,释放掉所有的资源。

    网络是很复杂的一门学问,有理解的错误的地方还请大家包涵

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30201626/viewspace-1604282/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30201626/viewspace-1604282/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值