1 新旧版本实现

旧版本:PHP语言实现,应用屡次DB查问来生成一个用户名,再DB查问用户表,确保用户名未反复

新版本:PHP语言实现,从Redis间接获取一个可用用户名,注册时候再判断是否未反复

Go版本:Go语言实现,其余统一

这里的优化次要有两点:

1.次要是采纳发号器的思维,预生成可用的账号,而不是每次用的时候才生成

2.把判断是否未反复滞后,真正实现注册的那一步才去判断,因为很多用户下载了游戏,未必走到注册那一步,大略只有80%出头的激活注册率

2 压测体现

ab压测各情景下均屡次压测,取较两头值的一次数据

2.1 旧版本

terence@k8s-master:~$ ab -c 10 -n 50 -p post http://dksdk_api.test/api/v7/user/registeroneab: Could not open POST data file (post): No such file or directoryterence@k8s-master:~$ ab -c 10 -n 50 -p a.txt http://dksdk_api.test/api/v7/user/registeroneThis is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking dksdk_api.test (be patient).....doneServer Software:        nginxServer Hostname:        dksdk_api.testServer Port:            80Document Path:          /api/v7/user/registeroneDocument Length:        175 bytesConcurrency Level:      10Time taken for tests:   25.667 secondsComplete requests:      50Failed requests:        40   (Connect: 0, Receive: 0, Length: 40, Exceptions: 0)Total transferred:      29886 bytesTotal body sent:        7950HTML transferred:       8636 bytesRequests per second:    1.95 [#/sec] (mean)Time per request:       5133.476 [ms] (mean)Time per request:       513.348 [ms] (mean, across all concurrent requests)Transfer rate:          1.14 [Kbytes/sec] received                        0.30 kb/s sent                        1.44 kb/s totalConnection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    0   0.2      0       1Processing:  2091 4931 1898.5   4688   10802Waiting:     2091 4931 1898.5   4688   10802Total:       2091 4931 1898.6   4688   10802Percentage of the requests served within a certain time (ms)  50%   4688  66%   6068  75%   6105  80%   6189  90%   7721  95%   8355  98%  10802  99%  10802 100%  10802 (longest request)

均匀耗时513ms,其中Lumen框架启动大略30~100ms以内,DB查问视状况是否现实大略500ms左右,非对称加密个位数级别若干毫秒可忽略不计

2.2 新版本

terence@k8s-master:~$ ab -c 10 -n 50 -p a.txt http://dksdk_api_v2.test/api/v7/user/registeroneThis is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking dksdk_api_v2.test (be patient).....doneServer Software:        nginxServer Hostname:        dksdk_api_v2.testServer Port:            80Document Path:          /api/v7/user/registeroneDocument Length:        346 bytesConcurrency Level:      10Time taken for tests:   1.715 secondsComplete requests:      50Failed requests:        40   (Connect: 0, Receive: 0, Length: 40, Exceptions: 0)Total transferred:      26941 bytesTotal body sent:        8100HTML transferred:       17241 bytesRequests per second:    29.15 [#/sec] (mean)Time per request:       343.076 [ms] (mean)Time per request:       34.308 [ms] (mean, across all concurrent requests)Transfer rate:          15.34 [Kbytes/sec] received                        4.61 kb/s sent                        19.95 kb/s totalConnection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    0   0.2      0       1Processing:    80  336 133.9    343     621Waiting:       80  336 133.9    343     621Total:         81  337 133.8    343     621Percentage of the requests served within a certain time (ms)  50%    343  66%    375  75%    410  80%    474  90%    521  95%    547  98%    621  99%    621 100%    621 (longest request)

均匀耗时34ms,只有旧版本的6.6%,其中Lumen框架启动大略30~100ms以内,DB查问大略200ms左右,非对称加密个位数级别若干毫秒可忽略不计

2.3 旧版本 开启Opcache

