手把手教你做系统设计 | 青训营笔记

40 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 10 天

概述

本节课程主要分为四个方面:

  1. 系统设计方法论
  2. 电商秒杀业务介绍
  3. 课程实践
  4. 课程总结

课前部分主要罗列课程中涉及到的中间件和相关背景知识。对于使用到的中间件,同学们需要体验了解概念,安装并正确使用。课中部分会详细讲解系统设计的方法论和秒杀系统实践,帮助同学们入门系统设计。课后部分会做一些总结,梳理核心思想和重点。

课前 (必须)

了解基本的电商概念和流程

  • 电商平台业务
  • 秒杀业务特点

MySQL

  • 安装MySQL,推荐使用MySQL8及以上版本
  • 熟悉ddl,dml等基础语法
  • 了解sql优化

Redis

  • 安装Redis,推荐最新版本
  • 了解Redis的基本数据类型和使用场景
  • 熟悉常用命令
  • 了解Lua脚本的使用
  • 了解Redis分布式锁

RocketMQ

  • 安装RocketMQ,推荐最新版本
  • 了解RocketMQ的基础概念和架构
  • 了解MQ的使用场景
  • 了解生产者如何保证消息的可靠性发送
  • 了解消费者如何保证幂等
  • 了解消费者pull和push模式的区别

OpenResty

  • 安装OpenResty,推荐最新版本
  • 了解Nginx的基础概念和使用
  • 了解Lua脚本的语法

Linux

  • 熟悉常用命令
  • 熟悉进程和线程
  • 了解Linux调优

Java

  • 按照JDK,推荐JDK11
  • 熟悉Java基础语法和lambda表达式
  • 熟悉idea的使用
  • 了解并发编程
  • 了解springboot框架的使用
  • 了解maven的使用

Jmeter

  • 安装Jmeter
  • 了解使用Jmeter压测

课中

引言

  • 为什么要做系统设计

    • 个人?
    • 工作?
  • 系统设计的概念是什么

  • 如何做系统设计

    • 4S分析法

【场景分析Scenario】【存储设计Storage】【服务设计Service】【可扩展性Scale】

  • 如何分析系统瓶颈和优化

    • 火焰图分析
    • 链路分析
    • 全链路压测
  • 如何验证系统的可用性和稳定性

    • 链路梳理
    • 可观测性
    • 全链路测试
    • 稳定性控制
    • 容灾演练

电商和秒杀

基本概念

  • Spu
  • Sku
  • 秒杀业务的特点

秒杀的挑战

  • 资源有限性
  • 反欺诈
  • 高性能
  • 防止超卖
  • 流量管控
  • 扩展性
  • 鲁棒性

设计秒杀系统

4S分析

  • 场景

  • 存储

  • 功能

  • 扩展

系统架构图

实践

秒杀流程

代码

redis用lua脚本保证操作的原子性

decrease-stock.lua

if (redis.call('exists', KEYS[1]) == 1) then
    local stock = tonumber(redis.call('get', KEYS[1]))
    if (stock == -1) then
        return 1
    end
    if (stock > 0) then
        redis.call('incrby', KEYS[1], -1)
        return stock - 1
    end
    return 0
end
return -1

总结

高性能系统的通用设计思想

课后

  • 秒杀课程的总结
  • 秒杀系统的扩展