Linux学习(第十九周)

第十九周学习内容:tomcat和mysql

第十九周作业:

1、简述session会话保持的几种方式并举例实现。 

      保持会话一般有三种方式:会话粘性、会话共享和会话服务器。

      会话粘性:利用hash算法,把源地址做哈希运算,并绑定在某台集群服务器上,使这个源地址主机的访问都找这台服务器,从而提升会话命中率。除了将源地址哈希运算,还可以绑定cookie。具体方法是nginx的ip_hash;haproxy的source;lvs的sh,这里就不一一演示了。

      会话共享:也叫会话集群,是把多台主机构成一个集群,基于一个组播组地址进行通信,只要其中一台主机发生会话更新就会通过此组播地址同步给集群内其他主机,tomcat自身就支持此中工作模式。

      搭建环境:一台主机xiaomao2安装nginx,建一个upstream,将动态请求反代到后端两台主机上;两台主机xiaomao和xiaomao3安装tomcat,作为动态资源主机。

      从tomcat主页上下载会话集群的配置,并放到要使用共享的应用的engine或host配置段中,默认是基于228.0.0.4进行通信的。整段配置由<cluster>指明何种集群,<manager>指明何种会话管理器,<channel>指明何种信道,<receiver>和<sender>指明接受和发送的方式,<deployter>指明部署方式,<valve>指明过滤器。要修改的也就是<clusterlisten>段中把address配置为本机地址,默认为auto,启动服务后就可以实现会话共享了。

      image.png

      做两张动态页面作为测试,不同颜色代表不同主机,而且显示sessionID。

      image.png

扫描二维码关注公众号,回复: 5173353 查看本文章

      image.png

      再测试访问发现效果是调度依然负载均衡,但会话因为共享,始终不变。

      image.png

      image.png

      会话服务器:也就是会话server,要利用到memcache或redis。memcache是非常简单的存储,以键:值得表达式,其他诸如依赖关系等一概不管,所以只在缓存功能时使用,多一点要求的环境下就没法用了。

      要将tomcat会话存储到memcache中去,要利用到github上的一个项目,memcached-session-manager,简称msm,github上有配置示例。安装方法是先把几个类文件放到指定目录(/usr/share/java/tomcat/)下,再下载msm主文件,最后在tomcat的配置文件(server.xml)中的Host段里,粘贴上github上拷贝来的context配置指令,其中的memcachednodes修改为主机名,transcoderfactoryclass修改为你使用的流式化工具,有javolution,有kryo等。总结下来就是如果用javolution,共要下载5个文件放到指定位置:javolution-5.4.3.1,msm-javolution-serializer,spymemcached,memcached-session-manager,msm-tc7或tc8;再添加网页上复制下来的配置段该点参数就可以使用了。效果依然是tomcat服务器可以负载均衡访问,但session始终不变。 

2、实现tomcat会话保持与会话保持器msm配置示例 。

      根据上面所说的去下载5个文件。

      image.png

      image.png

      然后再下载配置段,修改几个参数。

      image.png

      启动服务以后就可以进行测试了,测试结果和会话共享一致,会话server是现今使用较多的会话保持方式。

3、简述mysql存储引擎及读写锁实现并发访问控制。

      mysql的组件包含连接器,连接池,sql接口,分析器,优化器,缓存,缓冲等等,这些都是逻辑组件,而最终将他们组合起来,真实的存储位置就叫做存储引擎。网上对存储引擎的概述是MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。通过SHOW ENGINES;指令就可以查看有多少个存储引擎了。

      image.png

      其中最主要的就是两个InnoDB和MyISAM。

      InnoDB:默认存储引擎,数据存储于“表空间”。所有InnoDB表的数据和索引都存储于同一个表空间中,但为了支持innodb的高级功能,需要每张表一个存储文件,这也就是每次改变量innodb_file_per_table为ON的原因。InnoDB最大的特点是支持事务,适合对事务要求较高的场景中,不适合长期大事务,只支持大量短期事务。基于MVCC机制支持高并发,一个文件在被写的时候应该是不能读的,支持行级锁和间隙锁。支持热备份。

      MyISAM:传统的存储引擎,每张MyISAM表有三个存储文件,不支持事务,不支持热备。支持全文索引,表级锁。比较适合大量的select,insert的使用环境。

      总结几大差异:(1)事务处理,一个支持,一个不支持;(2)锁机制,一个粒度细,一个粗;(3)select ,update ,insert ,delete 操作,如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,如果执行大量的SELECT,MyISAM是更好的选择;(4)外键,一个支持,一个不支持;(5)具体构成,一个默认存储在一个文件上,一个分为三个存储文件;(6)查询表行数,InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,而MyISAM只是简单的读出保存好的行数。

      其他搜索引擎:CSV:以逗号分隔字段的文本文件;Memory:内存存储引擎;Blckhole:不真正存储数据,类似/dev/null;MGR_MyISAM:将多个MyISAM表合并成的虚拟表;FEDERATED:远程SQWL服务器上表的存储引擎接口,类似NFS。


      

猜你喜欢

转载自blog.51cto.com/13762416/2350873