terence@k8s-master:~$ ab -c 10 -n 50 -p a.txt http://dksdk_api.test/api/v7/user/registeroneThis is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking dksdk_api.test (be patient).....doneServer Software:        nginxServer Hostname:        dksdk_api.testServer Port:            80Document Path:          /api/v7/user/registeroneDocument Length:        420 bytesConcurrency Level:      10Time taken for tests:   19.284 secondsComplete requests:      50Failed requests:        27   (Connect: 0, Receive: 0, Length: 27, Exceptions: 0)Total transferred:      42057 bytesTotal body sent:        7950HTML transferred:       20807 bytesRequests per second:    2.59 [#/sec] (mean)Time per request:       3856.747 [ms] (mean)Time per request:       385.675 [ms] (mean, across all concurrent requests)Transfer rate:          2.13 [Kbytes/sec] received                        0.40 kb/s sent                        2.53 kb/s totalConnection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    0   0.1      0       0Processing:  1830 3689 1213.6   3527    7273Waiting:     1830 3689 1213.6   3527    7273Total:       1830 3690 1213.6   3527    7273Percentage of the requests served within a certain time (ms)  50%   3527  66%   3911  75%   4534  80%   4907  90%   5604  95%   5639  98%   7273  99%   7273 100%   7273 (longest request)

均匀耗时385ms, 相当于只节俭了Lumen框架启动所需的工夫,耗时大头的DB查问还是原样

2.4 新版本 开启Opcache

terence@k8s-master:~$ ab -c 10 -n 50 -p a.txt http://dksdk_api_v2.test/api/v7/user/registeroneThis is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking dksdk_api_v2.test (be patient).....doneServer Software:        nginxServer Hostname:        dksdk_api_v2.testServer Port:            80Document Path:          /api/v7/user/registeroneDocument Length:        345 bytesConcurrency Level:      10Time taken for tests:   0.143 secondsComplete requests:      50Failed requests:        26   (Connect: 0, Receive: 0, Length: 26, Exceptions: 0)Total transferred:      26951 bytesTotal body sent:        8100HTML transferred:       17251 bytesRequests per second:    349.37 [#/sec] (mean)Time per request:       28.623 [ms] (mean)Time per request:       2.862 [ms] (mean, across all concurrent requests)Transfer rate:          183.91 [Kbytes/sec] received                        55.27 kb/s sent                        239.18 kb/s totalConnection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    0   0.1      0       0Processing:     4   27  18.4     22      89Waiting:        4   27  18.4     22      89Total:          4   27  18.4     22      90Percentage of the requests served within a certain time (ms)  50%     22  66%     31  75%     36  80%     42  90%     52  95%     56  98%     90  99%     90 100%     90 (longest request)

均匀耗时2.86ms, 节俭了Lumen框架启动所需的工夫,没有DB查问,只有一次Redis查问,毫秒级别能就搞定了

2.5 新版本 Go语言

terence@k8s-master:~$ ab -c 10 -n 50 -p a.txt http://192.168.10.83:8080/registeroneThis is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking 192.168.10.83 (be patient).....doneServer Software:        Server Hostname:        192.168.10.83Server Port:            8080Document Path:          /registeroneDocument Length:        0 bytesConcurrency Level:      10Time taken for tests:   0.050 secondsComplete requests:      50Failed requests:        0Total transferred:      3750 bytesTotal body sent:        7550HTML transferred:       0 bytesRequests per second:    1007.03 [#/sec] (mean)Time per request:       9.930 [ms] (mean)Time per request:       0.993 [ms] (mean, across all concurrent requests)Transfer rate:          73.76 [Kbytes/sec] received                        148.50 kb/s sent                        222.25 kb/s totalConnection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    4   3.0      3      10Processing:     0    5   3.3      6      17Waiting:        0    4   3.1      5      10Total:          5    9   4.4      8      20Percentage of the requests served within a certain time (ms)  50%      8  66%      9  75%     10  80%     11  90%     19  95%     19  98%     20  99%     20 100%     20 (longest request)

均匀耗时0.993ms,真香