' d8 H8 Z. B# H! ~) y9 J〖课程介绍〗2 T4 L* u7 u) O7 @) V3 n
抽奖系统属于典型的高并发和高性能的系统,同时,业务需求复杂多变,对系统的灵活性和稳定性要求同样非常高。本课程先为大家剖析多种抽奖活动的共性和特性,再设计和开发抽奖大转盘系统的后台和接口。从基本功能的开发到使用redis步步优化,以及后续的策略对比,通过压力测试,让小伙伴直观的了解不同的设置导致的的性能差异,探究性能影响的关键因素。通过这门课程的学习,可以对系统的性能、并发、灵活、可靠等方面有更多的理解和掌握,迅速提升,达到中高级工程师的水平' g) L1 w; x; }9 X% ^) z# W9 b
# Z0 @% }- U* ^. m, I: m
〖课程目录〗4 C3 ?8 C$ f+ z1 u0 n5 a
第1章 课程介绍【预备,初识】
3 O$ @& |, m. H' j课程内容的整体介绍以及学习建议。9 f# y$ L- K' R( W+ a
1-1 Go抽奖系统导学 试看
8 N$ Y8 |# f0 V( M8 [( N& s% J7 Z9 o" @( \" v- S0 f. z) u- q
第2章 6种抽奖活动来一遍【伸展运动,舒缓热身】9 O% x. L! Q! t5 C. Z
看书不如动手,本章将从年会抽奖、彩票刮奖、微信摇一摇、支付宝集福卡、微信抢红包、抽奖大转盘6种抽奖活动的实现出发,让小伙伴切身的体验下如何实现不同的抽奖活动,这些活动实现的差异和难点在哪,并示范用多种方法(互斥锁、atomic、sync.Map等等)解决并发安全问题。...
( Z$ ~, }, E/ ~- {$ V5 m5 u2-1 年会抽奖_实现分析
5 T2 }( J$ z2 \" ?2-2 年会抽奖基本功能实现6 A9 |3 P4 \) E3 n. b% {# {+ s
2-3 编写web单元测试和并发安全问题. c/ e9 Z+ n3 u' \7 `" n. A) Z
2-4 用互斥锁解决并发安全问题# \! d5 w/ Q. H |9 g- _
2-5 彩票_实现分析
" D; L, @/ D& ?7 |+ g6 y2-6 刮刮乐和双色球 试看+ X5 x) ]3 q. ^ { D
2-7 微信摇一摇_实现分析7 F" Q% o. O) {. ]( I& C3 V
2-8 微信摇一摇实现(上)
8 n) S( u. ~" m' g: Q$ K( u6 C0 w2-9 微信摇一摇实现(下)
) D3 y! L5 O! O6 I2-10 bug修复和压测; b1 [ b0 R$ p" ~
2-11 支付宝集福卡_实现分析$ M- E8 s, v V1 u" A% I
2-12 支付宝集福卡实现1 D* ^0 {. |/ D# d n4 M5 L1 w
2-13 微博抢红包_实现分析
, \8 V2 @9 X8 s2-14 实现发红包0 p# K' t# Q! }# H8 a! H
2-15 实现抢红包3 \% ~& K% \& E6 f R
2-16 均衡问题和sync.Map解决异常
9 c' R ?+ P' C# c) s2-17 改用chan的方式解决并发安全问题 O! Y/ ]) n* b1 y; k& @4 t7 S
2-18 再次压测验证和优化改造
3 G/ m3 o: J. G5 H/ Z8 T2-19 抽奖大转盘_实现分析
" m. ]0 E/ r* B7 O7 e/ h2-20 抽奖大转盘初步实现
' }$ S3 Y1 W$ Q% h2 i* g4 u* m p2-21 sync.Mutex和atomic改造性能对比+ _. c; B, O u# k/ n t
2-22 六种抽奖活动总结2 [7 k+ I3 N- i, @& _
2-23 并发编程与锁的底层原理
! n7 b. ?7 _7 L2 o1 K2-24 高并发和高性能系统中锁的影响与解决办法( y8 B. Y4 Q% y: w t8 A5 Y, Q9 g* Y' i% X
2-25 阶段任务
: _. H1 z5 q* h' l
' n$ e( I: {, w3 T$ G# g第3章 系统设计和架构设计【扩胸运动,有容乃大】
' @3 I R5 V! i& a本章对抽奖系统和架构进行详细的设计。总结前面的开发经验,从需求分析开始入手,整理需求,提炼功能,分析完善用户操作和业务流程、数据库设计、缓存设计要点。& K$ d9 X2 J6 k T
3-1 需求整理和提炼
5 E; P! w+ e# h1 J% y! }3-2 用户操作和业务流程 ~* Z2 P$ C$ Z2 G& m# b J
3-3 数据库设计
' L# m9 _6 M0 z$ a4 ^9 T3-4 缓存设计 试看
1 h% D+ g5 g2 X- b2 x" B3-5 系统架构设计. b4 c* X: t0 R9 v
3-6 系统设计和架构设计总结
# {( l5 J* |5 `3 h1 M2 U% X3-7 高性能程序设计,缓存为王
/ _6 G( ]7 h$ e5 B" P: E8 e3-8 系统架构升级之道,关注关键服务依赖4 b1 `$ X# _8 y. T5 `! X6 Q' e
3-9 阶段任务
" V6 C$ Z0 L* ~& ]! M- m2 \! c* h% K1 ?7 M+ M3 X
第4章 项目框架与核心代码【踢腿运动,固若磐石】
9 A# f ~) a( r- x本章开始动手使用iris+xorm先把项目框架搭建起来,并且把基础的核心代码(dao,services,comm,用户登录、退出等)完成,为后续的功能开发做基础的准备。
( H* q. |; ]- c$ a& q' Z4-1 项目框架搭建
2 ]( L0 W/ d# ?( u- Y8 L8 [7 U4-2 数据模型的生成
7 b( z ?7 H/ u; H/ V0 g4-3 核心的dao和service类
+ O6 N6 l3 N+ E X4-4 定义dao
5 G D D% w- R6 v3 I' _4-5 定义service
& a& L5 t' D5 R0 M. I4-6 定义数据库和redis配置信息
4 a \; i5 C4 D8 y( V8 z# N4-7 创建数据库实例及其要点
$ J6 t, C$ o4 i4-8 创建redis实例及其要点2 F3 n- \+ ]3 u% \ X2 M/ z
4-9 利用iris建立web站点' z) Z1 ]3 }- t1 M5 v6 P1 ~3 _
4-10 项目配置和通用方法
- {. Q9 R! s! v/ v+ c# ]* n L4-11 web站点初始化构建
V& q; p r& j" H$ v/ b4-12 实现IndexController
/ f/ K6 K1 ]5 u. k: j; h+ h4-13 完善路由和main.go文件
! r, J, g1 Q7 [- X1 @6 E4-14 登录和退出:安全值校验和防篡改
8 N, c% X: \% o# o
* c; c/ L# H$ S* H第5章 后台功能开发【体侧运动,运筹帷幄】1 P: M) G; ]. N' _! u; ]
一个可视化的管理后台可以更好的帮助产品运营来自助操作,本章将实现相关功能并完成抽奖活动的定制规则设置。
7 a1 b( g+ |- L& k5-1 后台功能开发介绍
' _5 c7 x! [3 N' J4 a5-2 页面模板和AdminController3 N; B, c+ w5 J" P
5-3 奖品管理实现(上)2 z6 ?" j# i. b) A9 Y
5-4 奖品管理实现(中)4 L% W+ Q/ g8 ?2 e) C/ r% G7 z
5-5 奖品管理实现(下)
1 F$ @& E. \1 e9 b+ @; x5-6 优惠券管理实现(上)
0 P' J+ n1 [& q" p5 y5-7 优惠券管理实现(下)+ h$ N+ P' z6 @1 @
5-8 中奖记录管理
* F6 V7 u! i/ @0 I5-9 用户管理
2 l* }$ j) Y2 b1 q! |( t" r5-10 IP黑名单管理
$ s; C9 C% _. E2 b6 o
. O' N, s+ W) i0 i% o第6章 基于mysql的抽奖功能开发【体转运动,基础版本】 X: c. w& `7 ^" o
本章将先完成后端抽奖接口的实现,完成抽奖业务逻辑和数据流程的开发。
2 _; N& c! C7 n. N6-1 抽奖接口开发细节分析+ J$ b7 _1 J( k' \' t
6-2 用户并发操作的锁
/ L# _1 J8 o6 ~6 K4 Q, F' @( H6-3 验证用户、IP今日参与次数(上)
& m4 c+ G+ P X. R6-4 验证用户、IP今日参与次数(下)
1 t' r1 E" Y. p/ B* r2 l ?, ^1 r6-5 用户、IP黑名单的处理
( V7 C6 D1 g9 @$ h: s# ]6-6 抽奖的实现
: ~! F: C' X% Z9 c- k2 `6-7 发奖的实现
& {: U) ~* h2 ~* t' _2 o% S6-8 中奖记录和返回结果2 d0 Z- m0 P0 g0 K% m2 X6 |
9 {# W, C7 r( N第7章 使用redis缓存优化【全身运动,升级版本】
2 k$ R( N1 E m. Z本章引入redis来优化整个系统,减轻对mysql的依赖,提高抽奖接口的性能。. K! ~8 l) W" [# M, c- B- f
7-1 分析_奖品数据全量缓存
4 N1 G) ~9 c! r$ [" E1 O; f: ]7-2 实现_奖品数据全量缓存(上)! O! Q; O+ Z. o3 Q9 L
7-3 实现_奖品数据全量缓存(下)
( Z; J/ Y5 j9 N: L7-4 分析_单个用户数据部分缓存
. R1 i7 [; g$ A8 F7 `5 n7-5 实现_单个用户数据部分缓存0 g; v; U( M3 @3 H
7-6 分析_IP黑名单数据缓存) ^7 m" ?5 Y. T: J; r
7-7 实现_IP黑名单数据缓存
" w/ w- m4 m2 U. q7-8 优化IP今日抽奖次数
9 ]4 M! h' U- S; [) Q7-9 优化用户今日抽奖次数# `$ U9 a5 e; [. o! ^ W
7-10 用户今日抽奖次数(上)# n' @$ a3 L- O( P! J$ d H0 l
7-11 用户今日抽奖次数(下)/ A; P+ \ Y) B% I) A" B _
7-12 为什么使用奖品池1 G& R9 U5 ?+ s6 r7 ~
7-13 初步使用奖品池1 g3 ?* W* b/ e1 A! q" W. J3 Z( S
7-14 分析_优惠券的全量缓存3 Z* a0 Z% F/ i* A2 j _7 i
7-15 实现_优惠券的全量缓存(上)) F2 r7 u. Y f
7-16 实现_优惠券的全量缓存(下)
2 K+ @' o1 ~6 Y6 }* w7-17 使用redis优化总结
$ z0 i3 c9 R2 B) q5 V, U& \% B3 J3 ?& a4 Y7 N1 @
第8章 奖品池以及发奖计划的实现【跳跃运动,极致版本】
, I% ], |- i% c: A1 n2 e本章实现两个基础服务功能(更新发奖计划,自动填充资源池),来完成奖品的发奖计划数据维护,保证可以合理的把奖品填充到奖品池中。( ~/ w5 C& f! J, Y* T
8-1 发奖计划设计分析: j" m5 c" Z& k! [/ d' Q7 {
8-2 实现发奖计划(上)
1 w- v8 p" h+ C: n* w' v9 a+ G8-3 实现发奖计划(中)
% n3 s) f/ w1 W3 g# H* [8-4 实现发奖计划(下)
# m/ R8 p: L2 M5 E) D& s- }9 g8-5 自动填充奖品池分析6 v. G4 @9 K+ `% {: t
8-6 实现奖品池(上)" |+ V5 N* ?7 Y- N$ N
8-7 实现奖品池(下)
. o7 U4 O7 d b6 }9 W/ e5 ?7 t8-8 总结发奖计划和奖品池# z' `9 Y5 Y; `! J- i2 ?
2 W% @& D8 _4 P: E- q& m第9章 完整性演示以及更多总结【整理运动,整体交付】- {! h0 t B+ \) P
实现前端页面的大转盘效果,完整的演示最终的效果。通过不同的设置以及测试方法,利用压力测试工具对系统性能进行分析,深入了解业务逻辑以及技术实现的细节,对系统性能的影响,明白时间消耗的关键点。而更多的思考和总结,让抽奖类活动的有更多玩法。 ...* N: l8 f+ r3 m
9-1 前端大转盘分析# o, L* M7 y- v3 E
9-2 前端大转盘效果实现1 ~) G( }+ c: h" a3 c; P/ i
9-3 优化奖品设置分析+ d* a2 y& b& N9 R; {. F
9-4 优化发放奖品分析2 w% }- P- ?# V0 W
9-5 再来一次压力测试吧
) c o" ]) {6 e0 T0 \) ?9-6 压力测试
2 w+ Z* @. L/ M9-7 更多运营策略, l' u3 o. e* L8 C6 N. Y9 I# }
1 t8 S/ V' z$ G4 }" ~4 a5 O, K
第10章 引入thrift框架【附加运动,扩展服务】
% U" h1 E3 F- a通过rpc框架,将抽奖系统服务化,可以更加灵活和简单的接入到更多的业务系统中。
7 I9 i! C6 t0 I9 t, b; N10-1 了解thrift
9 o* d' A& F9 q0 [. o# o' @& i10-2 定义thrift文件/ R- T0 D5 L! Q F/ g D
10-3 生成代码
( v R7 x- `: \6 C10-4 服务端接口(上)- [5 j' E% ~% w) g$ R! w
10-5 服务端接口(中)
& _ c$ l( o: J# e' M6 L10-6 服务端接口(下)
6 I# ^9 O/ U( @+ k$ g+ g10-7 客户端接口
0 E8 H# Z% ^. Z3 Z/ S' W10-8 总结
* _5 G7 D3 i' J% R8 F1 w4 G/ M$ Y
' B3 i i; b, K" Z, y第11章 课程总结【结束,沉淀】5 I& i) e$ @# M/ I; t5 Y3 B
对课程进行总结/ r* O0 [; J3 Z# t* h
11-1 问题与思考
) G$ @" R* Y+ R( P" c; Z# Q11-2 课程总结
. b8 l! [' @6 F4 ?" s9 b7 Q9 i) ?9 `% O# W* u
〖下载地址〗+ ^& K6 q- {. Z* X& Z( C
" |# }9 c7 M9 h( u
2 H: w3 ^) n+ n- A" [( Z3 ~( A) X
" g; T" C; P1 D( {, M" {4 j |
|