防止动态应用架构中,memcache当机造成mysql发生风暴
(2010-11-08 16:43:39)
标签:
杂谈 |
分类: 技术/开发(原创/转载) |
MC当机会引起一系列的问题,先是MYSQL立即当机,随后其它MC一起当机,到最后,WEB前端当机。整个集群就完蛋了,这个时间周期很快,容不得你去思考解决方案。
防止动态应用架构中,memcache当机造成mysql发生风暴,其实有个简单的方法,就是按照时间和来访者IP来进行分组,只有当前有效的组才能访问mysql,比如当前是16点,那只允许来访者IP最后位是6的用户访问mysql,其余的用户只允许访问memcache,这样,当memcache当机后,可以尽量避免对mysql造成压力。
每个小时都会有一组服务器,可以重新恢复mc中的数据。其它组访问mc时,也不会出现一直占用mc链接的情况,发现mc当机或者mc中没数据,直接返回故障页面。这种方式虽然影响了部分用户,也会由于mc数据没准备好,误杀部分用户,但对恢复mc当机引发的风暴问题,有效而且能快速,不会置mc,mysql全当的后果。
回复@谭文天:MC进行分组是个好办法,但分组有时解决不了问题,比如一台机器,多个MC,这时有连接数限制,而且一台机器当了,N个MC全挂。多台机器的话,除非放在WEB服务器上,但WEB服务器,一旦MC连接数过多,反过来影响WEB的服务。
回复@谭文天:再一个问题,就是一组挂了,可能瞬间mysql的量会很大,因为大负载服务一个MC都会服务N多用户,也是个不小的量。
咱们目标是防止一台MC当掉后引起风暴效应,按时间和来源IP分组是一个比较好的方法,至少可以把对MYSQL的压力减小1/10。减少起风暴的可能性,当然如果一台MC服务的用户很大,风暴还是会起来的,除非再把时间和来源IP分组弄细点。