秒杀系统总结与思考(二) 数据动静分离

【Java】如何设计一个秒杀系统 说起秒杀,我想你肯定不陌生,这两年,从双十一购物到春节抢红包,再到12306抢火车票,“秒杀”的场景处处可见。简单来说,秒杀就是在同一个时刻有大量的请求争抢购买同一个商品并完成交易的过程,用技术的行话来说就是大量的并发读和并发写。不管是哪一门语言,并发都是程序员们最为头疼的部分。同样,对于一个软件而言也是这样,你可以很快增删改查做出一个秒杀系统,但是要让它支持高并发访问就没那么容易了。比如说,如何让系统面对百万级的请求流量不出故障?如何保证高并发情况下数据的一致性写?完全靠堆服务器来解决吗? 阅读详情
何为动静数据

“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和 URL、浏览者、时间、地域相关,以及是否含有 Cookie 等私密数据。比如说:
1、媒体类网站,无论谁访问,文章内容都一样,典型的静态资源
2、页面上的个性化推荐与个人信息等为动态数据

静态数据如何缓存呢

1、将静态数据缓存在用户最近的地方。常见的有三种:
· 用户浏览器
· CDN上
· 服务器的Cache上
2、静态化改造就是直接缓存HTTP连接。静态化缓存HTTP连接不是仅仅缓存数据,就连HTTP协议都不用重新组装
在这里插入图片描述
3、谁来缓存静态数据。不同语言的Cache处理效率各不同
以 Java 为例,因为 Java 系统本身也有其弱点(比如不擅长处理大量连接请求,每个连接消耗的内存较多,Servlet 容器解析 HTTP 协议较慢),所以你可以不在 Java 层做缓存,而是直接在 Web 服务器层上做,这样你就可以屏蔽 Java 语言层面的一些弱点;而相比起来,Web 服务器(如 Nginx、Apache、Varnish)也更擅长处理大并发的静态文件请求。

如何做静态分离的改造

1、URL唯一化。商品详情天然可以做到URL唯一化,以URL作为缓存的key
2、分离浏览者相关的因素。浏览者相关的动态数据,通过动态请求获取
3、分离时间因素。服务器输出的时间也通过动态请求获取(时间以服务器为准防止用户篡改)
4、异步化地域因素。详情页与地域相关因素做成异步获取
5、去掉Cookie。缓存的静态数据中不包含Cookie

动态内容处理方案

ESI(Edge Side includes)、CSI(Client Side Include)方案
1、ESI: 服web代理服务器上做动态内容请求,将请求插入静态页面中 (服务端组装数据)
2、CSI: 页面单独发起异步js请求,异步动态获取动态内容。性能更加,稍有延迟 (客户端数据分离异步)

动静分离的几种架构方案

1、实体机单机部署
2、统一Cache层
3、上CDN

方案1: 实体机单机部署

将虚拟机改成实体机,增大Cache容量,采用一致性Hash分组提高命中率。Cache分组,是希望能达到命中率和访问热点平衡。Hash分组越少,缓存命中率肯定越高,短板是单个商品集中在一个分组中,容易Cache击穿,应适当增加多个相同的分组,平衡访问任店和命中率。
在这里插入图片描述
实体机单机部署几个优点:
1、没有网络瓶颈,而且能使用大内存
2、既能提升命中率,又能减少Gzip压缩
3、减少Cache是要压力,采用定时失效方式,例如只缓存3秒中,过期自动失效

总结:
此方案中,通常只要把虚拟机或者容器运行的java应用换成实体机,会增加单机的内存容量,单会造成一定的CPU浪费。
实体机上部署了java又部署了Cache,造成运维上的复杂度。

方案二: 统一Cache层

将单机的Cache统一分离出来,形成单独的Cache集群
在这里插入图片描述
Cache层单独统一管理可减少运维成本,方便接入其他静态系统,还有其他的优点:
1、单独的一个Cache层,减少多个应用接入使用Cache的成本
2、统一Cache易于维护监控,自动化
3、共享内存,最大利用内从

