首页 > 其他分享 >设计秒杀系统应该注意的 5 个架构原则

设计秒杀系统应该注意的 5 个架构原则

时间:2024-08-29 17:27:00浏览次数:10  
标签:依赖 架构 请求 原则 系统 秒杀 单点 数据 页面

架构原则:“4 要 1 不要”

  如果你是一个架构师,你首先要勾勒出一个轮廓,想一想如何构建一个超大流量并发读写、高性能,以及高可用的系统,这其中有哪些要素需要考虑。我把这些要素总结为“4要 1 不要”。
1.数据要尽量少
  所谓“数据要尽量少”,首先是指用户请求的数据能少就少。请求的数据包括上传给系统的数据和系统返回给用户的数据(通常就是网页)。为啥“数据要尽量少”呢?因为首先这些数据在网络上传输需要时间,
其次不管是请求数据还是返回数据都需要服务器做处理,而服务器在写网络时通常都要做压缩和字符编码,这些都非常消耗 CPU,所以减少传输的数据量可以显著减少 CPU 的使用。例如,我们可以简化秒杀页面的大小,
去掉不必要的页面装修效果,等等。其次,“数据要尽量少”还要求系统依赖的数据能少就少,包括系统完成某些业务逻辑需要读取和保存的数据,这些数据一般是和后台服务以及数据库打交道的。调用其他服务会涉及数据的序列化和反序列化,
而这也是 CPU 的一大杀手,同样也会增加延时。而且,数据库本身也容易成为一个瓶颈,所以和数据库打交道越少越好,数据越简单、越小则越好

2.请求数要尽量少
  用户请求的页面返回后,浏览器渲染这个页面还要包含其他的额外请求,比如说,这个页面依赖的 CSS/JavaScript、图片,以及 Ajax 请求等等都定义为“额外请求”,这些额外请求应该尽量少。
