您的位置:首页 > 运维架构 > 网站架构

大型网站系统与JAVA中间件实践——chapter1-4之服务框架

2016-11-15 11:02 309 查看

服务路由

1.负载均衡

服务路由的核心问题就是负载均衡的问题。即机房的部署能力是否对等。
线上服务部署会涉及跨机房的问题,可以通过路由把请求的发起方和接收方控制在同一个机房中。
但是这样做可能会有“不对等”的问题。比如A机房的请求服务器有100台,提供服务的机器只有2台,B机房发起请求的机器有2台,提供服务的机器有100台,这样如果按照机房来路由,会造成A机房的服务提供方压力很大,资源不够用,B机房的服务提供方资源浪费。

2.容灾

如果一个机房的服务大面积不可用,或者机房出现故障,如何平滑迅速的实现迁移。

合并请求

对于热点数据,如果能进行一些任务的合并处理,就会很明显的降低整个系统的负载。
举例:
比如用户X搜索一个商品,按照一定的条件A,B,C,同时Y用户也按照这个条件搜索商品,同时还有可能有更多的用户在搜索类似商品,这个时候他们的搜索请求就可以合并。
1.加锁
比如最先到的搜索请求是X用户,这样我们做一把锁,对于分布式场景可以用redis分布式锁,锁住该请求条件。这样当Y用户或者更多用户请求到来的时候,判断锁的状态,如果被锁住,说明该搜索请求正在被处理(已经有相同条件的搜索请求在处理中了),这时应该等待(如果是异步等待回调通知的话,该流程直接结束)。
2.相同请求的保存
把这几个相同的请求保存下来,分布式的话可以用redis队列,这样第一个请求响应结束之后可以找到这些等待的请求。
3.解锁
当第一个搜索请求结束之后,对于同步来说,其他被阻塞的请求轮训该redis分布式锁,如果发现结果可用了,直接取结果即可。
对于异步情况,第一个搜索请求结束之后,找到其他阻塞着的搜索条件相同的请求,通过回调把结果告诉它们,或者发消息通知它们去指定地方拿结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: