发表于: 2017-08-11 21:50:03

4 861


一,今天完成的事情

1.在代码中增加service层

      以前看其他人的代码,发现他们的代码在controller和dao层中间总有一个service层,在service层中的代码只是简单的将dao层方法执行的结果返回,那时后总是很疑惑,不知道为什么这么做,自己一直也觉得可以直接用controller层调用dao层的方法,没必要增加service,但是现在加入memcached缓存之后,发现service层的作用所在.因为如果将查询缓存,向缓存中添加数据的操作都放在controller层,会让controller层的代码显得非常不整洁,现在将缓存的相关操作都提取出来放入service层中,这样controller层不必关心自己获取的数据时缓存中的还是数据库中的,只用关注逻辑就好,有利于层与层之间的解耦.

      至于为什么不使用springAOP来操作缓存,个人觉得缓存的操作不向日志记录等简单的操作,日志记录和业务没有一点关系可以完全抽取,但是缓存和业务还存在一定的关系,比如说要先判断缓存中有没有要的数据,有就返回,没有再去访问数据库,用springAOP的话,感觉控制粒度没有那么细,会存在一些问题.也可能是我自己现在学的不够深入,确实有一些能够通过springAOP实现,但是以我现在的程度,用service层也比较方便而且容易理解.

具体代码:其实就是和网上的差不多,只是除了简单的返回dao层的结果之外,增加了缓存的判断和提取添加等操作

由于今天是直接在项目中添加了一层,所以在整合整个项目时spring的注解等出了一些小问题,但是最后都通过查询各个注解的使用方法解决了.

值得注意的是我在service中会引用dao层对象,采用注解的方式,只是字段上的注解不能使用@Autowire这种自动装配,原因是如果dao层中的可装配对象有很多,比如说ProfessionDao,UserDao等,用@Autowire的话它不知道到底获取哪一个对象,会报错,正确的用法是用@Resource,并指定引用的对象名:

2.用JMeter分别测试了jsp,json两种接口在无缓存和有memcached缓存情况下的TPS以及服务器极限

所有测试的环境都是阿里云服务器,单核1G内存,循环次数固定为50,所有线程的开启时间统一设置为10秒,如图

接下来是测试结果:

首先是jsp页面,无缓存和有缓存的比较

对于jsp页面,分别测试了20线程,40线程,60线程,80线程以及100线程等情况

首先是20线程

40线程和60线程就不贴了,只是响应时间较长,分别达到了4000和7500毫秒的程度,下面是80线程的结果,90%线为8300左右,每秒吞吐量再进一步下降

然后是100线程时,服务器挂掉了.重新测了几遍,发现有的时候会出错,有的时候不会宕机,但是这时候就已经很不稳定了,也就是说在无缓存,jsp页面的情况下基本80左右并发的时候服务器就达到了极限

然后是有缓存的jsp页面

直接从60线程开始测试,分别测试了60,80,100和120线程,这里只贴出来80,100和120的

80线程测试数据

从结果看,memcached并没有对性能带来超乎想象的提升,相反好像用时比不用缓存的还差一点,原因可能是接口的数据太过于单一,体现不出来memcahced的优势.

然后是测试100线程,此时可以看出有缓存和没有缓存的效果,此时服务器没有宕机,虽然比较慢但是比起没有缓存要好很多

再然后是测试120线程,此时又会有各种情况出现,要么是卡住,要么是有错误出现,链接断开,要么是服务器挂掉,因此,可以说有memcached的情况下,服务器可支持的并发数要比不加缓存的高,大概在100左右.

第二个步骤:测试json接口的有缓存和没有缓存的情况

json无缓存,测试了20,40,60,200,250,280,300,500等几种情况,这里只贴出来其中几种情况

首先是20线程的,可以看出来json和jsp接口的差别差了不是一点半点,差距非常明显

然后是200线程:

然后是280线程,此时虽然比较慢,但是依然没有任何错误

最后是300线程,此时会出现错误,后台jetty也会被压停,所以280并发基本就是无缓存json接口的极限

json有缓存,测试了200,250,300,350,380,400几种情况,这里只贴出来几个.

首先是200线程的,此时可以看出有缓存和没有缓存的区别,90%Line的速度立刻下降了一半多,说明memcached缓存在起作用

然后就是一路测下去,当测试到380线程时,服务依然比较稳定,90%Line保持在3000毫秒左右

然后再测试400线程时,吞吐量一下下降了许多,而且开始报错,说明基本到接口极限了.memcached缓存的json接口支持的并发数大致为380

                             jsp                                 json

无缓存                   80                                 280


memcached缓存   100                               380

结论:实现相同功能的不同策略之间的性能差别很大,json和jsp横向比较,json因为不用渲染页面,所以速度要快很多,而有缓存和没有缓存的情况下支持的并发数差别也很大.可见缓存的必要性和项目中后端多使用json来传数据.

二.明天的计划

由于以前的单位有些事务还要处理一下,向老大请了10天的假,从12号到21号,这期间,看情况吧,如果有时间也会学习写日报的,但不能保证每天都有,提前告知师兄一声

下一步就是用nginx配置负载均衡,然后再继续测试,然后就是测有负载均衡和缓存的情况,最后是redis缓存的测试情况

三.遇到的问题

暂无

服务器越来越慢了,买的新手服务器已经不能满足需求了,解决方法是借小罗的服务器来做负载均衡

四.收获

对memcached以及json的理解更为深刻了吧,今天测试确实是下了一番功夫,结果也比较不错,没有白费心血,最主要是找到了标杆,以后测试就能提高效率.

五.进度

因为请假,任务六可能要延期了,在请假过程中尽量想办法抽时间学习吧,现在任务六的方向都理清楚了,剩下的就是具体实施了,应该可以抽时间出来完成.


返回列表 返回列表
评论

    分享到