发表于: 2017-11-23 22:59:05

1 589



今日完成的事情:


所有测评的标准以90line200ms;error低于0.5%为最佳.....同时假定取样得到启动过度period时间为5s……….

 

1;具体详情……随便贴几个图,,,,详情在表里面…….


 

简单贴一个redis压测jsp


 

 

再贴个nignx的负载均衡这个就简单测一下……


 

 

 

测试数据………………………………………………

 

Data1

jsp

Thread/

90line/ms

Error/%

Samples/W

Mysql

300

236

0

9

Mysql

450

489

0

10

memcached

300

151

0.28

10

memcached

350

158

0.31

20

redis

400

196

0.21

20

redis

500

257

0.47

13

Data2

nginx

Thread/

90line/ms

Error/%

Samples/W

Mysql

100

46

0

1

memcached

100

53

0

1

redis

100

58

0

1

 

 

2;json压测….


 

贴一个memcached压测json


 

测试数据………………………………………………

 

Data1

json

Thread/

90line/ms

Error/%

Samples/W

Mysql

300

119

0

15

Mysql

500

201

0.24

20

memcached

400

172

0

20

memcached

500

230

0.28

17

redis

200

112

0

8

redis

400

206

0.37

15

Data2

nginx

Thread/

90line/ms

Error/%

Samples/W

Mysql

100

47

0

1

memcached

100

38

0

1

redis

100

52

0

1

 

关键概念:


TPSTrasaction per second也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息来估计得分;这里可以利用错误率来计算;samples*(1-error)/Time;来得出有效的访问事务时间;

 

90line; 90用户的响应时间;这个详细说一下;这个90的意思是第90;也就是说, 将一组数从小到大排列第90%个数,整个数组中90%的数都将小于该数;选取90%的线,那么所有的请求响应时间90%都是低于这个值

 

结论对比;简单来说, 有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache

 

然后百度一下官方的区别……………


存储方式:

memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小

redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化

 

数据支持类型

redis在数据支持上要比memecache多的多。

 

使用底层模型不同:

新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

 

运行环境不同:

redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上

 

 

3;linux的系统操作这些简单的修改实验比较浪费时间,先在win上学会nignx的基本操作,再转吧….之前学过了,这里再从头复习一下收益匪浅….

下载就不说了….

打开运行,发现两个进程……实际上没毛病; 一个是1个守护进程 1个工作进程;


 

 

4;说个常识…..尴尬….就是端口号……因为我的本地80端口被tomcat占用,就想着随意改一次nginx……随手改了六个八888888….死活启动不了……

 

 

再说一个配置信息

 

 

实际端口有范围的也就是049151…….


这里也百度一波端口概念:简单来说, 端口是个网络应用中很重要的东西,相当于“门”;再具体其实就是队,操作系统为各个进程分配了不同的队,数据报按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。


不光接受数据报的进程需要开启它自己的端口,发送数据报的进程也需要开启端口,这样,数据报中将会标识有源端口,以便接受方能顺利的回传数据报到这个端口。

再贴一个………以后查阅…….




Internet上,按照协议类型分类,端口被分为TCP端口和UDP端口两类,虽然他们都用正整数标识,但这并不会引起歧义,比如TCP80端口和UDP80端口,因为数据报在标明端口的同时,还将标明端口的类型。


从端口的分配来看,端口被分为固定端口和动态端口两大类(一些教程还将极少被用到的高端口划分为第三类:私有端口):

固定端口(01023):

使用集中式管理机制,即服从一个管理机构对端口的指派,这个机构负责发布这些指派。由于这些端口紧绑于一些服务,所以我们会经常扫描这些端口来判断对方 是否开启了这些服务,如TCP  21ftp),80http),    139netbios),    UDP7echo),  69tftp)等等


动态端口(102449151):

这些端口并不被固定的捆绑于某一服务,操作系统将这些端口动态的分配给各个进程, 同一进程两次分配有可能分配到不同的端口。不过一些应用程序并不愿意使用操作系统分配的动态端口,他们有其自己的商标性端口,如oicq客户端的4000端口,木马冰河的7626端口等都是固定而出名的。

 

水完了,试一下,仔细看一下……


 

 

6;修改端口重启nginx的时候,发现,winpowershell其实还是与cmd有区别的……更贴合与linux的命令行…….很方便….

 

 

 

