文档章节

泥瓦匠:秒杀架构设计实践思路(一)

泥瓦匠BYSocket
 泥瓦匠BYSocket
发布于 03/13 11:40
字数 1268
阅读 1151
收藏 17

企业级一站式软件研发协作平台  

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

本文内容
- 秒杀业务难点
- 秒杀架构理论
- 业务设计 & 总结

摘录:生命轮回。事业、家庭乃至做的每件事都会有生命周期。与其想着何时 Ending,不如脚踏实地,思考未来,活在当下。

From 小弟泥瓦匠思考录

一、前言

一提到秒杀,都会想到高性能、高并发、高可用、大流量...。在电商体系中,交易系统占据了环节中的半壁江山。比如里面特别迷人的秒杀系统,那秒杀涉及到什么架构设计?会涉及到什么业务?

泥瓦匠自言自语:秒杀这个东西,一篇文章也说不完。我这一篇起个头,实践系列还在后面,敬请期待。

二、秒杀业务难点

秒杀业务难点,总结为两点
- 并发多读
- 并发少写

这不同于一些场景,优惠营销系统,只会是一个用户读多个数据,但也会大流量的读操作。但没有啥写操作。

并发多读,多用户并发读一个数据。比如华为手机只有一个库存,活动秒杀。那可能几千万的人一起抢这个库存数据。还不包含很多肉机在狂刷。很多用户都在读一个商品 + 这个商品库存的数据。

并发少写,少用户并发写一个数据。比如一起抢,如何限流,因为只有少量写请求操作数据层?只有一个人才能抢到,如何解决超卖问题?

例如,12306 抢票,抢红包啥,瞬间流量更大。那这种系统更加难设计

三、秒杀架构理论

想起了架构一些定律:墨菲定律、康威定律等。任何的设计实践肯定来自某些理论和定律。

秒杀的一些架构理论(我认为的):
- 高并发原则
- 高可用原则
- 一致性设计

a、高并发原则

1、服务化

服务化老生常谈,选型也有 Spring Cloud 、阿里开源的 Dubbo 等一整套服务化解决方案。考虑服务隔离、限流、超时、重试、补偿等

2、缓存

层层考虑。常见的考虑三层:用户层、应用层、数据层等。

用户层:DNS 缓存、APP 缓存(图片等)
应用层:静态化页面、MQ、Redis 等
数据层:NoSQL、MySQL 自带 Query Cache

file

思考:缓存不是万能的,肯定是优化各种请求数据、请求节点、请求依赖等

3、拆分

分久必合、合久必分。各种拆分:

  • 系统维度:根据业务模块。如电商系统中的交易系统、商品系统等
  • 功能维度:根据功能模块。如交易系统中的下单系统、退款系统等
  • 读写维度:根据读写比例。如商品系统中的商品写服务和商品读服务等
  • 模块维度:根据代码特征。如分库分表、项目 moudle、代码分三层架构等

思考:就想 MyCat 等分库分表组件,天然支持了读写分离...

file

4、并发化

串行换并行。具体实践,具体场景分析然后优化。

b、高可用原则

1、降级

用于服务依赖隔离、fallback降级,防止雪崩效应。具体选型:hystrix 等

另外,可以做配置化,开关服务降级。核心功能保证,次功能优化为异步或屏蔽。例如:双十一的时候,会关闭某些评价等功能。

2、限流

防止请求攻击或者超出系统峰值。具体可以参考一些限流算法 Guava 的 RateLimiter。还写具体手段:恶意流量访问到 Cache 等

file

3、可回滚

发布版本失败或者有线上问题故障,第一时间会退到上一个稳定版本。思考:那一般运维团队,会有整套的灰度发布、回滚机制。

四、业务设计 & 总结

秒杀业务涉及也得考虑以下几点(重要的):

  • 幂等
  • 防重
  • 数据一致性
  • 数据动静分离
  • 请求削峰
  • 备份

这篇思路整理,起个头。也就是大致几个方向:

  1. 请求数据尽量少,网络 IO 越少越好。包括请求数据 + 返回数据;压缩;数据服务 RT 越少越好,数据连接次数。
  2. 访问路径尽量越短,节点越少,消耗越少
  3. 避免单点故障,要有备份

file

资料: 开涛《亿量级流量网站架构设计》

 
(关注微信公众号,领取 Java 精选干货学习资料)

© 著作权归作者所有

共有 人打赏支持
泥瓦匠BYSocket

泥瓦匠BYSocket

粉丝 866
博文 142
码字总数 184724
作品 4
杭州
程序员
私信 提问
iGeek Camp第四期--北京站

环信作为互联网行业的技术领先者,推出iGeek Camp系列技术活动,旨在以开放的心态,分享深厚的技术积累,推动并打造一个互联网技术创新的平台,iGeek Camp的口号是:交流、分享、融合、创新、协...

Jack
2015/12/16
405
0
iGeek Camp第四期--北京站

环信作为互联网行业的技术领先者,推出iGeek Camp系列技术活动,旨在以开放的心态,分享深厚的技术积累,推动并打造一个互联网技术创新的平台,iGeek Camp的口号是:交流、分享、融合、创新、协...

Jack
2015/12/16
0
0
乐视秒杀架构解读:从零开始搭建百万每秒订单系统

在各种秒杀活动大行其道的今天,订单系统的性能与稳定日益重要。乐视集团作为这一技术的佼佼者,在多次的电商狂欢节中都能抢占商机、拔得头筹,其表现无疑为其他企业和厂商提供了非常有价值的...

DBAplus社群
2016/06/15
0
0
Java编程详细解析—淘宝大秒杀系统是如何设计的?

摘要 最初的秒杀系统的原型是淘宝详情上的定时上架功能,由于有些卖家为了吸引眼球,把价格压得很低。但这给的详情系统带来了很大压力,为了将这种突发流量隔离,才设计了秒杀系统,文章主要...

小刀爱编程
2018/10/08
0
7
架构-高并发-解决方案

5 个构建第一个 Java 镜像的小窍门 本文介绍了构建 Java 镜像的五个小窍门,从而以超越基本概念和框架的方式开启 Docker 容器之旅。 唱吧 K 歌亭基于 Docker 的微服务架构 随着互联网的高速发...

掘金官方
2018/01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
20分钟前
1
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
44分钟前
0
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
今天
6
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
今天
2
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部