【另类见解】秒杀并非高不可攀

一提到秒杀很简单这个话题,我知道要被别人鄙视了:你不懂高并发... 这年头开头不画个思维导图都觉得掉价

image

谈到秒杀,网络上不少于几千片文章,但是大多大同小异。如果你的微信当中关注了几个编程技术类的公众号,我敢说,每个公众号几乎都发过秒杀的文章

秒杀这种场景在流量这个维度很有独特性,大起大落的流量冲击对系统是个考验。为什么这么说呢?大的流量或者说高并发请求,考验的不仅仅是数据库的最大承受压力,而且对于带宽也有很大的考验,入口流量之后就是对整个系统的承受能力的考验。

其实我觉得这里大多数人有一个误解:秒杀对整个系统的考验,最终会落到数据库上。正是这个误解,导致了大多数人会对DB优化花费很大的精力。

现实的世界存在矛盾,只要找到矛盾就能解决问题,对应到编程也一样。

秒杀之所以被神化,是因为流量大,但是很多系统最后崩塌的却是数据库,很少有团队因为应用系统崩溃而导致秒杀失败。因为对于整个系统来说,数据库是数据最后的持久化,是存在状态的,而应用系统一般都是无状态的,都是可以横向扩展的。

其实说到底,流量还是要削峰或者分流,我想如果把流量削到数据库的可承受范围之内,秒杀可能和其他业务场景无异。

过多的中间件

说出来你们肯定见过,网络一大堆秒杀的解决方案,又是XXMQ,又是XX缓存,又是XX负载均衡,又是XX中间件。虽然架构图很完美,但是落地呢?

落地是有难度的,而且还有很大风险。难道各种中间件不用维护吗?中间件不会出故障吗?每个中间件不用做高可用吗?这么多中间件搭配起来,运维成本是很高的,最主要的是出问题排查问题的成本会很高。

我们需要的是架构师,不是框架师。把复杂问题用简单的解决方案解决,才不会给自己挖坑,我一直是这么认为。

那中间件需要吗?肯定是需要的,那么多成熟的东西真的能解决你很多问题,但是前提是正确的用。比如Redis,做缓存用途很正确,但是你把它当做高速数据库我就不认同了,虽然它可以持久化,但是大并发的情况下,Redis做数据库是不合适的。

吃掉所有流量

秒杀业务具体能到多大流量谁也不能确定,虽然可以根据以往经验预估,但是往往还是会超出想象。要想把这些流量全部流入服务器进行处理,需要付出很多资源。最坏的情况是,把流量全部吃掉之后,还要吐出90%,这就让人恼火了。

所以,能不能只吃能够吃饱的流量呢?比如说:库存有1000件商品,如果我们只放进来1000个请求(虽然很牵强),那整个系统是不是很容易构建。就像吃饭一样:本来一碗米饭就能吃饱,非要吃下10碗,然后吐出9碗吗?

SO,是不是只要在系统边缘加一个限流就ok了?值得思考

image

客户端UI

无论业务怎么样,客户端用户体验总要给人一种还有希望的感觉

image

其实秒杀这种场景是最能发挥忽悠人才能的了,你前面有多少人排队,天王老子也别想知道。就算真的要给用户反馈前面还有多少人,其实完全可以返回一个不太离谱的随机数,反正用户又不会电话投诉。

多说一句,甚至把限流算法放到客户端都行,反正不懂行的又看不懂代码,这种骚操作我确实见过。

如果非要返回真实的排队人数的话,可以引入一个线程安全的中心化队列即可,比如用神器Redis,每成功穿过限流窗口一个请求,就把对应的UserId插入这个队列,这个队列理论上不会太大,因为有程序一直在消费。

image

静态资源

所谓的静态资源就是指那些不会变动或者很少变动的资源,比如商品的图片就属于这种。在秒杀这种场景下,静态资源的访问一定要分离出业务服务器,最好的解决方案是利用CDN来加速

CDN是个好东西,谁用谁知道。不但可以降低自己服务器的压力,而且还可以给全国各地的用户请求加速,具体原理咱们之后有机会可以唠唠。如果技术允许的情况下,甚至一些边缘计算的能力都可以放置在CDN。

写在最后

如果不是阿里,腾讯这种量级的公司,一般中小公司搞秒杀活动并不是想象中那么恐怖。大家可以放平心态。做技术一定不要乱了阵脚,技术的选择固然重要,但是更重要的是有全局掌控的能力,哪个环节最容易出问题,要做好全面监控,出了问题第一时间能解决问题才是后期最重要的。

END

原创

一个搜索需求搞垮微服务

原创

微服务并不能解决你的烂代码问题

分享收藏点赞在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我又相信爱情了!

1 圣诞限定款的肥宅快乐水更好喝了吗?不!更贵了2 周边鬼才!这手机壳我爱了3 你以为是个王者,其实是个大脸......4 高温超导材料达到临界温度后能使物体悬浮在不同位置5 火山爆发你见过吗?6 我又相信爱情了!…

opencv计算两数组的乘积_#剑指Offer#12. 构建乘积数组

题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]。其中B中的元素B[i]A[0] * A[1]... * A[i-1] * A[i1]... * A[n-1]。不能使用除法。解题思路:首先,仔细理解题意,B[i]是A数组所有元素的乘积,但是没…

记一次 .NET 某桌面奇侠游戏 非托管内存泄漏分析

一:背景 1. 讲故事说实话,这篇dump我本来是不准备上一篇文章来解读的,但它有两点深深的感动了我。无数次的听说用 Unity 可做游戏开发,但百闻不如一见。游戏中有很多金庸武侠小说才有的名字,太赏心悦目了。000000df315…