带来的问题:
1、Cache层内部交换网络有瓶颈
2、缓存服务器的网卡也是瓶颈
3、机器少风险大,挂掉一台影响很大一部分缓存数据
解决上面问题,可以对Cache做Hash分组,即一组Cache缓存内容相同,避免热点数据过度集中

方案三: 上CDN

整个系统动静分离后,进一步的方案,是将Cache进一步移动到CDN,CDN离用户更近一些
需要解决的问题:
1、失效问题。静态数据虽然是“相对不变”,也就是可能变,如有错别字,如果缓存时效很长,就会有问题。我们需要保证CDN可以在秒级时间内,让分部在各地的Cache同时失效,对CDN的失效系统要求很高
2、命中率问题。Cache最重要的指标就是,高命中率。如果将数据放在全国的CDN上,Cache必定是分散的,就会带来命中率的问题
3、发布更新问题。如果业务系统每周都有日常业务需要发布,那么发布系统需要足够简洁高效,还要考虑快速回滚和问题排查的简便性

所以,将商品详情系统放全国所有CDN节点是不现实的,可选择若干节点尝试实施
1、靠近访问量比较集中的地区
2、离主站相对较远
3、节点到主站间网络比较好,稳定
4、节点容量大,不占用其他CDN太多资源
5、节点不要太多
在这里插入图片描述
基于以上因素,选择CDN的二级Cache比较合适,二级Cache数量偏少,容量更大,让用户请求先回源CDN的二级Cache中,如果没命中再回源获取数据。

使用CDN二级Cache作为缓存,可以达到和当前服务器静态化Cache类似的命中率,Cache不是很分散,访问集中。是当前比较理想的一种CDN化方案

CDN化部署还有以下特点:
1、把整个页面缓存在用户浏览器
2、如果强制刷新整个页面,也会请求CDN
3、实际有效请求,只是用户对抢购按钮的点击

深入C++学习还必须掌握的一基础知识精讲 施磊C++语言基础提高课程笔记,包括了new/delete;malloc/free;引用和指针;const,指计和引用的结合;函数重载,inline的数,参数带默认值的函数;函数模板等知识点 阅读详情

相关推荐

Informer复现 -- 完整模型

有了数据和核心的ProbAttention,接下来就可以复现完整的Informer(图1)了。图1:Informer模型结构[1]如果对图1还不太熟悉的同学,可以参考图2。由图2可知,informer与Transformer之间的差异并不大。主要区别是ProbAttention和可能的encoder最后一层的conv(源代码中用来distil)。图2:参考Transformer画的Informer模型结构。

AI_daily的博客 3491

如何设计一个秒杀系统02-如何才能做好动静分离?有哪些方案可选?

今天,我主要介绍了实现动静分离的几种思路,并由易到难给出了几种架构方案,以及它们各自的优缺点。可以看到,不同的架构方案会引入不同的问题,比如我们把缓存数据从CDN上移到用户的浏览器里,针对秒杀这个场景是没问题的,但针对一般的商品可否也这样做呢?你可能会问,存储在浏览器或CDN上,有多大区别?我的回答是:区别很大!因为在CDN上,我们可以做主动失效,而在用户的浏览器里就更不可控,如果用户不主动刷新的话,你很难主动地把消息推送给用户的浏览器。

sucaiwa的博客 333

从零开始:如何用Python手绘波特图并分析电路稳定性

本文详细介绍了如何使用Python绘制波特图并分析电路稳定性,涵盖从基础理论到实际应用的完整流程。通过NumPy和Matplotlib实现频域分析,包括RC低通滤波器和RLC带通滤波器的案例,以及相位裕度计算等高级技巧,为电子工程师提供了一套高效的电路分析解决方案。

hhh00的博客 371

网页的动静分离