因为浏览器每发出一个请求都多少会有一些消耗,例如建立连接要做三次握手,有的时候有页面依赖或者连接数限制,一些请求(例如 JavaScript)还需要串行加载等。另外,如果不同请求的域名不一样的话,
还涉及这些域名的 DNS 解析,可能会耗时更久。所以你要记住的是,
减少请求数可以显著减少以上这些因素导致的资源消耗
  例如,减少请求数最常用的一个实践就是合并 CSS 和 JavaScript 文件,把多个JavaScript 文件合并成一个文件,在 URL 中用逗号隔开
  (https://g.xxx.com/tm/xx-b/4.0.94/mods/??module-preview/index.xtpl.js,module-jhs/index.xtpl.js,module-focus/index.xtpl.js)。
  这种方式在服务端仍然是单个文件各自存放,只是服务端会有一个组件解析这个 URL,然后动态把这些文件合并起来一起返回
3.路径要尽量短
  所谓“路径”,就是用户发出请求到返回数据这个过程中,需求经过的中间的节点数。通常,这些节点可以表示为一个系统或者一个新的 Socket 连接(比如代理服务器只是创建一个新的 Socket 连接来转发请求)。每经过一个节点,
一般都会产生一个新的Socket 连接。然而,每增加一个连接都会增加新的不确定性。从概率统计上来说,假如一次请求经过5 个节点,每个节点的可用性是 99.9%的话,那么整个请求的可用性是:99.9%的 5 次方,
约等于 99.5%。所以缩短请求路径不仅可以增加可用性,同样可以有效提升性能(减少中间节点可以减少数据的序列化与反序列化),并减少延时(可以减少网络传输耗时)。要缩短访问路径有一种办法,就是多个相互强依赖的应用合并部署在一起,
把远程过程调用(RPC)变成 JVM 内部之间的方法调用
4. 依赖要尽量少
  所谓依赖,指的是要完成一次用户请求必须依赖的系统或者服务,这里的依赖指的是强依赖。
  举个例子,比如说你要展示秒杀页面,而这个页面必须强依赖商品信息、用户信息,还有其他如优惠券、成交列表等这些对秒杀不是非要不可的信息(弱依赖),这些弱依赖在紧急情况下就可以去掉。
要减少依赖,我们可以给系统进行分级,比如 0 级系统、1 级系统、2 级系统、3 级系统,0 级系统如果是最重要的系统,那么 0 级系统强依赖的系统也同样是最重要的系统,以此类推。
  注意,0 级系统要尽量减少对 1 级系统的强依赖,防止重要的系统被不重要的系统拖垮。例如支付系统是 0 级系统,而优惠券是 1 级系统的话,在极端情况下可以把优惠券给降级,防止支付系统被优惠券这个 1 级系统给拖垮。
  5. 不要有单点
  系统中的单点可以说是系统架构上的一个大忌,因为单点意味着没有备份,风险不可控,我们设计分布式系统最重要的原则就是“消除单点”。那如何避免单点呢?我认为关键点是避免将服务的状态和机器绑定,即把服务无状态化,
这样服务就可以在机器中随意移动。如何那把服务的状态和机器解耦呢?这里也有很多实现方式。例如把和机器相关的配置动态化,这些参数可以通过配置中心来动态推送,在服务启动时动态拉取下来,我们在这些配置中心设置一些规则来方便地改变这些映射关系。
应用无状态化是有效避免单点的一种方式,但是像存储服务本身很难无状态化,因为数据要存储在磁盘上,本身就要和机器绑定,那么这种场景一般要通过冗余多个备份的方式来解决单点问题。前面介绍了这些设计上的一些原则,
但是你有没有发现,我一直说的是“尽量”而不是“绝对”?我想你肯定会问是不是请求最少就一定最好,我的答案是“不一定”。我们曾经把有些CSS 内联进页面里,这样做可以减少依赖一个 CSS 的请求从而加快首页的渲染,但是同样也增大了页面的大小,
又不符合“数据要尽量少”的原则,这种情况下我们为了提升首屏的渲染速度,只把首屏的 HTML 依赖的 CSS 内联进来,其他 CSS 仍然放到文件中作为依赖加载,尽量实现首屏的打开速度与整个页面加载性能的平衡。所以说,架构是一种平衡的艺术,
而最好的架构一旦脱离了它所适应的场景,一切都将是空谈。我希望你记住的是,这里所说的几点都只是一个个方向,你应该尽量往这些方向上去努力,但也要考虑平衡其他因素

标签:依赖,架构,请求,原则,系统,秒杀,单点,数据,页面
From: https://www.cnblogs.com/sitting-on-the-clouds/p/18387111

相关文章

  • 鸿道Intewell实时操作系统MIPS架构生态:龙芯2K1000
    在当今快速发展的工业互联时代,实时操作系统(RTOS)扮演着至关重要的角色。实时操作系统为工业制造、能源电力、轨道交通、汽车电子等领域提供了高实时、高可靠和高效率的技术支持。实时操作系统的设计注重实时性、并行性、可靠性和功耗,通常以嵌入式形态作为智能装备或生产系统......
  • 架构实战
    所谓架构,意即系统架构,广义上它涵盖业务架构、运维架构、组织架构等所有系统构建场景,本文特指一般开发人员主要关注的开发架构。关于架构的理论有很多,每个人也都有各自的理解,笔者相信很多人在实际运用中也会遇到各种各样的问题和困惑,本文抛开教条,从一个实际项目的演化看何为架构。......
  • 错误处理、cuda模型、GPU架构杂谈
    错误处理、cuda模型、GPU架构杂谈错误处理所有编程都需要对错误进行处理,早起的编码错误,编译器会帮搞定,内存错误也能观察出来,但是有些逻辑错误很难发现,甚至到了上线运行时才会被发现,而且有些厉害的bug复现会很难,不总出现,但是很致命,而且CUDA基本都是异步执行的,当错误出现的时候,不......
  • GPU的Fermi 架构与Kepler架构杂谈
    Fermi架构Fermi架构是第一个完整的GPU架构,如图10-15所示。图10-15Fermi架构是第一个完整的GPU架构Fermi架构逻辑图,如图10-15所示,具体数据如下:1)512个加速核心,CUDA核2)每个CUDA核心都有一个全流水线的整数算数逻辑单元ALU,和一个浮点数运算单元FPU3)CUDA核被组织到16个SM上4......
  • 领域驱动设计(DDD)的几种典型架构介绍
    领域驱动设计(DDD)的几种典型架构介绍 平常工作中都听说了DDD,也对DDD做定程度的了解,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢?一、专业术语各种服务IAAS:基础设施服务,Infrastructure-as-a-servicePAAS:平台服务,Platform-as-a-serviceSAAS:软件服务,Softwa......
  • 计算机架构设计的8个伟大思想
    “Theseareeightgreatideasthatcomputerarchitectshaveinventedinthelast60yearsofcomputerdesign.Theyaresopowerfultheyhavelastedlongafterthefirstcomputerthatusedthem,withnewerarchitectsdemonstratingtheiradmirationbyimitat......
  • 如何驱动企业数字化转型的敏捷企业的创新实践指南:敏捷企业架构的制胜之道
    敏捷企业架构如何引领企业转型变革在全球化与数字化交织的新时代,企业正处于前所未有的变革浪潮中。传统的企业架构方式已经难以应对瞬息万变的市场需求和技术革新。作为一种突破性解决方案,敏捷企业架构提供了一个灵活且强大的框架,帮助企业在动态环境中保持竞争优势,迅速响应市......
  • 从战略到执行:解密敏捷企业架构的变革之道,助力企业未来增长
    敏捷企业架构的新时代与变革契机在数字化转型浪潮中,企业正面临前所未有的市场挑战与技术机遇。传统企业架构(EnterpriseArchitecture,EA)虽然能够为企业提供稳定的战略支持,但其应对市场快速变化的能力不足。而敏捷方法(Agile)以其高效迭代和灵活性,正在迅速改变企业的运营方式。......
  • 全面解读敏捷企业架构的落地策略,助力企业实现数字化转型
    敏捷企业架构如何推动企业转型成功在当今迅速变化的商业环境中,企业面对的最大挑战之一是如何快速适应市场变化并保持竞争力。传统的企业架构虽然在稳定性和可控性方面具备优势,但在面对数字化转型的浪潮时,显得僵化且反应迟缓。敏捷企业架构通过引入敏捷方法的灵活性和迭代性,为......
  • 架构师面试题 - Spring Boot 面试专题(33题含答案)
    目录前言1、什么是springboot2、什么是JavaConfig?3、SpringBoot有哪些优点?答:4、SpringBoot提供了哪些核⼼功能?5、如何重新加载SpringBoot上的更改,⽽⽆需重新启动服务器?6、创建⼀个SpringBootProject的最简单的⽅法是什么?7、运⾏SpringBoot有哪......