Redis 在新浪微博中的应用( 三 )


5.Problem: 分布式问题
1.Config Server: 命名空间, 特别大的告诉访问, 都不适合用代理, 因为代理降低速度, 但是, Sina用了(单机多端口, Redis Cluster, sentinel)
Config Server放到Zookeeper上
最前面是命名服务,后面跟的是无状态的twmemproxy(twitter的改进的,用C写的) ,后面才是redis;
2.twmemproxy
应用不必关心连接失败, 由代理负责重连
把Hash算法放到代理商
代理后边的升级, 前端不关心, 解决了HA的问题
无状态, 多台代理无所谓
3.AS --> Proxy -->Redis
4.Sina的Redis都是单机版, 而Redis-Cluster交互过于复杂,没有使用
做HA的话,一定要配合监控来做,如果挂了之后,后续该如何做;
并不是追求单机性能,而是集群的吞吐量,从而可以支持无线扩展;
经验总结

  • 提前做好数据量的规划, 减少sharding(互联网公司一般以年为单位)
  • 只存精细化数据(内存很金贵!)
  • 存储用户维度的数据
  • 对象维度的数据要有生命周期
  • 特别是数据量特别大的时候,就很有必要来进行划分了;
  • 暴露服务的常见过程: IP-->负载均衡-->域名-->命名服务(一张表: 名字+资源(IP+端口))
  • 对于硬件消耗,IO、网络和CPU相比,Redis最消耗的是CPU,复杂的数据类型必定带来CPU消耗;
  • 新浪微博响应时间超时目前设置为5s;(返回很慢的记录key,需记录下来分析,慢日志);
  • 备份的数据要定期要跑一下生产的数据;用来检查备份数据的有效性;
  • slave挂多了肯定会对master造成比较的影响;新浪微博目前使用的M/S是一拖一,主要用来做容灾;
  • 同步时,是fork出一个单独进程来和slave进行同步;不会占用查询的进程;
  • 升级到2.6.30以后的linux内核;
  • 在2.6.30以上对软中断的问题处理的很好,性能提升效果明显,差不多有15%到30%的差距;
  • redis不用读写分离,每个请求都是单线程,为什么要进行读写分离 。
原文地址:https://www.cnblogs.com/me115/p/3482783.htmlJAVA编程技术乐园:一个分享编程知识 。跟着老司机一起学习干货技术知识,每天进步一点点,让小的积累,带来大的改变!
欢迎关注!持续推送有趣有料的技术文章~

【Redis 在新浪微博中的应用】


推荐阅读