. g8 n9 E! O7 n6 X1 `7 i〖课程介绍〗
1 q0 `8 c/ y% H4 K6 }' N抽奖系统属于典型的高并发和高性能的系统,同时,业务需求复杂多变,对系统的灵活性和稳定性要求同样非常高。本课程先为大家剖析多种抽奖活动的共性和特性,再设计和开发抽奖大转盘系统的后台和接口。从基本功能的开发到使用redis步步优化,以及后续的策略对比,通过压力测试,让小伙伴直观的了解不同的设置导致的的性能差异,探究性能影响的关键因素。通过这门课程的学习,可以对系统的性能、并发、灵活、可靠等方面有更多的理解和掌握,迅速提升,达到中高级工程师的水平
( j) ^1 j+ N' [2 \7 m8 w) a, P' ~
〖课程目录〗& j* j2 x1 j& P5 t
第1章 课程介绍【预备,初识】
4 Z3 H* }! S* u课程内容的整体介绍以及学习建议。
$ f5 `: \" B- p% y. W1-1 Go抽奖系统导学 试看
# o" Q2 v% V x% o7 U! h* _6 Z7 k/ i, [( n+ `% ~9 }. _
第2章 6种抽奖活动来一遍【伸展运动,舒缓热身】
+ M) U& C) }; Q; M看书不如动手,本章将从年会抽奖、彩票刮奖、微信摇一摇、支付宝集福卡、微信抢红包、抽奖大转盘6种抽奖活动的实现出发,让小伙伴切身的体验下如何实现不同的抽奖活动,这些活动实现的差异和难点在哪,并示范用多种方法(互斥锁、atomic、sync.Map等等)解决并发安全问题。...- k; w2 D8 e3 B7 L* B; z1 C( `
2-1 年会抽奖_实现分析
9 l' V. L x( q6 `4 x* c$ y2-2 年会抽奖基本功能实现! Z( `6 o) p2 j) M, M. N# _7 e
2-3 编写web单元测试和并发安全问题2 C1 d7 T+ F, t- N4 n, L7 c& v
2-4 用互斥锁解决并发安全问题
* u$ a0 b7 G$ q: K1 ^2-5 彩票_实现分析
! F5 \( i/ N$ e3 U2 Q2-6 刮刮乐和双色球 试看0 j9 p8 D' _: D( s; P
2-7 微信摇一摇_实现分析
/ c8 V9 r2 S+ E; ^$ ^2-8 微信摇一摇实现(上)! N6 W; x" H7 H+ P0 x
2-9 微信摇一摇实现(下)
& H2 Q; d5 r2 [' m% L, |8 f2-10 bug修复和压测
3 U( w8 _7 n, B: T2 M2-11 支付宝集福卡_实现分析
4 Q4 p5 W; z. C2 M2-12 支付宝集福卡实现) J, e, n E! p2 q) D" q) n
2-13 微博抢红包_实现分析+ {3 r5 q) O W% U# v2 _
2-14 实现发红包
: a. R. I5 B/ }, p7 G k3 x2-15 实现抢红包/ M$ r/ @3 T2 Q, H6 i
2-16 均衡问题和sync.Map解决异常3 v" y9 h, Y7 t: o7 P; A' J) K1 j
2-17 改用chan的方式解决并发安全问题
: Z* H, N6 k1 B1 I: B! G2-18 再次压测验证和优化改造. n& C. S2 m& d% E3 ?, k
2-19 抽奖大转盘_实现分析
) ?, d5 `6 j0 h; b6 C; @$ m2-20 抽奖大转盘初步实现
: \0 Z+ a9 Y: l- R: J2-21 sync.Mutex和atomic改造性能对比7 R# j# G+ @+ S& P. G4 l0 W
2-22 六种抽奖活动总结, F- L% P' B! M% j1 Q8 P4 s
2-23 并发编程与锁的底层原理4 Z) K1 D4 T- n3 u; G
2-24 高并发和高性能系统中锁的影响与解决办法
! Z3 n# ]3 [4 @1 i7 D2-25 阶段任务/ O+ G% @- Z3 A4 W
: P4 j0 [' k/ Y# x- @1 k第3章 系统设计和架构设计【扩胸运动,有容乃大】5 }6 I9 `) c1 L# A8 `5 ^9 d J7 {# U
本章对抽奖系统和架构进行详细的设计。总结前面的开发经验,从需求分析开始入手,整理需求,提炼功能,分析完善用户操作和业务流程、数据库设计、缓存设计要点。4 e* D0 j0 Y7 n" e( k
3-1 需求整理和提炼
: Z& K3 V/ T6 R( {* U3-2 用户操作和业务流程
* g! B7 {1 c) H$ F3 ^3 c% i5 w3-3 数据库设计
: S1 k% l- A- ]( Z/ ?# @' B; T3-4 缓存设计 试看
% _! ~& M, C* B5 U3 H7 j8 n3-5 系统架构设计
, q) ~) H& Z7 h0 c7 k- Z9 L3 q3-6 系统设计和架构设计总结
! L% D# Q+ V" u/ K; v3-7 高性能程序设计,缓存为王
! c: x- A3 I( g0 V- B3-8 系统架构升级之道,关注关键服务依赖. q: p2 }7 P1 K% P# ^
3-9 阶段任务" J5 r9 B0 U" O' ~6 f; w4 I- a
* r: |% a# ]& x S
第4章 项目框架与核心代码【踢腿运动,固若磐石】
* f. r9 k. W, C# |# b; F! N本章开始动手使用iris+xorm先把项目框架搭建起来,并且把基础的核心代码(dao,services,comm,用户登录、退出等)完成,为后续的功能开发做基础的准备。/ x+ _3 _7 [' ^/ \- b& Z9 M
4-1 项目框架搭建
% ?/ l% A* B0 z% g" |; [1 j4-2 数据模型的生成
s: z, R/ S4 }4-3 核心的dao和service类7 y& Y- K9 ^1 R) t7 u
4-4 定义dao, d1 m0 _% V2 g) V5 W |
4-5 定义service
" I- q4 V2 A* T! U4-6 定义数据库和redis配置信息" W6 h' f" M% R
4-7 创建数据库实例及其要点3 _) W$ T3 `$ T |+ @
4-8 创建redis实例及其要点
( g0 d/ }# M$ {0 Q, i4 ]# h4-9 利用iris建立web站点2 X, S) \' b2 |3 j% h" k
4-10 项目配置和通用方法) p: l+ z8 }% m+ }2 u" O( l, J
4-11 web站点初始化构建
0 ?6 b$ \( |7 H4-12 实现IndexController
( ~5 Q& F* b$ N. S4-13 完善路由和main.go文件( c! P2 `( V' Y% ?
4-14 登录和退出:安全值校验和防篡改4 v' m5 U( U a9 |* s% @4 j1 G
$ S9 G9 l2 X8 N第5章 后台功能开发【体侧运动,运筹帷幄】+ ]; Z" z0 t7 \2 h% g) m3 t p
一个可视化的管理后台可以更好的帮助产品运营来自助操作,本章将实现相关功能并完成抽奖活动的定制规则设置。3 d! M8 b) b6 J
5-1 后台功能开发介绍0 k+ s) Z/ V4 e
5-2 页面模板和AdminController
1 N# e% x& y# U3 _5-3 奖品管理实现(上)
% X4 |! s' B: J4 F* h/ K1 ^6 n4 D% K5-4 奖品管理实现(中)4 x/ W/ U- ]' S
5-5 奖品管理实现(下)
: h; r' o$ i" [7 `% [* R9 A5-6 优惠券管理实现(上)
& a* j. r$ y6 T. [% r5-7 优惠券管理实现(下)- U( l/ b% ], [+ u
5-8 中奖记录管理+ b1 i5 k: O# e* E
5-9 用户管理
* e+ b, W; R$ i, ]5-10 IP黑名单管理
) k" t2 `) o- P% G% @2 c$ [* H4 l
第6章 基于mysql的抽奖功能开发【体转运动,基础版本】
: `9 F J+ ]) P2 P+ L5 ^4 U8 I本章将先完成后端抽奖接口的实现,完成抽奖业务逻辑和数据流程的开发。& z6 s+ W6 h; ?
6-1 抽奖接口开发细节分析
! D! C, u5 L" ?) W0 V6-2 用户并发操作的锁- x3 F+ y$ v0 v- c
6-3 验证用户、IP今日参与次数(上)( T, [+ E1 y* G) I5 s q8 _, u a E# f1 d
6-4 验证用户、IP今日参与次数(下)
% b( d* _7 x" _( x# l* |6-5 用户、IP黑名单的处理) k8 @! _0 { h* e4 e- \6 B2 M
6-6 抽奖的实现
! _( H R/ u& d& M6-7 发奖的实现
# [$ M z* m; h u6-8 中奖记录和返回结果
5 q0 \9 l2 Q1 `& H, }) L
' c% D8 ^; T* D- s第7章 使用redis缓存优化【全身运动,升级版本】
) X! ^- r! t1 b% Q2 }2 w0 t本章引入redis来优化整个系统,减轻对mysql的依赖,提高抽奖接口的性能。
1 t# ~* p; }# g% ?9 a1 P6 H8 M: j3 G% P) o7-1 分析_奖品数据全量缓存
4 ~0 Q0 }1 k" b4 \: q3 ~. S7-2 实现_奖品数据全量缓存(上)
# |; [* `8 C0 T* y0 z8 I. {) D7-3 实现_奖品数据全量缓存(下): _; u. x. Y1 b9 p& k# Q
7-4 分析_单个用户数据部分缓存
: ]; a! M% o o& M6 C7 w/ {7-5 实现_单个用户数据部分缓存' p# @" s0 C4 O) z6 r
7-6 分析_IP黑名单数据缓存8 V& d/ D. N3 t9 {8 H6 {
7-7 实现_IP黑名单数据缓存
0 z) D- }( l% k# @* V8 H8 F) J$ {1 m7-8 优化IP今日抽奖次数
j, r6 D ^! o7-9 优化用户今日抽奖次数
* _" L7 C8 Q. K$ ~7-10 用户今日抽奖次数(上)
; v. w* E) U! A, M% Y7-11 用户今日抽奖次数(下)
% @) d: {+ r- o' L. Z6 j7-12 为什么使用奖品池! K( z: _: z* S9 S
7-13 初步使用奖品池
/ o. B# T9 f/ T1 F1 `5 ?& `7-14 分析_优惠券的全量缓存
) L+ ]% {! e3 f7-15 实现_优惠券的全量缓存(上)
* }' _; s+ ~. e0 X7-16 实现_优惠券的全量缓存(下)4 g8 n: z8 l1 G: p, m0 |! l
7-17 使用redis优化总结0 _. K& a% d7 P7 `& h* k
4 @* w) f; `" r1 g7 A: a第8章 奖品池以及发奖计划的实现【跳跃运动,极致版本】" ~; j$ `* l h0 _2 }
本章实现两个基础服务功能(更新发奖计划,自动填充资源池),来完成奖品的发奖计划数据维护,保证可以合理的把奖品填充到奖品池中。+ f) g0 `6 e9 Z Y7 }* i; ^
8-1 发奖计划设计分析
$ y' E8 @4 Q" {2 o" S' d* S8-2 实现发奖计划(上)' r, U# f* G- j& I1 n" P
8-3 实现发奖计划(中)
) ^7 V( V) d* r9 G( w4 s% Z8-4 实现发奖计划(下)
' r- b) ?% B3 u% n- d8-5 自动填充奖品池分析5 ]7 E! q+ j0 v/ S
8-6 实现奖品池(上)
, R N# n8 Y- \# {1 V8-7 实现奖品池(下)
8 W9 m& K( u7 B2 v8 R) X5 N8-8 总结发奖计划和奖品池& V( C! |5 F6 Z0 p) P! k" u
1 R- ~+ e+ h/ ~" u2 b第9章 完整性演示以及更多总结【整理运动,整体交付】
; L" v# e0 s6 w0 ]8 N实现前端页面的大转盘效果,完整的演示最终的效果。通过不同的设置以及测试方法,利用压力测试工具对系统性能进行分析,深入了解业务逻辑以及技术实现的细节,对系统性能的影响,明白时间消耗的关键点。而更多的思考和总结,让抽奖类活动的有更多玩法。 ...+ G- O) q- m3 b8 n, {: R% e1 I! V
9-1 前端大转盘分析2 E9 _9 U3 v& x4 g: _4 I
9-2 前端大转盘效果实现
`1 y! y# T8 Y0 I9-3 优化奖品设置分析
# b; s- ], y5 {7 n% m4 m- x9-4 优化发放奖品分析1 t- F4 I" ~8 w, {5 z3 t
9-5 再来一次压力测试吧0 _8 i S: _3 Q7 ~6 u$ o! }' g4 ?
9-6 压力测试; r/ I# O/ Q5 ]( P3 l) |4 l4 M
9-7 更多运营策略
9 I' R7 J# l1 O, K! n% D; d2 V5 y p- |" ]# u( @0 _4 d( O5 {( T
第10章 引入thrift框架【附加运动,扩展服务】
1 B9 B$ f8 Z" s# O8 F4 J通过rpc框架,将抽奖系统服务化,可以更加灵活和简单的接入到更多的业务系统中。/ }: ], n2 B! F0 L( C4 H" Q
10-1 了解thrift3 i3 t! m, _* F/ u; y+ K$ P0 |
10-2 定义thrift文件
0 S* ^, R3 ]( t p2 l10-3 生成代码0 a. T, y+ S( x* m
10-4 服务端接口(上)% I& V K$ n" l( Y) s
10-5 服务端接口(中)
4 x* o4 a/ h! `; i. w7 t' G) o. Q10-6 服务端接口(下)
8 E. S0 i6 C/ e, _2 y2 _, x10-7 客户端接口: p7 Y- E: i, d* W
10-8 总结1 `( e9 E. ]( A; b1 y9 X. f+ ^
' h! O+ u+ f( q: \0 @0 w+ G第11章 课程总结【结束,沉淀】% G3 }3 t% g$ v7 ^& e/ v
对课程进行总结
M1 e, K6 [& u0 T* \) j11-1 问题与思考
/ y( q1 ~6 o. |1 S) m! ]11-2 课程总结) u9 O, s3 f1 {# ]
. g: L1 L2 h4 y〖下载地址〗
0 E7 p0 W5 q* W( \- F) E0 {
9 b5 V$ m9 e2 P; ]+ V
. M$ F: m. {3 P) D9 m: P* ^& T$ `7 F
: U( n# E( a* ~ O# Y2 T |
|