前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >秒杀系统的设计五大原则

秒杀系统的设计五大原则

作者头像
用户2141593
发布2019-02-20 11:06:09
7580
发布2019-02-20 11:06:09
举报
文章被收录于专栏:Java进阶

最近订阅了 极客时间 | 如何设计一个秒杀系统,这里是每章的学习笔记。

链接:如何设计一个秒杀系统

架构原则:4要 1 不要!

1、数据要尽量少。

2、请求数要尽量少。

3、请求路径要短。

4、依赖要尽量少。

5、不要有单点。

数据要尽量少:

1. 是指用户请求的数据能少就少,请求包括给系统发的request 及 response 。

因为 这些 request 和 response 在网络上传输要时间,都要服务器来做处理,还要对数据进行压缩和字符编码。

减少网络的 IO 及 CPU 的使用

2. 想要获取数据难免从其他的服务 或者是 数据库 获取数据。

从其他服务获取数据几乎都需要进行序列化和反序列化的操作。(这是比较消耗CPU 的操作了)

访问数据库就更容易是瓶颈了。(从磁盘读数据 及 IO

请求数要尽量少:

用户的请求返回后,浏览器还需要渲染整个页面,那么这个页面所依赖的 CSS 、JS 、 图片等文件就可以定义为是 “额外请求”。

这些“额外请求”要尽可能的少,因为浏览器每发出一个请求都多少会有一些消耗。(连接要进行三次握手及  域名的解析 DNS

路径要短:

路径的定义是:从用户发起请求到返回数据的这个过程中,请求经过了几台服务器。

每增加一个系统或者是一个新的 Socket 连接,都会增加请求的耗时。

缩短访问路径有一个办法就是减少系统的复杂度,将跨进程(服务)的调用改成 在同一个进程中。

把远程调用(RPC) 改成 JVM 内部之间的方法调用。 这样可以减少数据的序列化的时间 及 减少 网络之间的 IO 。

依赖要尽量少:

依赖:用户发起的请求要依赖的系统或者服务,这里着重强调 “强依赖”。

举个例子:比如说秒杀的页面依赖了商品信息(强依赖),但还有一些优惠券信息,交易列表信息这些都不是必要的信息(弱依赖),那这些弱依赖就可以去掉。

要减少依赖,我们可以给系统进行分级,比如 0 级系统、1 级系统、2 级系统、3 级系统,0 级系统如果是最重要的系统,那么 0 级系统强依赖的系统也同样是最重要的系统,以此类推。

注意,0 级系统要尽量减少对 1 级系统的强依赖,防止重要的系统被不重要的系统拖垮。 例如支付系统是 0 级系统,而优惠券是 1 级系统的话,在极端情况下可以把优惠券给降级,防止支付系统被优惠券这个 1 级系统给拖垮。

不要有单点:

单点:单机部署。

单点意味着没有备份,风险不可控,一旦单点出问题,整个服务将不可用。

这些设计原则都只是尽量而非绝对。

因为是不同的业务场景下会有不同的流量进来,根据不同的流量从简单到复杂来打造我们的系统是很有必要的。

这里并没有说缓存用什么,消息队列用什么,具体的解决方案又是什么。因为这些对于架构师来说并不重要。作为架构师来说主线是设计,具体的实现是 高级开发的事 (开个玩笑皮一下哈哈哈哈

最后照抄一下评论:

高并发系统的几大方向

1.请求数据尽量少,从而减少cpu消耗

2.访问路径尽量短,减少节点消耗

3.强依赖尽量少,减少加载时间

4.不要有单点,要有备份

5.减少额外请求,减少加载时间

架构升级的逻辑要具体问题具体分析的 例如秒杀的场景来说,不同QPS量级下瓶颈也会不一样,10w级别可能瓶颈就在数据读取上,通过增加缓存一般就能解决,如果要到100w那么,可能服务端的网络可能都是瓶颈,所以要把大部分的静态数据放到cdn上甚至缓存在浏览器里 所以要做架构升级,还是主要要分析在预估的QPS下,整个系统的瓶颈会在什么地方,要针对这起瓶颈来重新设计架构方案。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年11月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 架构原则:4要 1 不要!
    • 数据要尽量少:
      • 请求数要尽量少:
        • 路径要短:
          • 依赖要尽量少:
            • 不要有单点:
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档