对过去项目的总结--高并发处理篇

[size=medium] 高并发是指对单一应用的并发访问量非常大。基于此,现在的应用往往采取集群形式部署,并将web(jsp,action和服务接口)和服务(provider)分开架设在不同服务器上。并且provider不是均匀部署的,即每台服务器上的provider实际上是不一致的。
注意:后文所指的应用均是指provider,在我们传统的mvc架构中即是业务逻辑层,对应的web层则是jsp和action层
应用层的架设应是这样的结构。一个高并发的应用在后台会有多个集群服务器,用于部署应用。
在应用启动时,每个provider会去向注册中心(register)主动注册。每个provider去注册的register是可以不一样的,从而每个register上的数据并不是一致的。register里有个类似于map的数据结构去记录provider和地址(url)的键值匹配。该数据结构的key值往往是protocol:url@user@password?service的形式。
来自于client的访问,会带有register的地址,从而被路由到具体的register。由register通过命名查找路由到具体的应用服务器。需要注意的是在这一步,一个provider会对应多个应用服务器的地址,所以这时候第一步是查找到一个服务器地址List,然后通过负载均衡路由到具体的服务器。也就是负载均衡的过程。
一.对于分布式应用,ha(高可访问性)是需要考虑重要要素:
1.客户端会有守护线程对每个server做定时的心跳测试,如果服务器宕掉了就从注册中心下线。切上备用服务器。
2.client对应用的调用如果失败,也会将该服务器从注册中心下线。
二.对于调用失败的服务,会视规则做failover,failback或者其他操作。以failover举例,failover即在对应用server的调用失败后会重新做loadbalancer获取可用的server,反复数次。其他的规则不一一举例。

在实现细节上:
1.底层通过nio socket或者http等协议进行远程调用(即client对server的调用,即rpc)。远程调用的传输数据需包括provider即参数等业务数据,我们可称之为invocation或者request。可将这个过程类比于通常的jsp对servlet调用,jsp的表单数据以及消息头都被存放在request里传给servlet。假设我们的通信数据是invocation,则invocation必然是一个流化的数据。在传输的时候将其通过socket或者http甚至webservice(通信数据为xml报文)将其传输,之后服务端会将返回结果存在invocation的某个字段里返回,这样就完成了一个远程调用。
2.在通信上层,我们在应用初始化的时候将服务注册给注册中心。而在client的初始化过程中,我们最终返回给client的是一个interface的proxy。而在获得这个interface的proxy后并调用具体方法进行业务后,proxy会去承载实际的Loadbalancer,路由到远程服务器上实际要调用的服务,并取得返回值,即实现细节1中的功能。

当然这里讲得比较笼统,实际上具体的实现细节比这复杂很多。但总的架构体系差不都就是这样了。
[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值