动静分离”就是把用户请求的数据(如 HTML 页面)划分为“动态数据”和“静态数据”。‌静态资源‌图片、视频、音频等媒体文件HTML、CSS、JavaScript 等前端资源固定不变的配置文件‌‌动态资源‌PHP、JSP、ASP 等脚本文件需要数据库交互的个性化数据‌注意:动态数据不等于动态页面,例如很多媒体类的网站,某一篇文章的内容无论是谁访问,效果是一样的。虽然它是动态页面,但也把它算成一个典型的静态数据。

yinhezhanshen的专栏 554

【网络安全】SSRF漏洞讲解

SSRF漏洞讲解一、初识SSRF漏洞1.定义2.产生原理3.会导致的危害4.常见产生SSRF的地方5.常见缺失函数二、SSRF漏洞利用1.函数(1) file_get_contents(2)fsockopen()(3) curl_exec()2.协议(1)file协议(2)http协议(3)dict协议(4)gopher协议三、绕过1.绕过方式(1)检查IP是否为内网IP(2)Host获取与DNS绕过(3)通过各种协议(4)利用URL解析器滥用问题四、修复修复方案五、小结 一、初识SSRF漏洞 1.定义

你在看屏幕的同时,屏幕也在注视着你 3181

OpenClaw界面操作手册:命令行与交互模式的正确打开方式

