专栏首页转行程序员志玲姐姐宣布结婚的一刹那,对一个单身程序员的冲击究竟有多大。

志玲姐姐宣布结婚的一刹那,对一个单身程序员的冲击究竟有多大。

“天下武功,无坚不摧,唯快不破”

2019年6月6日 下午6:06分 全民女神林志玲宣布结婚,这是一条爆炸新闻,究竟有多炸??,一会儿我再给你分析,看到这条消息的这一刻,我的心里也一阵悲叹,为什么在全民下班准备回家过端午的时候发布这条消息,这真的很6666。

微信里所有的群都在讨论“这位大哥你是谁?” 你究竟哪来的神仙?你很6吗?

做为一个程序员,我不关心这位大哥你有多6,我担心的是9,什么是9,是新浪服务器请求成功率还剩几个9,是99.9999,还是已经挺不住了?

为什么会担心这个呢?现在从技术角度来分析一下志玲姐姐宣布结婚的消息,对一个系统有什么挑战。

关于热点数据的危害与解决方案

什么是热点数据?

如淘宝双11,京东618,电商促销秒杀活动,微博爆炸性新闻等,一个话题或一件商品,在短时间内被大量读写,这些数据都有可能成为热点数据,一般解决热点数据,而这些热点数据往往存储在分布式缓存里,如Redis,

由于商品物美价廉,志玲姐姐太过漂亮,用户收到消息后会进入活动页面疯狂点击,请求量巨大,最终导致页面异常,服务器报警。报警信息显示很多关于Redis缓存的异常,一旦redis请求被打满请求无法相应后,系统自动降级转而向数据库去查询数据,这样数据库更加难以支撑,整个业务集群处于雪崩状态。

热点数据产生点危害

  • 流量集中,如爆炸性新闻,请求流量达到物理网卡上限。
  • 请求过多,缓存分片服务被打垮。
  • DB 击穿,引起业务雪崩,最后造成整个系统的雪崩。

Redis使用最佳实践

  1. 选择合适的数据结构: Redis原生支持String、Hash、Set、SortedSet、List等数据结构以支持复杂的场景需求 。
  2. 杜绝大Key,热点Key: 1.比如String类型的value超过512KB,Hash、Set、Zset、List这些集合类型的元素超过1W个,推荐阅读我其它文章:Redis大key多key拆分方案

2.热点key容易造成CPU、网络上的高负载。建议业务对热点key有降级方案

  1. 单集群Key个数 < 1亿: Key个数过多会消耗大量的额外内存
  2. 主动更新缓存: 被动更新可能会给DB带来压力。推荐可以通过订阅数据库的变更或者其他方式来更新缓存中的key
  3. 关注集群内存: 内存在满载情况会对业务有明显的性能影响。建议在集群内存占用较高的时候一是尝试优化),二是联系DBA进行扩容操作。
  4. 设置合理的过期时间: 1,key的过期时间应该尽量的短,减少内存占用; 2,避免出现大量key同时过期的
  5. 使用multiGet或者pipeline提速: 使用multiGet或者 pipeline能够将多次的缓存操作合并到一次网络请求中,大大减少网络开销。
  6. 避免复杂操作: 1.multi以及pipeline等批量操作中的key个数不要太多,避免使用复杂度为O(N)的集合类操作,比如Hgetall。

2.multi,pipeline,hgetall 如何选择? 如果本身key 不超过 100 , 建议存放在 hash中, hash批量获取可以减少网络IO (只获取一个key 和 获取多个key 的区别)

  1. 不要过度使用: 比如不要使用list去做消息队列,Redis不保证这些功能的可靠性。有这类需求的可以去使用架构的其他组件,专业的事由专业的组件做

推荐容灾方案

大部分场景下,推荐业务使用双机房部署方案,一个机房部署主节点,一个机房部署从节点,可以满足绝大多数的场景需求。极端场景下可能主节点所在机房掉电,那么集群处于不可用状态(此时可以通过人工介入来恢复集群的可用状态)。

对可用性要求高的业务我们推荐三机房部署方案,即便在一个机房掉电的场景下也能保证集群的高可用。

最后,我呼吁天下所有单身||离婚的程序员,不要再惦记志玲了,关注我跟我学技术,或许下一个女神就是你的。

我不是言承旭

本文分享自微信公众号 - 转行程序员(be_coder),作者:转行程序员

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis探险 -《Redis开发与运维》笔记,精华分享。

    全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发...

    王炸
  • Redis大key多key拆分方案

    (如无意外,文章中所提及的hash,set等数据结构均指redis中的数据结构 )

    王炸
  • 王炸吐血整理60个Redis面试题,全网最全了

    单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,利用setnx实现锁。

    王炸
  • Redis常见面试题

    string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

    JAVA葵花宝典
  • Redis面试问题

      Redis是一个key-vakue存储系统,支持五种存储结构:String,Hash,List,Set,Sorted Set。与memcached一样为了保...

    曼路
  • Java秒杀系统优化的工程要点

    这篇博客是笔者学习慕课网若鱼老师的《Java秒杀系统方案优化 高性能高并发实战》课程的学习笔记。若鱼老师授课循循善诱,讲解由浅入深,欢迎大家支持。

    全菜工程师小辉
  • HackingLab的一套渗透测试题

     Hackinglab是一个在线网络信息安全攻防平台,里面有很多题,我随便做里面一套题,算是这两天学渗透的一个总结,题目地址

    mathor
  • [需求设计]从一个小需求感受Redis的独特魅力

    Redis在实际应用中使用的非常广泛,本篇文章就从一个简单的需求说起,为你讲述一个需求是如何从头到尾开始做的,又是如何一步步完善的。之前写过一篇《如何实现页面广...

    walking在cloud.tencent
  • MySQL 5.7 时间显示修改(log_timestamps UTC)

    在MySQL 5.7版本中,日志记录时间发生了变化,使用了UTC方式来记录日志时间,也就是说这是个世界统一时间,与我们常用的本地时间不协调,因此,初始化MySQ...

    Leshami
  • jmeter_遍历转换浮点时间戳

    飞天小子

扫码关注云+社区

领取腾讯云代金券