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

      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。


      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章