"test": {"description": "运行项目的测试套件","prompt": "请执行项目的测试命令,并分析测试结果。如果有失败的测试,请提供修复建议。},"lint": {"description": "运行代码检查","prompt": "请运行代码检查工具,分析所有警告和错误,并提供修复建议。},"doc": {"description": "为当前文件生成文档","prompt": "请为当前打开的文件生成完整的API文档,包括函数说明、参数描述、返回值类型和使用示例。

gaoxiang_120的专栏 3146

02如何才能做好动静分离?有哪些方案可选?

上一篇文章中,我介绍了秒杀系统在架构上要考虑的几个原则,我估计你很快就会问:“知易行难,这些原则应该怎么应用到系统中呢?”别急,从这篇文章开始,我就会逐一介绍秒杀系统的各个关键环节中涉及的关键技术。 今天我们就先来讨论第一个关键点:数据的动静分离。不知道你之前听过这个解决方案吗?不管你有没有听过,我都建议你先停下来思考动静分离的价值。如果你的系统还没有开始应用动静分离的方案,那你也可以想想为什么没...

兴国-为梦想而战 1658

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(三)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(三)

宁波阿成的博客 524

数据库建表 —— 静态数据 和 动态数据 的 拆分

背景 表

Seraph_fd的专栏 2692

基于STM32L4XX、HAL库的ESP32-C3-WROOM-02-N4 WIFI模块驱动程序设计

支持802.11 b/g/n Wi-Fi (2.4GHz)RISC-V 32位单核处理器,主频高达160MHz。封装尺寸:18mm × 20mm × 3mm。工作温度范围:-40°C ~ 85°C。// 设置WiFi模式为STA。支持Bluetooth 5 (LE)// 发送AT指令测试通信。// 检查响应是否包含OK。内置4MB SPI Flash。// 连接TCP服务器。// 发送HTTP请求。// 初始化UART。// 建立TCP连接。低功耗设计,适合IoT应用。

zhusl6688的博客 384

【雕爷学编程】Arduino动手做(75)---TTL转RS-485模块之二线制可以实现真正的多点双向通信

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验七十五:TTL转RS-485模块 MAX485 RS485模块 MAX485 是一个8.

雕爷学编程 1万+

《果然新鲜》电商项目(33)-动静分离的实现

1.动静分离与前后分离 首先必须理解动静分离与前后分离区别? 动静分离: 动态资源(jsp、thymeleaf)与静态资源(js、img、css)分开部署 前后分离: 前端进行开发接口与视图(例如分开独立 VUE),后端开发实际的业务代码。 我们知道在一个网站中,如果把动静态资源都放在一个服务器是很占宽带资源的。比如:1M的带宽,实际下载的速度是128kb/s,而我们的静态资源(css、js、img)文件大小比较大,比如要下载一张图片512kb,那么: 当前带宽1M=128kb/s 一张图片512kb/12

专业的计算机毕业设计指南 1181

Unreal5从入门到精通之如何在VR中使用3DUI

前面我们讲过《Unreal5从入门到精通之UMG的使用》一般制作游戏时,UI都是添加到屏幕视窗上面的,但是在制作VR时,我们往往需要制作一个3D的UI,放置在场景中,然后使用手柄的射线来和UI进行交互。今天我们就来讲解下,如何在VR中创作和交互3DUI首次操作会感觉好复杂,多多练习,当你熟悉了UE蓝图的操作后会发现,这只是一个常规的蓝图操作而已。祝大家在虚幻的学习过程中非常顺利。希望这篇博客对你有所帮助。

TxNet 1984

如何设计一个秒杀系统(动静分离)

之前文章中,介绍了秒杀系统在架构上要考虑的几个原则,从这篇文就介绍秒杀系统的各个关键环节中涉及的关键技术。 今天我们就先来讨论第一个关键点:数据的动静分离。不知道你之前听过这个解决方案吗?不管你有没有听过,我都建议你先停下来思考动静分离的价值。如果你的系统还没有开始应用动静分离的方案,那你也可以想想为什么没有,是之前没有想到,还是说业务体量根本用不着? 不过我可以确信地说,如果你在一个业务飞速发展...

fengyuwuzuqcc的博客 604

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

02 | 如何才能做好动静分离?有哪些方案可选?

今天,主要介绍了实现动静分离的几种思路,并由易到难给出了几种架构方案,以及它们各自的优缺点。可以看到,不同的架构方案会引入不同的问题,比如我们把缓存数据从 CDN 上移到用户的浏览器里,针对秒杀这个场景是没问题的,但针对一般的商品可否也这样做呢?你可能会问,存储在浏览器或 CDN 上,有多大区别?我的回答是:区别很大!因为在 CDN 上,我们可以做主动失效,而在用户的浏览器里就更不可控,如果用户不主动刷新的话,你很难主动地把消息推送给用户的浏览器。

qq_37756660的博客 1255

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

一个秒杀系统的设计思考

前言 秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。 从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。 整体思考 首先从高维度出发,整体思考问题。秒杀无外乎解决两个核心问题...

vincent 4826

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何设计一个秒杀系统(完整版)

前言 秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。 整体思考 首先从高维度出发,整体思考问题。秒杀无外乎解决两个核心问题,一是并发读,一是并发写,对应到架构设计,就是高可用、一致性和高性能的要求。关于秒杀系统的设计思考,本文即基于此 3

weixin_45953989的博客 2万+

一个秒杀系统的设计思考(整体思考,收藏了)

作者:阿哲来源:https://segmentfault.com/a/1190000020970562前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,...

hailang2ll的专栏 2477

秒杀系统的设计思考

秒杀系统的设计思考

喝醉的咕咕鸟 626

【经验】一个秒杀系统的设计思考

程序员的成长之路互联网/程序员/成长/职场关注阅读本文大概需要 20分钟。作者:阿哲segmentfault.com/a/1190000020970562tips:万字长文预警(建议...

良月柒 414

经验:一个秒杀系统的设计思考!

扫描下方海报试读本文来源:https://segmentfault.com/a/1190000020970562前言秒杀大家都不陌生。自2011年首次出现以来,无论是...

石杉的架构笔记 1450

面试必备:一个秒杀系统的设计思考

作者:阿哲segmentfault.com/a/1190000020970562前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可...

Java笔记虾 967

如何设计一个秒杀系统

前言 秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。 整体思考 1 秒杀存在的问题 对于一个日常平稳的业务系统,如果直接开通秒杀功...

以择人之心择己,以恕己之心恕人。 2664
上一篇: 秒杀系统总结与思考(一) 架构原则
下一篇: 秒杀系统总结与思考(三) 发现热点
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值