秒杀网站如何用云支撑?
- 2019 年 10 月 6 日
- 筆記
我们的互联网客户经常用“秒杀”营销技巧吸引客户的观注,比如秒杀购房优惠券、秒杀汽车使用权等活动。正是巨大的优惠,让很多平常没有需求的客户也集中在一个时间点关注这个营销活动网页,对后台的IT支撑能力带来巨大的挑战。今天我们用实际案例看一看上云后,如何承接秒杀业务。

一、秒杀业务带来的挑战
1、对现有网站业务造成冲击。
秒杀活动是营销的一次性活动,时间短、并发量大。如果与原网站业务采用部署在同一套系统中,造成对现有业务造成巨大冲击,或者将主网站直接击垮,类似于一次DDOS攻击。
2、高并发下的应用服务器、数据库服务器负载。
用户在秒杀前,会不断地刷新网站,如果采用传统的数据访问方式,访问应用程序服务器、连接数据库,会对这类动态程序服务器造成巨大的负载。
3、网络带宽突然增加。
如果访问量达到1万人,而该网站的秒杀商品页的大小是200K,则此时需要的带宽是2G,而平台也许正常流量带宽只有100M。
4、下单网址泄露,被恶意下单
只有到了服务器的秒杀时间精确秒,才允许访问该秒杀下单的网址,如果该网站被提前公布,则可以绕开控制页面直接提前下单。
二、如何应对这些挑战
1、秒杀系统与主网站分开部署
为了避免因秒杀活动的高并发性带来对整个业务系统的不可控,建议秒杀系统独立部署。即使秒杀系统死掉,也不会影响主网站。同时,可以采用按小时的按需云服务方式,秒杀活动结束,将这些资源释放掉。
2、秒杀商品页面静态化
为避免秒杀商品页面访问应用服务器(如Apache)、数据库(如MySQL)带来的压力,建议将秒杀商品的详情页直接采用html静态页面承载。这样可以充分利用CDN、反向代理服务器的缓存功能,在真实的服务器外围将访问情况拦截掉。
3、将数据库的内容缓存至Redis内存数据库中
秒杀开始前,应用程序将MySQL数据库中的库存数据提前读取至Redis中,秒杀页面直接从Redis进行读取、扣除库存的操作。Redis、MySQL通过MQ消息中间件进行数据的同步操作。
3、临时增加网站带宽或购买CDN
可以临时购买云服务商的互联网带宽,秒杀活动结束就释放这些带宽。或按上一条,购买CDN服务。
4、最复杂的一步,将秒杀页面的URL设置为随机数,并进行比较
程序员将秒杀页面的URL通过某参数(如商品id,秒杀时间)进行md5加密,然后设置为秒杀页面的URL地址。秒杀活动开始之前,商品id、 秒杀时间的md5值与数据库中的URL md5值不相同,禁止访问该URL。只有到了设置的条件,秒杀时间,md5值相同,该页面才允许被继续通过访问。