Marvel-Site Marvel-Site
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)

Marvel

吾必当乘此羽葆盖车
首页
  • Java

    • Java基础
    • Java进阶
    • Java容器
    • Java并发编程
    • Java虚拟机
  • 计算机基础

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • Linux
  • 框架|中间件

    • Spring
    • MySQL
    • Redis
    • MQ
    • Zookeeper
    • Git
  • 架构

    • 分布式
    • 高并发
    • 高可用
    • 架构
  • 框架

    • React
    • 其他
  • 实用工具
  • 安装配置

    • Linux
    • Windows
    • Mac
  • 开发工具

    • IDEA
    • VsCode
  • 关于
  • 收藏
  • 草稿
  • 索引

    • 分类
    • 标签
    • 归档
GitHub (opens new window)
  • Java

  • 计算机基础

  • 框架|中间件

  • 架构

    • 分布式

    • 高并发

    • 高可用

    • 架构

      • 《大型网站技术架构》笔记
      • 系统设计
        • 1. 如何设计一个系统?
        • 2. 如何设计一个秒杀系统?
      • Domain-Driven Design入门
      • CQRS
      • 设计原则
  • 后端
  • 架构
  • 架构
Marvel
2022-09-16
目录

系统设计

# 系统设计

# 1. 如何设计一个系统?

网站设计不可能一蹴而就,都是根据业务需求逐渐演化而来。架构师所能做的就是根据已有的经验设计出尽可能完美的系统。

设计前

分析业务需求,制定方案,选择合适的技术栈。

设计时

需要考虑整个系统的高性能(并发能力)、可用性、伸缩性、扩展性、安全性。

  • 高性能:响应时间块、并发量高、吞吐量大等等
    • 前端优化:浏览器访问优化、CDN 加速、反向代理
    • 应用服务器优化:缓存、异步、集群、代码优化
    • 存储性能优化:选择更好的服务器
  • 高可用:可用时间、故障时间
    • 架构:分层,应用层 — 服务层 — 数据层
    • 应该层、服务层的可用:异步调用、服务降级、服务熔断、幂等性设计
    • 数据层的可用:数据备份、失效转移
    • 高可用发布:自动测试、自动发布、灰度发布
    • 运行监控:监控数据采集,出问题可以分析;监控管理,出问题报警、失效转移,自动降级等
  • 伸缩性:集群里添加删减服务器,性能可以线性上升
    • 应用服务器集群负载均衡
    • 分布式缓存可以使用一致性 hash 算法
  • 可扩展性:不改变已有系统添加新的功能
    • 消息队列
    • 分布式服务打造可复用的业务平台

工作流引擎:将视图文件编译成 Java 代码。开源项目:compile-flow、activiti

# 2. 如何设计一个秒杀系统?

遇到的问题及解决方案

⭐ 高并发对已有业务造成影响,有可能造成整个网站瘫痪。

秒杀系统独立部署,使其与原网站隔离开,即使秒杀系统崩了,也不会对网站造成影响。

⭐ 大量的请求会对应用服务器和数据库服务造成负载压力

扩展应用服务器的集群。

⭐ 超过网站平时的网络带宽

为秒杀系统新增网络带宽,在运营商哪里购买或租借。为了减轻网站服务器的压力,将秒杀的静态页面缓存到 CDN。

⭐ 秒杀系统的设计

前台系统的设计

  • 详情页面静态化,将商品的描述、参数、成交记录、评价全部写入一个静态页面,将其存储在 redis 集群中,或者放在运营商的 cdn 服务器上,或者用户的浏览器上,以减轻应用服务器和数据库的压力。
  • 按键设计,秒杀开始之前不能点击购买,开始之后,用户 10s 内只能点击按钮一次,防止重复购买。
  • 秒杀开始之前谁都不知道秒杀的 url,开始之后动态生成。
  • 验证码

后台系统

  • 为了防止网站崩溃,需要设置服务降级、熔断、限流。Sentinal
  • 通过 redis 解决高并发读的问题;通过 MQ 异步/削峰解决高并发写的问题。
  • 通过 MQ 发布/订阅模式,可以异步处理积分、物流等业务。
  • 超卖问题
    • 下单服务,通过 redis 预减库存,redis 查询判断用户发符合预约条件后,在把相关信息发送到 MQ,通过 zookeeper 分布式协调,监控处理结果
    • 库存服务,专门监听 MQ,减少数据库中的库存,如果处理失败就回滚。通过 zookeeper 分布式协调告知下单服务是否下单成功。
    • 下单成功后,在有效时间内付款,超时自动化释放订单。
编辑 (opens new window)
#架构
上次更新: 2023/08/20, 21:21:52
《大型网站技术架构》笔记
Domain-Driven Design入门

← 《大型网站技术架构》笔记 Domain-Driven Design入门→

最近更新
01
位运算
05-21
02
二叉树
05-12
03
Spring三级缓存解决循环依赖
03-25
更多文章>
Theme by Vdoing | Copyright © 2022-2024 Marvel
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式