成年人的数学公式

1 成年人的数学公式2 唯一对我说过“别走好吗”的人3 主人发起疯来有多可怕4 别人家的狗看到主人有危险▼你家的……▼5 蜘蛛捕食瞬间6 蜡烛重燃(冒的白烟是固态小颗粒的石蜡蒸汽,可燃)你点的每个赞,我都认真当成了喜欢

Linux运维实战之DNS的高级配置(转发器、视图等)

上次博文我们具体配置了一台DNS服务器并实现了主辅之间的区域传送,本次博文我们来看看DNS的一些高级配置。 在进行DNS的高级配置之前,必须要理解DNS的原理(参见http://sweetpotato.blog.51cto.com/533893/1596973) 并且对DNS的基础…

史上最烧脑的学习方法,看完瞬间涨姿势!

▲ 点击查看 在美国,有一个天才儿童计划,选拔一批“天才”儿童进入天才班。这个计划是为了保证每个人接受平等教育机会的同时,也为精英成长提供合适的土壤。美国所谓的天才和精英是怎样的标准呢?进入天才班的儿童首先要通过一个叫…

WPF轮播图实现方式(二)

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看,谢谢~。 01—效果预览02—代码如下一、EmphasizerCarousel.cs 代码如下using System; using System.Collections.Generic; using System.Collections.Obj…

实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?...

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对…

Bootstrap在线编辑器简单分享

Bootstrap 已经使响应式网站开发变得简单很多。 但是如果你不必手动写全部代码,事情会如何呢? 如果你可以自由地选择你想要使用的Bootstrap 组件、并可以把它们拖拽到画布中,事情会如何呢?这就是Bootstrap 编辑器的用武之地。 在这…

爱因斯坦去世不到7个小时,大脑就被人偷走!还被切成240块,供变态医生把玩了几十年.........

全世界只有3.14 % 的人关注了爆炸吧知识你的智商说不定比爱因斯坦还高俗话说,人怕出名猪怕壮。作为世界闻名的大科学家,世人却更愿意把爱因斯坦的成就归功于“天赋异禀的脑子”,顺带着爱因斯坦其他的“身体零件”也都成了大家好奇的对象。爱因…

字符串池化,减少了三分之一的内存占用

字符串池化,减少重复实例,内存降低,一切就是这样的轻松愉快。开篇摘要 本文通过一个简单的业务场景,来描述如何通过字符串池化来减少内存中的重复字符串实例,从而减少内存的占用。在业务中,我们假设如下&am…

启动zookeeper_Giraph源码分析(一)—启动ZooKeeper服务

作者 | 白松Giraph介绍:Apache Giraph is an iterative graph processing system built for high scalability. For example, it is currently used at Facebook to analyze the social graph formed by users and their connections. Giraph originated as the ope…

【MFC】MFC中调用系统软键盘的几种方法

1.直接运行微软系统自带的虚拟键盘程序“osk.exe” 在普通MFC项目中可以调用ShellExecute或者WinExec方法来直接运行微软系统自带的虚拟键盘程序“osk.exe”,十分方便一句话就可以搞定。ShellExecute: ShellExecute(GetSafeHwnd(), NULL, _T("osk.e…

委派用户管理Hyper-v

在安装完成Hyper-v以后,默认情况下,只有管理员组的成员才有权限去管理Hyper-v,做一些诸如管理网络,管理虚拟机,管理磁盘等等的操作,普通用户没这个权限,从应用角度来说,如果公司所有…

这才是真正的蛙泳,还挺能蹦跶......

1 这才是真正的蛙泳▼2 给你们看看我平时藏起来的可爱▼3 沈腾这rap唱的跟闹着玩儿的似的▼4 能不能好好说话?▼5 建议再配套一张肛肠医院代金券▼6 这是我军培养出来的【特工鹅】吗?盯梢技能太强了▼7 钓鱼翻车现场▼你点的每个赞,我…

缓存机制 java_缓存机制:java中缓存的原理

外存:也就是我们经常说的(CDEF盘的大小)外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等,一般的软件都是安装在外存中内存:内存是计算机中重要的部…

docker-compose 一键部署分布式配置中心Apollo

简介说起分布式肯定要想到分布式配置中心、分布式日志、分布式链路追踪等在分布式部署中业务往往有很多配置比如: 应用程序在启动和运行时需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等,都需…

Sharepoint Designer 2007 Workflow

参考 http://office.microsoft.com/en-us/sharepoint-designer-help/collect-data-from-a-user-in-a-workflow-HA010209808.aspx 注意 这里的Review Document是一个Task List, 应该在site里面创建一个task list,可以用默认的Tasks.转载于:https://www.cnblogs.com/F…

uva705--slash maze

/*这道题我原本是将斜线迷宫扩大为原来的两倍,但是在这种情况下对于在斜的方向上的搜索会变的较容易出错,所以参考了别人的思路后将迷宫扩展为原来的3倍,这样就变成一般的迷宫问题了*/ 1 #include"iostream"2 #include"stdio.…

重磅公开!集14位名师教案的《最全高中数学解题思想方法汇编》

全世界只有3.14 % 的人关注了爆炸吧知识解数学题,除了掌握有关的数学知识之外,最好掌握一定的解题技巧甚至知道点解题思想。要知道高考试题的解答过程中蕴含着重要的数学思想方法,如果能有意识地在解题过程中加以运用,势必会取得很…