发表于: 2020-01-07 22:45:34
1 1007
今天做了什么:
在服务器上压测
压测redis报错
具体如下:
查询之后,发现是redis连接的问题,在并发数较高(压测,50线程*20次)的情况下连接不够,已有的连接来不及返还给连接池
修改redis配置,增加连接数
结果汇总后如下:
本地 | ||||||||||||
Label | # Samples | Average | Median | 90% Line | 95% Line | 99% Line | Min | Max | Error % | Throughput | Received KB/sec | Sent KB/sec |
redis-jsp | 1000 | 5 | 3 | 12 | 16 | 30 | 1 | 50 | 0.00% | 1057.082 | 17426.38 | 120.78 |
mecahemed-jsp | 1000 | 2 | 2 | 4 | 6 | 12 | 1 | 21 | 0.00% | 982.3183 | 16191.94 | 112.24 |
无缓存jsp | 1000 | 16 | 15 | 27 | 36 | 53 | 2 | 130 | 0.00% | 873.3625 | 14395.98 | 99.79 |
Label | # Samples | Average | Median | 90% Line | 95% Line | 99% Line | Min | Max | Error % | Throughput | Received KB/sec | Sent KB/sec |
redis-json | 1000 | 11 | 9 | 18 | 23 | 40 | 2 | 167 | 0.00% | 974.6589 | 1430.58 | 112.31 |
mecahemed-json | 1000 | 1 | 1 | 2 | 2 | 3 | 0 | 5 | 0.00% | 979.4319 | 1417.5 | 112.86 |
无缓存json | 1000 | 41 | 41 | 70 | 78 | 100 | 2 | 170 | 0.00% | 655.308 | 961.84 | 74.87 |
服务器 | ||||||||||||
Label | # Samples | KO | Error % | Average | Min | Max | 90% Line | 95% Line | 99% Line | Throughput | Received KB/sec | Sent KB/sec |
json-redis | 1000 | 0 | 0 | 281.15 | 4 | 1171 | 459.9 | 767.4 | 907.95 | 168.32 | 243.61 | 19.56 |
mecahemed-json | 1000 | 40 | 0.04 | 499.2 | 1 | 5025 | 1350.9 | 1618.85 | 4651.02 | 86.6 | 140.17 | 10.06 |
无缓存json | 1000 | 0 | 0 | 513.3 | 5 | 1753 | 878 | 1039 | 1302.97 | 92.64 | 135.97 | 10.67 |
redis-jsp | 1000 | 0 | 0 | 532.59 | 3 | 1155 | 761.7 | 821.85 | 946.96 | 89.23 | 1470.99 | 10.28 |
mecahemed-jsp | 1000 | 51 | 0.051 | 704.01 | 4 | 6639 | 2099.8 | 2965.85 | 6294.91 | 60.83 | 967.96 | 7.01 |
无缓存jsp | 1000 | 324 | 0.324 | 2473.15 | 62 | 13893 | 3738.6 | 12938.65 | 13871 | 108.9 | 1311.52 | 12.18 |
负载均衡 | ||||||||||||
Label | # Samples | KO | Error % | Average | Min | Max | 90% Line | 95% Line | 99% Line | Throughput | Received KB/sec | Sent KB/sec |
JSP | 1000 | 0 | 0.00% | 942.41 | 3 | 1865 | 761.7 | 821.85 | 946.12 | 85.15711 | 1172.28 | 10.1 |
jsp+redis | 1000 | 0 | 0.00% | 532.59 | 3 | 1155 | 610.2 | 755.6 | 836.96 | 185.13 | 1175.6 | 10.55 |
json | 1000 | 0 | 0.00% | 513.3 | 5 | 1753 | 878 | 1039 | 1302.97 | 92.64 | 130.13 | 19.64 |
json+redis | 1000 | 0 | 0.00% | 281.15 | 4 | 1001 | 459.9 | 767.4 | 907.95 | 168.32 | 130.33 | 9.88 |
综合数据可以看出:
加了缓存以后确实对服务器性能有提升,大概在20%--35%之间,并不是很稳定
任务六深度思考
1.后台只允许有列表页和详情页,列表页分为搜索区和列表区和操作区,原因是什么?有没有其他设计方式,相比之下各自的好处是什么?
后台是面向管理人员,目的是高效率修改参数,需要尽量提高操作效率。
2.什么叫集群?缓存应该在什么情况下使用集群?有哪些实现集群的方案?
集群,通过多个计算机完成同一个工作。(同一个业务部署在多个服务器上)
Redis解决方案:客户端、代理、服务器分割请求
Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。
Codis:Twemproxy引入了Group的概念,每个Group包括1个Redis Master及至少1个Redis Slave
Redis-cluster:redis3.0中推出,支持Redis分布式集群部署模式。采用无中心分布式架构。所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.节点的fail是通过集群中超过半数的节点检测失效时才生效。
3.什么是压测,为什么要进行压力测试?JMETER工具的使用
压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和隐患。简单的说,压力测试就是让我们提前测出我们的服务器能够抗住多少用户访问,以便做出优化。
4.Memcache和Redis可否做集群?什么样的情况下应该做集群?
可以做。
由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据时,Memcached性能要高于Redis,
5.什么是脏数据,缓存中是否可能产生脏数据,如果出现脏数据该怎么处理?
脏读:读取出来脏数据就叫脏读。
缓存产生脏数据:数据库数据更新了,但是缓存中的数据没有及时更新
6.插入,更新和查询数据的时候,读写缓存和DB的顺序应该是怎么样的?
更新数据时,先更新DB再删除缓存
插入时先更新DB,查询时先查询缓存
7.JVM缓存和Memcache这种缓存的区别在哪里?是否可以不使用Memcache,只用虚拟机内存做缓存?
JVM确保Heap区域内的空间足够,如果不够则使用触发GC在内的方法获得空间;获得空间之后会找一组堆内的连续地址分配数组,
可以。但是效果不如缓存软件。
8.缓存应该在Service里,还是应该存放在Controller里,为什么?
缓存应该放在service里。
首先,缓存相当于是内存数据库,所以在service层调用和增加缓存。
其次,放在service层里是为了减少controller的代码量。
9.什么叫穿透DB?什么情况下会发生,穿透DB后会发生什么事情?
缓存失效时导致高并发穿透DB;会导致数据库崩溃;
10.什么叫命中率?正常来讲,命中率应该控制在多少?
命中率是指能够在缓存中获取需要的数据。一个缓存失效机制和过期时间设计良好的系统,命中率应该达到95%以上;
11.什么样的数据适合存在缓存中?缓存的淘汰算法有哪些?
最不经常使用算法(LFU)
最近最少使用算法(LRU)
自适应缓存替换算法(ARC)
先进先出算法(FIFO)
最近最常使用算法(MRU)
那些访问量大的,变化比较小的,适合放在缓存中。
12.什么叫一致性哈希,通常用来解决什么问题?
一致性哈希是一种哈希算法,可以有效解决分布式存储下增加或删除节点所带来的问题。它和hash最关键的区别就是,对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。这样就保证当节点增加或者减少的时候,影响的数据最少。
13.缓存的失效策略有哪几种,分别适合什么场景?
1.FIFO:First In First Out,先进先出。判断被存储的时间,离目前最远的数据优先被淘汰。
2.LRU:Least Recently Used,最近最少使用。判断最近被使用的时间,目前最远的数据优先被淘汰。
3.LFU:Least Frequently Used,最不经常使用。在一段时间内,数据被使用次数最少的,优先被淘汰。
14.Memcache和Redis的区别是什么?
1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘 。
4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10 。
5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从 。
6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化) 。
7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复 。
8、Redis支持数据的备份,即master-slave模式的数据备份。
15.怎么预估自己系统可承载的日活数?
通过每个页面反应时间确定最佳的承载数量
16.什么是JMeter?Jmeter是否可以在多台机器上分布式部署?为什么要分布式部署?
测压工具,可以在多台机器上分布部署,方便测试;
17.什么是TPS,什么是每秒并发数,什么是90%Line?分别应该到达多少算符合系统上线的要求?
TPS是每秒事物处理量.每秒并发数就是,每秒用户访问的数量,90% 用户的响应时间...达到多少的话,我觉得具体视情况而定,修真院的要求是
每秒并发数为20,循环50次数时
TPS应不小于100
接口的平均访问时间应低于200ms;
明天要做什么:
进入任务七
评论