手把手带你搭建秒杀系统
佘志东
前京东交易平台(上海)负责人、资深架构师
12374 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 18 讲
前期准备:技术选型与环境准备 (2讲)
准确无误:打造不超卖和公平的秒杀系统 (2讲)
雷令风行:性能调优更上一层楼 (3讲)
手把手带你搭建秒杀系统
15
15
1.0x
00:00/00:00
登录|注册

02|蓄势待发:秒杀系统架构设计和环境准备

你好,我是志东,欢迎和我一起从零打造秒杀系统。
我们知道,系统的设计是个由巨入细的过程,想去设计好它,那你首先得去了解清楚它。就像上节课我们对 HTTP 请求所走链路的介绍,学完后你就会明白,做秒杀系统设计时,会用到哪些层级系统,并且每个层级系统可以做什么事情。
今天我们要做的就是给每个层级系统做最合适的技术选型和职能边界划分,最终实现让各系统、技术做它们所擅长的事情,并在最后搭建起我们的开发依赖环境。
那如何给层级系统做技术选型和职能边界划分呢?我们通常都说,没有最好的技术,只有最契合当下业务场景的技术,所以我们得先了解一下,如果使用我们传统的架构系统来支持秒杀业务,可能会出现哪些问题。只有清楚了要面对的问题,我们才能做针对性的思考和优化。
所以这节课我们将重点分析传统架构设计的特点,接着介绍最新的秒杀系统架构,并做好技术选型和环境准备。

传统秒杀系统架构

下面先看一个大家常用的系统功能架构图:
这种功能结构以及系统架构,是我们非常熟悉的。在这种方式下,Nginx 只做反向代理和负载均衡,甚至这层对我们做业务开发的研发人员来说,都是无感知的,一般运维同事在做生产环境搭建时,都会帮我们配好。研发人员更多的是在开发 Web 服务和 RPC 服务,我们把页面以及页面所依赖的静态资源都放到 Web 服务中,同时 Web 服务还提供业务接口,RPC 服务提供一些支撑服务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何设计和准备秒杀系统的架构,重点讨论了Nginx在高并发场景下的重要性以及相关技术选型和环境准备。文章首先分析了传统秒杀系统架构存在的问题,包括域名与带宽问题以及Web服务器性能问题。随后,作者提出了新的秒杀系统架构设计,包括将静态资源放到CDN、Nginx承担更多的业务逻辑校验和流量控制等改变。强调了Nginx在高并发场景下的优势,并介绍了Nginx在高性能方面的特点。此外,文章还介绍了OpenResty,它是基于Nginx与Lua的高性能Web平台,使得在Nginx上使用Lua语言来开发业务逻辑成为可能。对于Web/RPC服务技术选型,文章建议选择SpringMVC作为基础框架,Dubbo作为RPC框架,MySQL作为数据库,Redis作为分布式缓存数据库。最后,文章还提供了在Mac上安装Homebrew、OpenResty和MySQL的详细步骤,以及Nginx的测试方法。通过本文,读者可以了解到传统秒杀系统架构的局限性,以及如何通过新的架构设计来避免这些问题,提高系统的性能和稳定性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你搭建秒杀系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • Geek_5b2ab1
    踩坑之一: nginx -p pwd/ -c conf/nginx.conf 应为nginx -p ·pwd·/ -c conf/nginx.conf pwd左右的是反引号,表示执行pwd命令,获取当前工作目录路径

    作者回复: 坑已填平,``包裹没有正常显示。

    2021-09-30
    2
  • 文中说的epoll是异步非阻塞的结论我提出挑战,所谓的多路复用器,不管是select、poll、epoll不都是同步非阻塞么?
    2021-11-13
    4
    8
  • 黄序
    1)两者的使用侧重点不同,Nginx主要是反向代理以及负载均衡,Tomcat是一个servlet容器,需要处理各种动态请求,比如说网络IO以及和数据库的交互; 2)机制不同:作者大大提及到,lua脚本底层用到了携程,Tomcat使用的是线程,性能上也会存在差距
    2021-10-01
    1
    7
  • superyins
    对于M1 Mac的坑,安装位置不对。会是:/opt/homebrew/Cellar/openresty/版本号/...
    2021-10-29
    5
  • Z.G
    老师你好,问下如果是基于现代云原生的K8s基础设施,还需要Nginx吗?又应该怎么处理呢?
    2021-09-30
    4
  • nana👄
    麻烦速更啊啊啊,完全不够看
    2021-09-28
    4
  • nana👄
    tomcat,多个请求会开启多个线程来处理情书,涉及到线程的切换和锁的开销。nginx是单线程多进程,请求过来就少了那部分开销。不知道回答对不对,希望作者每期都回答下上期问题,谢谢。
    2021-10-12
    3
  • 陈强
    为什么tomcat也支持NIO但是慢的原因。 1、tomcat的请求接入使用的是Java NIO的selectable模型,也是异步事件监听的模式,并不慢。(并不清楚selectable模型是不是基于epoll实现的) 2、tomcat同时需要对请求进行处理,默认情况下(不提前加载servlet和jsp模板)第一次处理请求会涉及类的加载和jsp文件的模板翻译,还有本身的业务处理,这些过程可能比较慢。 3、selectable是否是Java语言对epoll的抽象?不太清楚。不过无论是不是,在监听到事件后,selectionKey集合本身还是要交给线程池去执行的,这涉及大量的对象创建以及线程池是否预热。 4、毕竟Java语言,底层还是要掉C和C++的库,不知道这算不算一点,哈哈哈(不会C语言,具体调啥我也不知道...这就是半路出家的痛苦...)。 感觉自己回答的有些不严谨,假设不涉及业务处理,单从请求接入这个角度的话,感觉JavaNIO应该很能打,希望老师点评。
    2021-11-09
    2
  • Nullrable
    以上工具用docker,管理比较方便
    2022-05-02
    1
  • pc
    有一个概念没有理解:(上节课也有提到)“Web 服务既提供 H5 页面、静态资源,同时也提供业务接口”。这是指前后端没有分离吗?相当于是一个服务又提供页面,又提供接口的意思吗?
    2022-02-03
    1
    1
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部