专业的编程技术博客社区

网站首页 > 博客文章 正文

Java开发大型互联网架构高并发系统集群之秒杀系统设计

baijin 2024-08-16 11:53:27 博客文章 9 ℃ 0 评论

引言

高并发是指在同一个时间点,有大量用户同时访问URL地址,比如淘宝双11、定时领取红包就会产生高并发;又比如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击(通过大量合法的请求占用大量网络资源,以达到瘫痪网络的目的)。

简介

高并发系统设计

高并发的接口/系统有一个共同的特性,那就是”快”。

在系统其它条件既定的情况下,系统处理请求越快,用户得到反馈的时间就越短,单位时间内服务器能够处理请求的数量就会越多。所以”快”几乎可以算是高并发系统的要满足的必要条件,要评估一个系统性能如何,某次优化是否提高系统的容量,”快”是一个很直观的衡量标准。

那么,如何才能做得快呢?有两个需要注意的原则

做得少,一方面是指在功能特性上有所为,有所不为,另一方面是指一次处理的信息量要少。

做得巧,根据业务自身的特点,选择合理的业务实现方式,选择合理的缓存类型和缓存调用时机。

集群

集群是一种多服务器结构,也就是把同一个业务,部署在多个服务器上(区别于分布式,分布式是把个业务分拆多个子业务,部署在不同的服务器上),这样就可以提高单位时间内执行的任务数来提升效率,把压力分担到多台服务器上。

我们可以集群部署Mysql数据库,或者NoSQL DB服务器(如mongodb服务器、redis服务器),把一些常用的查询数据,并且不会经常变化的数据保存到NoSQL DB服务器,来减少数据库服务器的压力,加快数据的响应速度。

构建一个好的服务器架构

大致的服务器架构如下:

服务器

├负载均衡

│├Nginx

│└阿里云SLB

├资源监控

└分布式

数据库

├主从分离、集群

├分布式

└表优化、索引优化等

NoSQL

├redis

│├主从分离

│└集群

├mongodb

│├主从分离

│└集群

├memcache

│├主从分离

│└集群

└...

CDN

├html

├css

├js

└image

高并发情境中,更新用户相关缓存需要分布式存储,比如使用用户ID进行hash分组,把用户分不到不用的缓存中,这样一个缓存集合的总量不会很大,不会影响查询效率。

秒杀架构设计

秒杀系统为秒杀而设计,不同于一般的网购行为,参与秒杀活动的用户更关心的是如何能快速刷新商品页面,在秒杀开始的时候抢先进入下单页面,而不是商品详情等用户体验细节,因此秒杀系统的页面设计应尽可能简单。

商品页面中的购买按钮只有在秒杀活动开始的时候才变亮,在此之前及秒杀商品卖出后,该按钮都是灰色的,不可以点击。

下单表单也尽可能简单,购买数量只能是一个且不可以修改,送货地址和付款方式都使用用户默认设置,没有默认也可以不填,允许等订单提交后修改;只有第一个提交的订单发送给网站的订单子系统,其余用户提交订单后只能看到秒杀结束页面。

要做一个这样的秒杀系统,业务会分为两个阶段,第一个阶段是秒杀开始前某个时间到秒杀开始, 这个阶段可以称之为准备阶段,用户在准备阶段等待秒杀; 第二个阶段就是秒杀开始到所有参与秒杀的用户获得秒杀结果, 这个就称为秒杀阶段吧。

总结

以 上就是我对Java开发大型互联网架构高并发系统集群之秒杀系统设计问题及其优化总结,分享给大家,觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持!

最后,每一位读到这里的网友,感谢你们能耐心地看完。希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步!都能赢取白富美,走向架构师的人生巅峰!

想了解学习Java方面的技术内容以及Java技术视频的内容可加群:722040762 验证码:头条(06 必过)欢迎大家的加入哟!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表