欢迎您来到腾讯云!积分商城

腾讯云腾讯云论坛

 找回密码
 立即注册
忘了密码?

扫一扫,访问微社区

快捷导航
搜索
查看: 20693|回复: 1

[经验分享] 弹性伸缩:为秒杀保驾护航

[复制链接]

1

主题

0

好友

50

积分

版主

Rank: 10Rank: 10Rank: 10Rank: 10

云币
90
威望
50
发表于 2016-7-29 11:09:26 |显示全部楼层
去年笔者在某电商实习的时候,曾经目睹了这样一出闹剧:
运营姐姐想做个秒杀活动,以为这个是很简单的事情,就先叫设计小哥开始设计页面了。后来,得知真相的运维哥哥眼泪掉下来,说哎呀您可放过我吧,秒杀可不能乱做。运营姐姐不服气了,说,秒杀不就是抢东西吗,这有什么难的,一定要加。第二天,秒杀刚开始没多久,网站果然挂了。运维哥哥被严厉的批评了。运维哥哥,卒。
这次要给运维哥哥说句公道话,咱也来分析分析秒杀的技术难度。


一、 秒杀网站的技术挑战
所谓秒杀活动其实就是商品限时限量特价促销,因为价格很优惠商品数量很少,每次很快就被抢光了,所以叫秒杀,
秒杀虽然对网站推广很有好处,但是对网站技术却是极大的挑战:因为网站是为正常运营设计的,而秒杀活动带来的并发访问用户却是平时的数百倍甚至上千倍。
别说小公司,就是京东这种巨头电商,前几年也是逢秒杀必挂,以致于知乎上有了这种问题:



假设某网站秒杀活动只推出一件商品,预计会有一万人参加活动,也就是说最大并发请求数是1w,秒杀系统需要面对的技术挑战主要是以下几点:
1)对现网站业务造成冲击
秒杀活动只是网站营销的一个附加,这个活动具有时间短,并发访问量大的特点。如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

2) 高并发下的应用及数据库负载
用户在秒杀开始前,通过不停刷新浏览器页面保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器、数据库服务器造成极大的负载压力。

3) 突然增加的网络及服务器带宽
假设商品页面200K(主要是商品图片大小),那么需要的网络服务器和带宽是2G(200K×10,000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

4) 直接下单
秒杀的游戏规则是到了秒杀时间才能开始对商品下单购买,在此时间点前,只能浏览商品信息,不能下单。而下单页面也是一个普通UR,如果得到这个URL,不用等到秒杀就可以开始下单了。


二、运维哥哥的苦恼
运维哥哥常常为这样的工作情景苦恼不堪,比如收到告警,就得立即调度更多的资源,进行虚拟机的配置,哪怕是深更半夜也得爬起来。
尤其是常见的请求量波动极大的网站,比如:
• 电商网站遇到大促活动,以及限时秒杀活动期间。
• 游戏网站在每天晚上20:00-24:00的在线用户高峰期间。
• 视频网站在播放热门直播期间,比如遇到重要比赛、庆典晚会、热门电视剧。
虽然可以预见访问量激增的情况,提前做出冗余。然而过量冗余意味着资源的浪费。网站如果为秒杀时的最高并发访问量设计部署,就需要比正常运营多得多的服务器,而这些服务器在绝大部分时候都是用不着的,浪费惊人。所以网站的秒杀业务不能使用正常的网站业务流程,也不能和正常的网站交易业务共用服务器,必须设计部署专门的秒杀系统,进行专门应对。
而冗余不足的后果是灾难性的,包括主机宕机,不得不跟用户道歉,还要承担用户流失的后果。



当业务高峰过后,还需要及时缩容,向公有云服务商退还计算资源,否则会承受不必要的成本。于是需要每天随时待命,对系统进行调整,还要在“不足”与“浪费”之间做着艰难的资源预测。
少数技术能力强的用户,通过调用公有云服务商的API进行二次开发,一定程度上做到运维自动化,比如定时增减云主机、根据告警自定义任务,但这种“高阶”玩法门槛太高,灵活性低,而且调试成本不小!
运维哥哥,实在是伤不起啊!


三、弹性伸缩为秒杀保驾护航
还好,还好弹性伸缩业务可以完美解决这一问题。腾讯云弹性伸缩提供以下支持:
  • 定时伸缩
根据预设的时间,定时或周期性地增加或减少CVM实例 。

  • 根据负载智能伸缩
基于云监控指标(如CPU,内存,网络流量),自动增加或减少CVM实例。

  • 自动注册到CLB白名单
新增的子机会自动注册到负载均衡中,无需手工干预即可无缝扩缩容。

  • 替换不健康子机
如CVM出现ping不可达,将用健康的CVM替换。




弹性伸缩可以作为秒杀的扩容与灾备资源池,定时+报警监测,轻松扩展CVM云服务器数量。等活动结束之后,根据检测到的指标,自动减少CVM数量。经济省钱。还能自动替换不健康CVM子例,确保安全。
有了弹性伸缩,运维哥哥终于可以睡个好觉了!


四、秒杀解决办法
有了腾讯云弹性伸缩的保护,针对5大技术挑战,我们就兵来将挡水来土掩啦,分别给出4个解决策略:
1) 秒杀系统独立部署
为了避免秒杀活动的高并发访问拖垮整个网站,使整个网站不必面对蜂拥而来的用户访问,可将秒杀系统独立部署;如果需要,还可以使用独立的域名,使其与网站完全隔离,即使秒杀系统崩溃了,也不会对网站造成任何影响。

2) 秒杀商品页面静态化
重新设计秒杀商品页面,不使用网站原来的商品详情页面,页面内容静态化:商品描述、商品参数、成交记录和用户评价全部写入一个静态页面,用户请求不需要经过应用服务器的业务逻辑处理,也不需要访问数据库。所以秒杀商品服务不需要部署动态Web服务器和数据库服务器。

3)利用腾讯云弹性伸缩增加网络带宽
利用腾讯云弹性伸缩业务里的定时策略和报警策略监控网站服务器的压力,及时增加或者减少云主机实例数量,缓解带宽压力,保证网站可用性。

4) 动态生成随机下单页面URL
为了避免用户直接访问下单页面URL,需要将该URL态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。

0

主题

0

好友

22

积分

小白[LV1]

Rank: 1

云币
10
威望
10
发表于 2016-10-27 14:24:55 |显示全部楼层
) 动态生成随机下单页面URL
为了避免用户直接访问下单页面URL,需要将该URL态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册
您需要登录后才可以发帖 QQ登录

联系我们|腾讯云平台|积分商城|腾讯云官方论坛    

GMT+8, 2018-12-17 21:19 , Processed in 1.165150 second(s), 27 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部