发表于: 2018-05-19 22:34:09
1 1215
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
一、关于序列化
1.在昨天的任务中,发现必须对实体类进行序列化后才可以继续以实体类的形式存储信息,如果不进行序列化,就无法将这个类的对象直接缓存,只能依次缓存它的属性的键值对,到用的时候再一个一个取出来set赋值,非常麻烦。
要对相关实体类进行序列化最重要的两个原因是:
①将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;
②按值将对象从一个应用程序域发送至另一个应用程序域。
实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复。
所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列化。
因此,如果想要实现缓存,以字节流形式传输等功能,此类就必须实现serializable接口,并且有自己的序列号,序列化之后才可以。
2.序列化的几种方式
主流的三种方式,优点缺点如下,参照自己的需要选择。
1.使用Json
优点:跨语言、格式清晰一目了然
缺点:字节数比较大,需要第三方类库
2.Object Serialize
优点:java原生方法不依赖外部类库
缺点:字节数比较大,不能跨语言
3.Google protobuf
优点:跨语言、字节数比较少,网络传输节省Io
缺点:需要依赖于工具生成代码
二、对比测试
1.因为之前测试的时候可能会网络等影响,所以这次决定重新统一测试一下,主要采用控制变量测试以下几个环节,测试登陆(进数据库读取账号信息,接收几个主页的信息),直接进主页(只接收主页信息),注册(无信息,只跳转)三个动作,测试结构为1,4,7,10,13,16线程,1秒,50次循环
①测试不使用memcached的情况下,不进行负载均衡,即task5的项目,单独8081端口
②测试不使用memcached的情况下,负载均衡加动静分离,即80端口
③安装memcached,将项目换为task6,测试此时单独端口的数据
④设置负载均衡,但是不设置动静分离,测试此时的数据
⑤设置动静分离,测试此时的数据
2.测试结果
首先是线程数为1,对比①②、③④⑤发现加了负载均衡之后都变慢了,对比④⑤访问主页动静分离有略微提升,但是不明显,对比②⑤的访问主页可以看到缓存有些许作用
①
②
③
④
⑤
然后是线程数为4,负载均衡之后明显变慢,而动静分离作用很明显,缓存作用略微提升
①
②
③
④
⑤
然后是线程数为7,结论相似
①
②
③
④
⑤
然后是线程数为10,结论相似
①
②
③
④
⑤
然后是线程数为13,结论相似
①
②
③
④
⑤
然后是线程数为16,结论相似
①到780卡住
②到763卡住
③到661卡住
④
⑤
最终结论,动静分离可以显著提升访问的速度,负载均衡会拖慢访问速度,应该是由于负载均衡需要经过nginx的调配,所以多了一步,而缓存对访问速度也有很明显的提升
其实负载均衡最主要的作用还是平均访问量,所以拖慢速度可以理解
三、服务器上memcached安装
1.sudo apt-get install memcached
2.sudo apt-get install libevent-dev
3.cd 到/usr/bin
4. ./memcached -m 128 -p 11211 -vv -u root
明天计划的事情:(一定要写非常细致的内容)
学习redis
遇到的问题:(遇到什么困难,怎么解决的)
配置tomcat3时死活启动不了,也无法自动解压war包,最后靠删除pid文件强制启动的
收获:(通过今天的学习,学到了什么知识)
配置了服务器的memcached,对线上进行了测试。
评论