事务场景
场景
供给Restful API
接口直接读取Redis
中的缓存数据,Redis
的数据是通过MQ异步扔进去的。
目标
供给可靠的快速查询API服务,支持服务横向扩展。
目标
按照 500 个连接进行计算,服务器本钱也是考量f = – w的一部1 ` m 9 L p 5 V分。暂时不考虑公网、带宽、网关的影响。
第} % K一种技能
发动, % H Y V f O设置
/usr/bb J y { W v | min/javj | Oa -XX:M@ ~ E G oetaspaceSC N y vize=64m -XX:MaxMetaspacf J W j ( yeSize=256m -Xmx768m -Xms76} ; | T h D %8m -XX:NewSize=1 -Xss256k -jar ps1.jar
压测成果
[root@tech, U S f-0001 wrk]# wrk -t4 -c500 -d60s 'http://127.0.0.1:9021/hotdog/redis?key=aaa' --latency -- / 16
Running 1m te? , C p Rst @ http://127.0.0.1:9021/hotb ? ( l b V : n 7dog/redis?key=aaa
4 threads and 500 connections
Thread Stal Z f L s & $ @ ;ts Avg St? 2 Qdev Max +/-0 + C Stdev
Latency 114.57ms 12.10ms 313.86ms 98.16%
Req/Sec 1.10k 88.43 1.26k 89.51%
Latency Distribution
50% 113.75ms
75% 115.66ms
90% 117.58ms
99% 134.86ms
262303 requests in 1.00m, 82.55MB read
Requests/sec: 4366.86
Transfer/sec: 1.37MB
第二种技能
发动配置
java -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=1W u { X z28m -Xmx256m -Xms256m -XX:NewSize=1 -Xss256k -jar ps2-fat.jar run com.tech.luckin.MainVerticle
压测成果
[root@jiaomatech-0001 wrk]# wrk -t4 -c500 -d60s 'http://127.0.0.1:8081/app/redis?key=aaa' --latency -- / 16
Running 1m test @ http:/* # j b % 5 K J/127.0.0.1:808k o t g p1/app/redis?key=aaa
4 threads and 500 con1 U + B 4 ^ C Enections
Thread Stats Avg Stde| u ) D $ _ Hv Max +/- Stdev
Latency 3c e p Y7.45ms 54.67ms 228.47ms 83.90%
Req5 R 1 } A # e U Q/Sec 9.17k 4.36k 14.08k 72.72%
Latency Distribution
50% 10.12ms
75% 22.99ms
90%s 3 * O Z ` | i 140.38ms
99% 206.51ms
1959728 requests in 1.00m, 80.36MB read
Requests/sec: 32635.44
Transfer/sec: 1.34MB
存疑
稳定性
第一种技能的标准差很低,服务稳定性很高,第二种相对没有优势。
Qv 2 v Y zPS
第二种技能的均匀QPS到达 32635.44 Reques| M ( 5 [ ` |ts/sec
。是第一种技能的7.5
倍,没超越10
倍,也算有不错优势。
均匀响应
第二种技能的均匀耗时N b r * h t & 6 B37.45ms
。而第二种的均匀耗时是114.57ms
,大约差3倍
。
服务器本钱
第二种技能的可以在低内存下供给不v & o r ^ D l错的性能,[ v 0 )而第一种技能在低内存下发动都存在问题。
然后
不同的场景下,每种技能结构的优缺点都有所不同,觉得异构结构是种不错的计划,让适宜的工具做正确的工作。针对当前的场景,你会选择哪一种技能作为你? v ; 0 W的计划呢?
我想选第一种!!!