故障转移处理
要点
程序与数据库的连接,基于虚地址而非真实ip,由负载均衡系统监控。 保持主从结构的简单化,否则很难做到故障点摘除。
思考方式
遍历对服务器集群的任何一台服务器,前端web,中间件,监控,缓存,db等等,假设该服务器出现故障,系统是否会出现异常?用户访问是否会出现异常。 目标:任意一台服务器崩溃,负载和数据操作均会很短时间内自动转移到其他服务器,不会影响业务的正常进行。不会造成恶性的数据丢失。(哪些是可以丢失的,哪些是不能丢失的)
缓存方案
缓存结合数据库的读取
Memcached是最常用的缓存系统
Mysql 最新版本已经开始支持memcache插件,但据牛人分析,尚不成熟,暂不推荐。 数据读取
并不是所有数据都适合被缓存,也并不是进入了缓存就意味着效率提升。 命中率是第一要评估的数据。
如何评估进入缓存的数据规模,以及命中率优化,是非常需要细心分析的。 实景分析: 前端请求先连接缓存,缓存未命中连接数据库,进行查询,未命中状态比单纯连接数据库查询多了一次连接和查询的操作;如果缓存命中率很低,则这个额外的操作非但不能提高查询效率,反而为系统带来了额外的负载和复杂性,得不偿失。
相关评估类似于热点数据表的介绍。
善于利用内存,请注意数据存储的格式及压缩算法。
Key-value 方案繁多,本培训文档暂不展开。
缓存结合数据库的写入
利用缓存不但可以减少数据读取请求,还可以减少数据库写入i/o压力
缓存实时更新,数据库异步更新
缓存实时更新数据,并将更新记录写入队列
可以使用类似mq的队列产品,自行建立队列请注意使用increment来维持队列序号。
不建议使用 get 后处理数据再set的方式维护队列
测试范例:
范例1
$var=Memcache_get($memcon,”var”);