发表于: 2020-01-07 22:45:34

1 1007


今天做了什么:

在服务器上压测

压测redis报错

具体如下:




查询之后,发现是redis连接的问题,在并发数较高(压测,50线程*20次)的情况下连接不够,已有的连接来不及返还给连接池

修改redis配置,增加连接数

结果汇总后如下:

本地











Label# SamplesAverageMedian90% Line95% Line99% LineMinMaxError %ThroughputReceived KB/secSent KB/sec
redis-jsp1000531216301500.00%1057.08217426.38120.78
mecahemed-jsp10002246121210.00%982.318316191.94112.24
无缓存jsp1000161527365321300.00%873.362514395.9899.79


























Label# SamplesAverageMedian90% Line95% Line99% LineMinMaxError %ThroughputReceived KB/secSent KB/sec
redis-json100011918234021670.00%974.65891430.58112.31
mecahemed-json100011223050.00%979.43191417.5112.86
无缓存json10004141707810021700.00%655.308961.8474.87




















































服务器











Label# SamplesKOError %AverageMinMax90% Line95% Line99% LineThroughputReceived KB/secSent KB/sec
json-redis100000281.1541171459.9767.4907.95168.32243.6119.56
mecahemed-json1000400.04499.2150251350.91618.854651.0286.6140.1710.06
无缓存json100000513.35175387810391302.9792.64135.9710.67


























redis-jsp100000532.5931155761.7821.85946.9689.231470.9910.28
mecahemed-jsp1000510.051704.01466392099.82965.856294.9160.83967.967.01
无缓存jsp10003240.3242473.1562138933738.612938.6513871108.91311.5212.18


























负载均衡











Label# SamplesKOError %AverageMinMax90% Line95% Line99% LineThroughputReceived KB/secSent KB/sec
JSP100000.00%942.4131865761.7821.85946.1285.157111172.2810.1
jsp+redis100000.00%532.5931155610.2755.6836.96185.131175.610.55
json100000.00%513.35175387810391302.9792.64130.1319.64
json+redis100000.00%281.1541001459.9767.4907.95168.32130.339.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;



明天要做什么:

进入任务七



返回列表 返回列表
评论

    分享到