week5. 学习总结
用缓存应提升读的性能。消息队列提升写的性能,保护数据库,更好的的伸缩性,失败隔离,服务自我修复。
负载均衡可以做到多个层次,常见的有DNS负载均衡、反向代理负载均衡、IP负载均衡、数据链路层负载均衡。
反向代理负载均衡适用于机器少的情况,转发的是HTTP协议,包比较大,效率低。
IP负载均衡 转发的是TCP/IP包,小,负载均衡服务器压力小。通过修改包中访问地址,源地址IP实现。通常瓶颈在出口网络带宽。
LVS负载均衡是在数据链路层做的转发,修改数据目的地的mac地址,使用的三角模式,是大型互联网架构使用的主流方案。
做出高效的工具对底层网络协议要有深刻的认识。
负载均衡的常用算法有轮询、加权轮询、随机
缓存的解决方案需要依靠一致性哈希算法,普通的方法根据key进行哈希取模的方式决定存储在那台机器,极其容易分配不均、新增、去掉机器引起大量缓存失效。
一致性哈希算法使用每台机器对应多个虚拟节点,如200个,通过机器编号+虚拟节点编号取哈希,在2^32-1范围内形成一个环,进来的每个key会顺时针找离自己最近的节点进行存储,可以更均匀的分配节点,以减少分配不均的问题。机器编号+虚拟节点编号取哈希可以保证机器因故障重启后数据还会落到原来的机器,减少缓存失效。
JAVA自带的Hashcode方法只需要满足区分对象即可,算出来的key并不够离散,如果不够离散,则key不容易均匀的分布到机器上,服务器之间的压力就不能做到均摊。常用的可以保证离散的Hash算法链接如下https://www.jb51.net/article/124819.htm
版权声明: 本文为 InfoQ 作者【个人练习生niki】的原创文章。
原文链接:【http://xie.infoq.cn/article/e4d28171aff3d35e750d5f3cd】。文章转载请联系作者。
评论