/ t7 b% B' c' k
〖课程介绍〗# b0 J/ K& g0 x5 N3 M
抽奖系统属于典型的高并发和高性能的系统,同时,业务需求复杂多变,对系统的灵活性和稳定性要求同样非常高。本课程先为大家剖析多种抽奖活动的共性和特性,再设计和开发抽奖大转盘系统的后台和接口。从基本功能的开发到使用redis步步优化,以及后续的策略对比,通过压力测试,让小伙伴直观的了解不同的设置导致的的性能差异,探究性能影响的关键因素。通过这门课程的学习,可以对系统的性能、并发、灵活、可靠等方面有更多的理解和掌握,迅速提升,达到中高级工程师的水平
2 q# S8 J- l7 Y0 {: J9 }6 S: b# A- t: B6 l5 g1 V6 Z- c
〖课程目录〗1 g7 _" [( a7 j- I& q
第1章 课程介绍【预备,初识】0 O! ]7 A! j! B; e1 _
课程内容的整体介绍以及学习建议。
! k# q+ \7 U2 q! `6 G$ x; N1-1 Go抽奖系统导学 试看 z& ]5 ?/ @, `3 }0 r; C8 ~6 Q
& q# ?( ?5 P' w" g第2章 6种抽奖活动来一遍【伸展运动,舒缓热身】
8 [2 o( i0 V8 K& w看书不如动手,本章将从年会抽奖、彩票刮奖、微信摇一摇、支付宝集福卡、微信抢红包、抽奖大转盘6种抽奖活动的实现出发,让小伙伴切身的体验下如何实现不同的抽奖活动,这些活动实现的差异和难点在哪,并示范用多种方法(互斥锁、atomic、sync.Map等等)解决并发安全问题。...
# l& G f: r$ f; n; H2-1 年会抽奖_实现分析
, p& D* x7 {1 L1 b2-2 年会抽奖基本功能实现9 Y L! N; E& A" {. O" g
2-3 编写web单元测试和并发安全问题+ ^ _! S/ O7 o0 t/ m# G
2-4 用互斥锁解决并发安全问题
/ n! n+ f) b% @5 ?& L8 V2-5 彩票_实现分析" j% d' F: H! a& Q( h# ?3 d1 ^& {1 B6 Z
2-6 刮刮乐和双色球 试看
" p1 {& u- ], n: r; t3 N; \% t2-7 微信摇一摇_实现分析
3 o5 B# _- o( w1 L! O6 ^2-8 微信摇一摇实现(上)( a! v& y! f# y" X F0 {
2-9 微信摇一摇实现(下)
/ G! s* p7 f" ^& A1 G& @& b2-10 bug修复和压测, L2 p4 {( B9 ^) c( v& E& J
2-11 支付宝集福卡_实现分析' Z) |. @3 f( y* w
2-12 支付宝集福卡实现, ]$ k# U" F% G2 q0 P% U9 o% K8 d: @
2-13 微博抢红包_实现分析
1 g: C& k! Q, q J# c2-14 实现发红包
2 @5 t9 }+ |6 w3 k6 F2 e2-15 实现抢红包
: N- Z5 D# `; L. B' H2-16 均衡问题和sync.Map解决异常
+ C" E0 E7 ~' Y2-17 改用chan的方式解决并发安全问题
8 O/ t; \ \/ p% c9 W/ ~; k2-18 再次压测验证和优化改造' S8 q1 P0 {% v) N
2-19 抽奖大转盘_实现分析0 ?4 m+ s3 ]& H/ p0 ]6 m
2-20 抽奖大转盘初步实现
/ _9 H0 s* F% F$ d2 z# c* K2-21 sync.Mutex和atomic改造性能对比
2 u% {) G- u2 r; w& [$ Q2-22 六种抽奖活动总结
. E4 L, J' d e2-23 并发编程与锁的底层原理
( c/ V" U0 |4 K$ p8 x \! y; ~2-24 高并发和高性能系统中锁的影响与解决办法3 q# E+ h: x' O- n( r
2-25 阶段任务
2 A; f) A ~! U. F0 C- X( _# Y- y% z: t; s
第3章 系统设计和架构设计【扩胸运动,有容乃大】
# J7 L! D0 D7 O; }! q; F/ r本章对抽奖系统和架构进行详细的设计。总结前面的开发经验,从需求分析开始入手,整理需求,提炼功能,分析完善用户操作和业务流程、数据库设计、缓存设计要点。
! E* p! E" {( l" W3-1 需求整理和提炼
8 z+ O6 M4 J( ^# X/ b3-2 用户操作和业务流程) F+ q* {( D- W: D/ D8 b
3-3 数据库设计2 f3 W3 r8 |6 {8 l+ @
3-4 缓存设计 试看
3 {$ N* x9 N8 W# }% L9 n2 Q3-5 系统架构设计
- n, S6 P% v. r$ u4 v# t" N3-6 系统设计和架构设计总结$ |- [/ ~6 O: \% g
3-7 高性能程序设计,缓存为王; f, u: b! t2 y6 J) T! ?+ b
3-8 系统架构升级之道,关注关键服务依赖' B4 j8 p. L, Y: a% T. L6 I
3-9 阶段任务5 `8 Z$ R8 h8 P3 n& h
6 j2 K; o0 @6 F' f
第4章 项目框架与核心代码【踢腿运动,固若磐石】, m4 \+ o3 Q0 l) T& V; c
本章开始动手使用iris+xorm先把项目框架搭建起来,并且把基础的核心代码(dao,services,comm,用户登录、退出等)完成,为后续的功能开发做基础的准备。 E0 {# b8 \# u0 g, S$ N9 E2 D1 x! ~
4-1 项目框架搭建$ U/ o% p! o% P; ^8 j
4-2 数据模型的生成
$ a6 \; ]& |$ f# H7 o6 T4-3 核心的dao和service类
! X Y' N1 K" n' W' M3 s9 V4-4 定义dao
* r) v9 }1 y/ T: @4-5 定义service3 ^" { I5 \9 h: x' e
4-6 定义数据库和redis配置信息, w+ {* p, l/ a3 k
4-7 创建数据库实例及其要点1 y( G" O! A% v4 Q5 ^
4-8 创建redis实例及其要点
2 `: q! o. _; d( \3 l" Y7 Y6 B4-9 利用iris建立web站点9 \* R! ^, N& w1 G9 J
4-10 项目配置和通用方法
6 S- S; v; ? \4-11 web站点初始化构建
" s# H; ]" n$ d7 F$ r P% X0 U) W4-12 实现IndexController
( d {4 w( k( h0 C! F+ c4 I4 A. ^9 F+ r4-13 完善路由和main.go文件
1 c/ O. B0 p& E4 m4-14 登录和退出:安全值校验和防篡改2 t$ C, u9 K" `! K
( G. Q. l8 R( q% h& w& q第5章 后台功能开发【体侧运动,运筹帷幄】
; Y1 K4 H4 S9 ?7 r" r一个可视化的管理后台可以更好的帮助产品运营来自助操作,本章将实现相关功能并完成抽奖活动的定制规则设置。# x/ s% Y* R$ B( M$ L. f5 y
5-1 后台功能开发介绍
) V W) g6 G: @1 {) ~5-2 页面模板和AdminController
. Q& ~# s) B# }! Q/ l5-3 奖品管理实现(上)6 ?8 q0 `1 t) I \, W
5-4 奖品管理实现(中)& {2 x4 E; e# G- D, T/ X: {
5-5 奖品管理实现(下)9 \; [0 Z6 |4 i+ M' f
5-6 优惠券管理实现(上), V1 b' N u: J/ S+ s$ t
5-7 优惠券管理实现(下)7 g9 T; M1 G( d" z1 b1 w7 u
5-8 中奖记录管理
8 d+ r' ^' G. c: z" n. N8 f( c5-9 用户管理, N, t3 L& y3 M
5-10 IP黑名单管理
2 H# S) C( S0 q) h2 `" q) b& |! G# Z2 N* r+ j' K
第6章 基于mysql的抽奖功能开发【体转运动,基础版本】
4 O/ B& V: L( y本章将先完成后端抽奖接口的实现,完成抽奖业务逻辑和数据流程的开发。1 U0 K; a; H$ g7 a$ L& h$ p: |
6-1 抽奖接口开发细节分析6 U* @* H" D6 R3 P
6-2 用户并发操作的锁
, R% Y2 o' u' |9 L& ^2 s6-3 验证用户、IP今日参与次数(上)4 D, v! b8 G! g- C3 o$ ?2 S
6-4 验证用户、IP今日参与次数(下)
# b4 `% } [8 y3 g2 m) G6-5 用户、IP黑名单的处理- S6 i* U5 O7 ^; H* [ K/ m
6-6 抽奖的实现3 {! }, o4 f' X4 K- U
6-7 发奖的实现
9 X9 k4 C* E9 @* n% }6-8 中奖记录和返回结果' F: M" b' J4 {& `
2 y9 d2 E3 N1 S* V( t( Q# o第7章 使用redis缓存优化【全身运动,升级版本】
: m5 v; ~# Q# t本章引入redis来优化整个系统,减轻对mysql的依赖,提高抽奖接口的性能。
2 M8 |+ R9 z2 G, l! l. j5 B4 u7-1 分析_奖品数据全量缓存4 [# o# U2 W2 R; \, w: q1 ]8 k
7-2 实现_奖品数据全量缓存(上)( \4 v/ W+ E$ \/ U1 l+ p% w1 g+ Y- u
7-3 实现_奖品数据全量缓存(下)
7 A; E7 k" O3 H6 `& v+ G+ M0 v7-4 分析_单个用户数据部分缓存
1 Z" h2 l4 D- j6 M1 Z9 N0 s( f- f7-5 实现_单个用户数据部分缓存2 c" D$ P8 N7 O
7-6 分析_IP黑名单数据缓存0 ]$ S6 d" m. M# x5 F/ ^
7-7 实现_IP黑名单数据缓存
8 s; o5 h4 r2 s7-8 优化IP今日抽奖次数
8 ?7 z2 n, ], e' k7-9 优化用户今日抽奖次数
$ q. I' f, ?6 N; K/ ~! `3 D* z/ Z7-10 用户今日抽奖次数(上)$ v& `4 f8 a" z) o$ n7 a
7-11 用户今日抽奖次数(下)
H! L' c' L, ]0 D4 I7-12 为什么使用奖品池1 h- Q: @# _7 _
7-13 初步使用奖品池
4 h/ s+ F% o9 B V) s. i7-14 分析_优惠券的全量缓存
2 k* u1 T. I/ D6 |6 B: v/ t! @7-15 实现_优惠券的全量缓存(上)" ^ V! Q) B E* g' p
7-16 实现_优惠券的全量缓存(下)1 v- P- s" @3 t2 Z# X( ^
7-17 使用redis优化总结' e/ T# Q7 F& A# F* {5 D9 I
0 |6 Q v* s+ Z
第8章 奖品池以及发奖计划的实现【跳跃运动,极致版本】
8 Q* O' A$ @" G' g& N0 t本章实现两个基础服务功能(更新发奖计划,自动填充资源池),来完成奖品的发奖计划数据维护,保证可以合理的把奖品填充到奖品池中。
1 N# |0 H9 `4 a, i0 G8-1 发奖计划设计分析1 V* R9 I m- ?0 J7 _
8-2 实现发奖计划(上)8 O( G, w6 N) w
8-3 实现发奖计划(中) G6 N: a% v1 s# F q! g; }& A
8-4 实现发奖计划(下)" u2 [9 N- E7 R" B
8-5 自动填充奖品池分析
1 W" D% A2 U' }. K A8-6 实现奖品池(上)1 z c, O. |9 Q: x% b
8-7 实现奖品池(下)4 i: F: Q) d" S0 J; N$ q
8-8 总结发奖计划和奖品池' A7 q( o4 [9 {# y7 |0 j% G, g; l
; q* h# B& W1 l5 P8 v( H
第9章 完整性演示以及更多总结【整理运动,整体交付】4 l7 d! d9 U# Q# I8 `% o2 @
实现前端页面的大转盘效果,完整的演示最终的效果。通过不同的设置以及测试方法,利用压力测试工具对系统性能进行分析,深入了解业务逻辑以及技术实现的细节,对系统性能的影响,明白时间消耗的关键点。而更多的思考和总结,让抽奖类活动的有更多玩法。 ...
1 o3 J5 q4 ~: f! l. ~) K9-1 前端大转盘分析: u8 p" H9 c5 s) h% \2 U
9-2 前端大转盘效果实现# W6 d6 y+ Q& ?
9-3 优化奖品设置分析
( u5 s0 Z$ @* i$ W1 }6 C9-4 优化发放奖品分析
9 ?2 b# g; U# i- p9-5 再来一次压力测试吧
' K$ T2 t: g, T5 `. w- v9-6 压力测试4 P% u# l+ @! K, T Q* r$ z0 Z* M. o3 c
9-7 更多运营策略 I$ `3 S1 D0 q7 C6 v
- f" a# `4 H6 \3 U' A) X5 Q
第10章 引入thrift框架【附加运动,扩展服务】9 p, S% r/ x. O$ C# o! X+ Y
通过rpc框架,将抽奖系统服务化,可以更加灵活和简单的接入到更多的业务系统中。
, N* x* N" _$ l5 h d$ t10-1 了解thrift; f0 j2 U6 e" r7 y+ Z
10-2 定义thrift文件1 ]( [0 A) W4 e2 M1 r2 Y/ ^% e
10-3 生成代码+ l& R' L y+ b) b' y7 U) C- k
10-4 服务端接口(上)9 G& m3 g2 N0 g+ y m5 V7 H1 {, e
10-5 服务端接口(中)* i _$ c; ?; D* s, L6 n
10-6 服务端接口(下)
8 h* A( R2 q- m& Q! ~2 b10-7 客户端接口% R6 u% c* f: `
10-8 总结
! l# g% |) C4 T$ Y, o* N9 Q- e$ T5 A$ q( X- [: v- l8 N% y
第11章 课程总结【结束,沉淀】
! a( }/ R8 P; V% f( \. W- R! n8 d对课程进行总结1 i2 R' S0 N7 [2 u- m) G9 q' v
11-1 问题与思考
3 \7 j* O- Y4 | q; [, f9 a. A11-2 课程总结
. p- A7 H, R# {0 d g0 _4 Z" r1 g, g- f$ P" k; Z+ u* N8 p5 y* t
〖下载地址〗
P7 o- q8 V( y/ [5 ]& U6 k8 V: \; _8 g/ J$ T$ i2 H) }% |
# z- @" v/ A b
; Y: v6 ~7 O8 c9 @
|
|