7;学习演示动静分离的效果;


动静分离就是图片,css, js之类的都交给nginx来处理,nginx处理不了的,比如jsp 就交给tomcat来处理;好处是nginx处理静态内容的吞吐量很高,比tomcat高多了,这样无形中提升了性能。

 

修改配置文件的时候出了问题….配置文件路径要用正斜杠……


 

改了之后可以,实际上也可以双反斜杠…..


 

 

先看一下日志,也就是nginx没有配置静态路径的时候,静态动态都是tomcat…负责;现在配了静态路径;就会去nginxroot找静态;;;;;测试发现实现了动静分离……jsptomcat…静态去nginx,….但是…….静态没加载出来…………问题还是路径的问题…….


 

 

第一次是上面的斜杠问题;改了之后可以了,但是路径有空格就不行了………这个时候解决方案是,加引号……

 



再测试;ok


 

 

然后说一下,为什么要用反向代理….最初开始学不是很清晰,明明可以直接访问tomcat;为什么还要nginx…..现在差不多很清晰了;主要是因为nginx在处理静态文件的吞吐量上面比tomcat好很多,通常他们俩配合,不会把所有的请求都如本例所示的交给tomcat, 而是把静态请求交给nginx,动态请求,如jsp, servlet,ssmstruts等请求交给tomcat;从而达到动静分离的效果。


 

8;nginx的第二个作用;负载均衡……..


 

 

测试;;;;这就是动静分离,负载均衡……


 

 

9;总结一下负载均衡:nginxupstream目前支持的5种方式的分配;


 1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。


2、指定权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。


3IP绑定 ip_hash

每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。


4fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。


5url_hash(第三方)

按访问urlhash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

 

还要一个浮动ip负载均衡”nginx的方法,这里也是听了师兄小课堂了解的;暂时mark……知道有这个方法,来弥补nginx的挂掉的弊端……大概就是,再一个浮动ip,跟两个或者多个nginx……然后是一台挂掉,一台代替……关于两台的关系分配设置,就不说了,什么主从….同时……以后再了解……

 

 

明日计划的事情:


1;学习一些java基础

 

2;学习几个零碎知识点

 

3;处理遗留的几个小问题

 

3;了解任务7


 

遇到的问题及解决方法:


1; Mysql虽然是关系型数据库,实际上也是有自己的缓存机制……从日志统计时间也可以看出来的……应该是有缓存的吧……而且jmeter的错误率为零,应该没问题….这里的访问时间时快时慢……应该是用到了缓存…..

 

 

但是通过命令行,查看,缓存命中的效果….为零……那么前面的访问时间,应该是系统电脑一下外在因素了吧……..本来还想继续测,直到测爆未用的内存,那样应该就可以观察到….mysql动用缓存机制了不过……………放一放

 

 

2;…redis连接池配置……有问题,之前小批量测可以………因为连接池的最大链接1000……现在压测动不动上w……

 

 

大概意思是, 通过setMaxActive(1000)方法将最大链接数设置为1000,而且每一个Jedis在获取资源后,并没有释放资源,导致redis资源用光后一直不可用。。。这是直接看的别的师兄的代码………不知道他们是怎么跑出来的


 

 

改成return就可以了释放资源不过代码提示这个位置不合理,不过不影响运行……再问问吧….奇怪………

 

 


3;压测的时候…memcached错误率极高….


 

 

看一下….突然连接不到了……


 

 

在浏览器里没问题…..


 

 

先是重启了一下服务….可以用了…..可是一段时间后……又不行了……..

 

重新下载之后,看了下……有异常没捕捉


 

加上try ……catch……似乎好了……


 

 

4;打包的时候又报错了…..



 

 

这个jar没用到……,但是pom文件都没有红;……不知道为什么没有自动下载到仓库……没用……就直接删了…按道理即使没用到,但是pom文件是没爆红,证明下载了吧.......看路径,也是没有下载到本地仓库,估计是自己搞错了.......

 

 

 




收获:

 

1;完成所有测试;统计数据;对于压测有了进一步的认识

 

2;总结数据,学习数据库的差异,优缺点;感觉到缓存的意义

 

3;深度学习nginx;实践了负载均衡,动静分离

 

 

 



返回列表 返回列表
评论

    分享到