网站热点问题解决方案
什么是热点问题,热点问题对站点有什么危害,如何解决热点问题。本文会对这些问题做出我自己的回答。
问题的引出
我们先来看个场景。假设我们有张网然后我们分别用圆形的石头和锥形的石头去砸这张网,其结果大家一定都知道。后者有更大的可能撕破这张网。这个例子拿到站点上也是成立的。对于一个站点来说压力最后不可避免的都砸到数据库服务器上了,而这些数据的压力是有轻重之分的。比如强交互的数据就比呈现型的数据对数据库造成的压力要大。我们对站点进行分析后总能找到为数不多的几个访问热点,如果我们能够对这些热点问题进行恰当处理那么我们的站点服务的质量就可能会提高许多。
解决方案探索
缓冲是缓解压力最好的办法。像我们的CPU,硬盘你都可以轻易找到缓冲的影子。
那么我们是不是可以建立这样一种框架,把热点数据缓冲起来那?下面我就提出一种解决方案来。
解决方案
组件图
下面说说我是如何考虑问题的。
运用缓存逻辑,我们把数据频繁更新的数据从数据库拿到内存中(也可以使其他非核心库)。然后每次访问我们都操作拿出来的数据然后再在某种策略的驱动下把更改的数据平滑的更新到数据库中。
接下来介绍一下图中各个部分的作用
SessionRiskPolicy:安全控制策略,解决类似屏蔽,强制下线等功能。这里可以是个执行容器以后有新的安全策略可以动态注入执行。
SessionGateGroup:客户端,当用户登录的时候把用户信息写进消息队列,以便通知ReadUserData模块获取哪些用户的那些热点信息
ReadUserData:获取消息队列得到获取那些用户的那些热点信息进而从数据库中获取到数据放入我们的存储中
DataTransferModule:按照一定策略把更改情况写入消息队列
DataControlPolicy:也是一个执行容器,可以对缓存起来的数据进行变更,这些变更不必立即反应到数据库中去
DB:数据库
Store:存储
总结
可用性,可扩展性,一致性。这三个问题是一个软件要考虑的问题。三个方面围成一个三角形,周长就是成本(是钱,开发软件的投入).那么我们如何保持成本一直的情况下提供软件的服务那?本为提供的方案就是一个例子,一个牺牲一致性来提高软件可用性的例子。(当然我们会保持最终一致)
写在最后
对于热点问题我想大家肯定有其他的解决方案,如果正好您对这个问题思考过望您留下您的建议。