) t( X) `! j- ~- K4 a. d
〖课程介绍〗
' P$ Z. E: p+ f i3 _3 ?7 k抽奖系统属于典型的高并发和高性能的系统,同时,业务需求复杂多变,对系统的灵活性和稳定性要求同样非常高。本课程先为大家剖析多种抽奖活动的共性和特性,再设计和开发抽奖大转盘系统的后台和接口。从基本功能的开发到使用redis步步优化,以及后续的策略对比,通过压力测试,让小伙伴直观的了解不同的设置导致的的性能差异,探究性能影响的关键因素。通过这门课程的学习,可以对系统的性能、并发、灵活、可靠等方面有更多的理解和掌握,迅速提升,达到中高级工程师的水平
; R2 {; M2 b9 E- C- W3 _* {; a% P# B9 f% t& z0 a
〖课程目录〗) p+ w. O2 `$ ?0 I
第1章 课程介绍【预备,初识】: Y% d6 j+ K6 \* L+ ?
课程内容的整体介绍以及学习建议。
6 X$ Y/ z* T+ M9 F$ P) e5 X; Z1-1 Go抽奖系统导学 试看# |2 S& x2 c. c# k8 A4 T3 f
. U7 [5 B. N- T! n2 ~" t7 ?# Z第2章 6种抽奖活动来一遍【伸展运动,舒缓热身】
! L A/ F% }8 G6 C看书不如动手,本章将从年会抽奖、彩票刮奖、微信摇一摇、支付宝集福卡、微信抢红包、抽奖大转盘6种抽奖活动的实现出发,让小伙伴切身的体验下如何实现不同的抽奖活动,这些活动实现的差异和难点在哪,并示范用多种方法(互斥锁、atomic、sync.Map等等)解决并发安全问题。.../ y$ @$ E' ]6 ^9 L3 j# i
2-1 年会抽奖_实现分析
' l Q0 q- L5 Q9 Z0 F/ D8 D2-2 年会抽奖基本功能实现
* O j0 g0 H; M2-3 编写web单元测试和并发安全问题
4 Z7 \( h! ?, G2 t! q% I2-4 用互斥锁解决并发安全问题
1 L2 _9 ~6 _) l4 E) S2-5 彩票_实现分析
6 K; h9 ]5 d2 H2-6 刮刮乐和双色球 试看* S" S; L# q, v5 Z" j5 T+ z- o
2-7 微信摇一摇_实现分析
+ x k9 q7 { T# A; K2-8 微信摇一摇实现(上)2 h! T* T5 p* B N3 D
2-9 微信摇一摇实现(下)4 N$ k( X! N4 |- ~0 P+ v
2-10 bug修复和压测
e" `, \* _+ e9 R+ r t2-11 支付宝集福卡_实现分析2 g( N7 L f$ n0 q' M" p
2-12 支付宝集福卡实现3 e2 b9 b# r) f- Y
2-13 微博抢红包_实现分析
3 j7 Z( W7 b5 q! ~# N' A2-14 实现发红包: b8 e( s, l( h, d
2-15 实现抢红包+ R* s) x# `) F) k. R# K/ Q1 e
2-16 均衡问题和sync.Map解决异常
" } I8 m1 q# m( K& s9 n4 T: d2-17 改用chan的方式解决并发安全问题& }5 I6 n- ?; C* x
2-18 再次压测验证和优化改造+ _3 C4 e9 Y5 j3 d- {$ J+ a+ B
2-19 抽奖大转盘_实现分析
4 g; r4 j2 s4 ]7 e9 W2-20 抽奖大转盘初步实现9 r6 ~! j2 S* U, E6 _3 e0 j9 d
2-21 sync.Mutex和atomic改造性能对比
, {4 h$ }( S* l! j2 `2-22 六种抽奖活动总结4 {+ C/ a/ i" o6 X( k% f
2-23 并发编程与锁的底层原理
4 h3 h" t% W# n! [7 H& Y4 D2-24 高并发和高性能系统中锁的影响与解决办法
" j1 ^, g; d- {7 k* v2 }2-25 阶段任务: S T9 i/ c/ Q3 p7 G# h2 X
& h5 w/ \- `, w6 \: x第3章 系统设计和架构设计【扩胸运动,有容乃大】 x d1 ^) r, B) x7 E3 L
本章对抽奖系统和架构进行详细的设计。总结前面的开发经验,从需求分析开始入手,整理需求,提炼功能,分析完善用户操作和业务流程、数据库设计、缓存设计要点。- ` Q& e* }2 Q, q# J: K
3-1 需求整理和提炼 m/ X5 a& {! Y2 f, O- Y& a" E* h
3-2 用户操作和业务流程
& P8 t3 U$ R8 p8 D% \% `3 K3-3 数据库设计
7 `2 L: W; p e8 {( x3-4 缓存设计 试看* _1 g% L0 }% |
3-5 系统架构设计/ ~/ t* O' D7 b: \2 [
3-6 系统设计和架构设计总结7 U0 m' u+ A/ @& G9 |( k
3-7 高性能程序设计,缓存为王6 U: n+ O% w+ g, U" t
3-8 系统架构升级之道,关注关键服务依赖+ L% J2 x9 e; ^ [/ }! |
3-9 阶段任务7 k) d9 ?% A& G7 S1 x
+ C1 n" G6 p6 z
第4章 项目框架与核心代码【踢腿运动,固若磐石】
, Z5 }, p) x7 w8 A, O' B本章开始动手使用iris+xorm先把项目框架搭建起来,并且把基础的核心代码(dao,services,comm,用户登录、退出等)完成,为后续的功能开发做基础的准备。2 @0 F& @' p+ [9 q4 p. p: J' e
4-1 项目框架搭建0 }7 H$ u- U% j
4-2 数据模型的生成! k3 T5 q; \1 Y+ J4 [) P
4-3 核心的dao和service类9 d3 o5 H4 G L2 ?: @- e! a
4-4 定义dao
( ]- V3 V3 L+ O% j8 J8 Z8 B4-5 定义service
3 _* k4 R5 o. q4-6 定义数据库和redis配置信息/ {1 [. R. F; \0 A) S# r/ T: F
4-7 创建数据库实例及其要点
2 C4 B" C( W% a* Y4 y6 n4-8 创建redis实例及其要点2 X' e/ ?- M+ h J" J: k0 a3 j
4-9 利用iris建立web站点
# w5 k; b# i3 D4 F' l4-10 项目配置和通用方法
4 F. s) D8 y. d. Q4 _ f4-11 web站点初始化构建1 e4 S8 Q, N& }1 A1 [! c( g o h
4-12 实现IndexController
0 E4 W9 Z- Y& a7 g4 s8 Q7 R+ c7 Q3 }4-13 完善路由和main.go文件# j; Z. p' X! q3 \ n
4-14 登录和退出:安全值校验和防篡改
; T+ }1 G8 P1 U5 d' M1 X+ X5 J$ d. e/ \$ B4 ^% _6 R, L
第5章 后台功能开发【体侧运动,运筹帷幄】
" S8 K' I, E: y9 z3 _' l一个可视化的管理后台可以更好的帮助产品运营来自助操作,本章将实现相关功能并完成抽奖活动的定制规则设置。3 F( s& m! c8 R4 S2 T% H+ K
5-1 后台功能开发介绍4 v. p7 a1 V7 H0 F7 ?) |6 J. S
5-2 页面模板和AdminController4 }6 L, k8 G) ~* Z/ N& c6 r
5-3 奖品管理实现(上)7 G7 x: G# ^7 ]- C7 l( y5 h/ F8 Z! \
5-4 奖品管理实现(中)
: U1 e5 J. S3 L$ I5-5 奖品管理实现(下)
! D: b8 n$ M! S ^5-6 优惠券管理实现(上)
5 c$ d+ Z" K+ t" j2 @ I% M" t5-7 优惠券管理实现(下)- L8 L4 ]* s' o# c
5-8 中奖记录管理
- h$ u Q% s3 u6 ]# O5-9 用户管理
6 o" {, l+ g, ~/ n9 _6 S/ x" P) ?5-10 IP黑名单管理 B; q; H0 |, {2 s) G* A1 ?! `; `' c
: y( T5 t8 w3 v" Y9 s第6章 基于mysql的抽奖功能开发【体转运动,基础版本】; Z4 T5 ?) Q, G% i, O- q' ^
本章将先完成后端抽奖接口的实现,完成抽奖业务逻辑和数据流程的开发。
! O G$ L, U9 z6-1 抽奖接口开发细节分析: X3 P) e! x& z3 z J. ?
6-2 用户并发操作的锁7 T' b% y+ _2 J& x% M+ p& \/ V
6-3 验证用户、IP今日参与次数(上), T& g( J8 S, E$ c; s n" F$ n
6-4 验证用户、IP今日参与次数(下)
4 _2 r! O" i( j) D# {( @6 _6-5 用户、IP黑名单的处理
: T i' P8 D. d/ w6-6 抽奖的实现
2 k. t2 E! K0 [/ i( j6-7 发奖的实现
4 G( L7 g0 [! L1 }3 c! M6-8 中奖记录和返回结果
& h0 _% \# O6 m1 ~5 h( o# }; \! K: ^0 a T9 B; ]5 ?
第7章 使用redis缓存优化【全身运动,升级版本】
" V6 q# n4 F! S( S- e. w. ~本章引入redis来优化整个系统,减轻对mysql的依赖,提高抽奖接口的性能。. O/ t5 _+ b! q1 N; j" ~- P, ~8 n
7-1 分析_奖品数据全量缓存6 Y/ m% ?1 h3 L' H
7-2 实现_奖品数据全量缓存(上)
) f. I" y! u+ q7-3 实现_奖品数据全量缓存(下)
1 V' H6 I* }- O4 k2 g7-4 分析_单个用户数据部分缓存
& T a% B$ R; h* O( V2 p3 A. }2 u/ y7-5 实现_单个用户数据部分缓存! M w p1 l0 y7 g9 E+ M# V" V
7-6 分析_IP黑名单数据缓存
6 i, O6 t/ C7 |8 w. |$ |9 e7-7 实现_IP黑名单数据缓存' U) ~, S. Q8 l
7-8 优化IP今日抽奖次数8 O9 N( S; Y) ]1 ]7 w6 n: P
7-9 优化用户今日抽奖次数2 l+ [2 G7 @, g" r2 T/ E+ x
7-10 用户今日抽奖次数(上)1 K4 y6 V0 T6 p
7-11 用户今日抽奖次数(下)% w* e1 d- t$ b0 K) J! ]
7-12 为什么使用奖品池
$ [, n1 H8 V |7-13 初步使用奖品池
3 U* g+ O$ W% {2 y4 b) Q7-14 分析_优惠券的全量缓存
% t0 ]8 Q' [0 q/ `& `/ ?, o7-15 实现_优惠券的全量缓存(上)
I, @! ?. r! a m7-16 实现_优惠券的全量缓存(下)% f. l1 ~& P) n& ]
7-17 使用redis优化总结
- z) n7 [6 W' O# ?( `$ ?* U2 d' W6 R
第8章 奖品池以及发奖计划的实现【跳跃运动,极致版本】
0 I# T+ A4 j3 U) u% }本章实现两个基础服务功能(更新发奖计划,自动填充资源池),来完成奖品的发奖计划数据维护,保证可以合理的把奖品填充到奖品池中。
8 B; m# f5 O# n3 B( h( }; h8-1 发奖计划设计分析1 }( W% j5 @( u4 c$ l5 e/ q+ a
8-2 实现发奖计划(上)" p/ x( _. d T9 D$ G4 o
8-3 实现发奖计划(中)
# m8 `1 R6 a9 O8-4 实现发奖计划(下). C+ e& f- F# L) K3 y2 S' b
8-5 自动填充奖品池分析: Z6 S& j* q! i) J3 S
8-6 实现奖品池(上)
! A9 }6 Z7 ?& U0 j# B( Q' P7 p8-7 实现奖品池(下)6 J9 B* r( u) ?6 x' M$ [# O7 G
8-8 总结发奖计划和奖品池5 H8 U, I% X# Y
# S U5 s. ~ q( R第9章 完整性演示以及更多总结【整理运动,整体交付】4 s6 z* E) |' t0 _# M
实现前端页面的大转盘效果,完整的演示最终的效果。通过不同的设置以及测试方法,利用压力测试工具对系统性能进行分析,深入了解业务逻辑以及技术实现的细节,对系统性能的影响,明白时间消耗的关键点。而更多的思考和总结,让抽奖类活动的有更多玩法。 ...
, W: D% }" D/ q) q7 j3 z; p9-1 前端大转盘分析
& M! R; N6 w9 _9 T9-2 前端大转盘效果实现8 h/ ~* q$ ^. R# K8 x; t/ l
9-3 优化奖品设置分析
* }) R, j3 E! W5 }5 }; Q2 Z+ w9-4 优化发放奖品分析+ q4 Z" F: J3 G* M3 u7 S! l2 J
9-5 再来一次压力测试吧
" P8 d# B, _+ u# Y$ e9-6 压力测试
& \! c- Z: h. j# {2 Q% s9-7 更多运营策略
) N" j0 y1 W1 e. b9 T6 e/ U* ?
J$ r4 j7 p) D) ^. m6 q/ Z" t第10章 引入thrift框架【附加运动,扩展服务】
% I* ?" q3 n' U% V/ E/ ]) Z通过rpc框架,将抽奖系统服务化,可以更加灵活和简单的接入到更多的业务系统中。1 K q6 f4 _- o' a
10-1 了解thrift
, _& b5 D, h! K10-2 定义thrift文件$ A7 |* z) r- E
10-3 生成代码
8 [ S! d5 i; C+ ^" k- f10-4 服务端接口(上)
; Q$ C6 X3 @- N% g10-5 服务端接口(中)
X; Y5 `/ r8 ~6 J7 f10-6 服务端接口(下)
5 R9 ?0 l/ f. L" O10-7 客户端接口
7 ?" {. n3 h5 D% _2 ?8 i10-8 总结
+ p; C S2 p# j5 b, f' @
# A! j- M1 d" k4 N+ M8 n. B/ |. Y第11章 课程总结【结束,沉淀】! Q& R6 J3 r+ B/ E
对课程进行总结
, e- w3 M$ l# \, [11-1 问题与思考1 m, q0 T6 E6 m! O0 K+ C a* ?/ X
11-2 课程总结/ l! P& _7 ]9 Q$ H
+ l: v. t$ i4 D9 A' o# o〖下载地址〗6 M$ r* _( m, R. I3 [! W; P& S( \6 L
, X6 J \6 a; J
, W9 r" \* p3 ^$ L
4 Y; A1 {% [0 \/ X6 b6 L |
|