摘要
隨著互聯網的髙速發展、電子商務的不斷興起,越來越多的人通過使用網絡平臺來實現購物、查詢基本信息等功能需求,隨著訪問用戶量的提離,網絡的平均響應時間就成了關鍵。傳統方式是使用數據庫連接池進行網絡系統的優化,但是存在優化效率較低的問題。.本論文通過引入二級緩存和全文檢索等優化技術,盡可能少地訪問或不訪問后臺數據庫,從而達到提高網絡應用系統性能的目的,W此改善原有網絡系統中存在的不足。
本文采用Java Web應用程序分層管理的思想,著力解決現有網絡應用系統實際項目開發過程中,因采用傳統單層架構而存在的團隊活動不協調、過程代碼存在冗余、系統伸縮性嚴重受限等問題與不足。同時針對一般歡件開發過程中因存在過多配置文件而導致整個軟件顯得糜腫的問題,本文采用在Java代碼中使用注解的方式,以減少使用不必要的配置文件,從而達到優化代碼的目的。應用系統中經常會存在大量的用戶頻繁訪問、但卻相對穩定、不常改變的數據信息,它們在大多數的設計中都是通過直接由數據庫進行查詢的方式獲取,從而導致時間開銷太大,嚴重影響系統性能與用戶體驗。為此,本文采用Hibernate對象-關系映射與Lucene全文檢索相結合的方式對系統中的常用數據信息建立索引,并將之存儲于本地索引庫文件或內存中,解決了何時在實體類上使用索弓I。當用戶查詢時,則可以直接通過索引獲得數據,從而提高響應時間。針對其它那些用戶經常訪問、但讀寫比大于2:1的數據信息,本文采用EHCache結合Hibernate實現二級緩存的方式,將核也實體類進行緩存,進而提高系統的數據訪問速度,同時實現自惠義緩存清除策略。除此之外,本文還嘗試將Lucene全文檢索與EHCache二級緩存通過Spring整合起來并應用于系統設計中,以期達到較少訪問或不直接訪問數據庫的目的,進一步提離網絡應用系統的響應時間。
本文最后采用JMeter性能測試工具,對經加入上述優化方法所設許出的系統進行了相關性能測試,并與未使用上述優化方法的系統設計進行了全面的性能對比,證明了論文中所提出的各種優化方法與技術的有效性與可信性。
關鍵詞:分層管理:網絡應用系統;Lucene; EHCache;性能優化
Abstract
With the rapid development of Internet and E-commerce's rise, more and more people begin to use the network platform to implement their needs. Therefore, the average response time becomes a key factor. Traditionally, using database connection pool optimizes network system that presents low efficiency. In order to access database less and less, this thesis introduces the secondary cache, full-text search and other optimization techniques that can improve performance of the original project that is insufficient in present network system.
In this thesis, Java Web application hierarchical management ideas is used to solve the existing development problems in project. The traditional single-layer structure results in team inconsistent development, redundant procedure code that is severely limited by system scalability. At the same time, there are too many bloated software problems, and this thesis uses annotation to reduce unnecessary use of configuration files, so as to achieve the purpose of optimizing the code. Generally speaking, application systems have a large number of users who frequently access to relatively stable, infrequently changed data so that results in too much time that seriously affects the system's performance and the user's experience. In this thesis, using a combination of Hibernate ORM and Lucene full-text indexes important data and then stores data in the local database files or memories. When user quering, data can be obtained directly through the index file to improve response time. For other users who frequently visit data that reading-writing ratio is greater than 2: 1 use Hibernate to achieve second-level cache EHCache. In addition, in order to achieve the purpose of improve the response time of network applications, this thesis also attempts to integrate Lucene and EHCache through the Spring and then applies to system.
Finally, using JMeter performance testing tool tests design of the system, and the system design does not use the above optimization methods comparing with optimized system. At last the result proves that system that has techniques is effectiveness and credibility.
Key words:Hierarchical Management; Network Application; Lucene; EHCache; Performance Optimization
所謂大規模網絡應用系統,常指那些用戶眾多、并發訪問請求量大、系統可擴展性與可伸縮性要求較高的系統,例如淘寶、12306網站等等。隨著全球范圍內互聯網經濟的蓬勃發展及我國"互聯網+"戰略的發布,近年來我國大規模網絡應用系統的數量和其用戶數量都出現了井噴式的増長。根據CNNICW《中國互聯網絡發展狀況統計》報告,截至2015年12月我國網民規模達6.88億,全年共計新増網民巧51萬人,互聯網普及率為50.3%。隨著用戶數量的増長,各形各色的網絡應用系統也相繼出現,并且規模越來越大,網絡并發訪問量甚至呈指數倍地增長。因此,系統的性能(如訪問響應時間、吞吐量高低)將直接影響用戶的體驗好壞。這時各種優化技術就變得極其重要,淘寶為代表的大數據流量處理的優化機制,從正面說明了提高網絡系統優化的重要性;W中國鐵路客戶服務中也系統為代表的糟糕用戶體驗反饋,則從另一面說明了如今的網絡應用系統對性能提出了更高的要求。網站在訪問高峰期更會造成系統無法響應甚至造成整個系統雍痕,因此需要采取必要的優化方式。
目前,國內外在大規模網絡應用系統的性能優化方面己有大量嘗試與實踐,大致可分為前端優化技術和后端優化技術。前者主要包括頁面靜態優化、靜態化插件工具、動態頁面直接靜態化等技術;后者比較常見的方式是使用數據庫連接池、使用緩存、建立索引等。通過實際應用可發現,后端優化的效果往往超過前端。因此,針對系統后端進行優化成為現今研究的主要途徑。宅米網CTO李智慧在《大型網站技術架構原理與案例分析》當中提出使用后端技術如緩存、索引在當今系統開發中的優越性。在實際開發中,使用緩存W及建立索引也是后端優化的比較常見的方式。企業實際應用項目開發過程中的經驗表明,它們對改善系統的性能有著積極的作用,并且均有較多的開發工具與開發方法提供支持。
傳統方式對后臺數據進行查詢,一般都是通過SQL語句訪問數據庫進行查詢,造成用戶每次查詢數據都要訪問整個數據庫,而且使用like關鍵字進行模糊查詢的效率非常低,結果就是對整個網絡應用系統的性能產生了較大的影響。因此需要選擇?诘娜乃饕ぞ。在建立索引方面,目前最典型的一種工具是Lucene。它是Apache的一^t*開源子項目,可W很好地與實際工程開發項目相結合,因此越來越多的人開始使用Lucene進行項目開發。Michael McCandless在Lucene虹Action的例子中充分證明了Lucene索引對項目性能提高的重要性。同時由于網站數據訪問通常遵循二八定律,即80%的訪問落在20%的數據上町因此使用Lucene把索引用在20%的數據上是有意義的,這樣能夠盡量減少對數據庫的訪問。但是現有的項目使用索引,要么所有字段都加入索弓I,要么不使用索引進行優化,因此沒有具體使用索引的標準。
一般情況下,每次獲取數據都要與數據庫建立連接、傳送數據、關巧連接等操作,這樣會消耗過多的資源,而且操作步驟過多也會增加時間,如果把需要的數據放在本地磁盤或者緩存當中,那么直接從中獲取數據的時間將會更短。網站性能優化第一定律就是優先考慮使用緩存優化性能。因此,使用緩存是系統性能優化的另一種重要技術。在此方面,目前也有較多的技術,例如OSCache、EHCache、MemCached等。其中,OSCache提供了在現有JSP頁面之內實現快速內存緩沖的功能,但現今已經不再處于維護狀態,因此開發人員對于其的選揮與使用也變得越來越少;MemCached是一個高性能的分布式內存對象緩存系統,用于動態Web應用1^;1減輕數據庫負載。由于數據是保存在內存中的,因此顯然需要有足夠大的內存空間或者甚至需要搭建一個?谧鰞却娴募簛肀4鏀祿,送樣造成硬件的成本大大的増加,故還普及程度還不高。EHCache是一個開源的Java分布式緩存,具有簡單、高性能、靈活等特點。由于Spring在3.1版本之后開始支持EHCache,并且兩者有著較好的融合,因此越來越多的人開始選擇EHCache。因此使用Lucene全文檢索及EHCache成為了許多開發人員選擇的對象。
盡管Lucene、EHCache有很多人在用,但仍然有不足,主要表現在EHCache默認緩存算法(LRU)效率還可W繼續提高、如何把Lucene與EHCache結合起來實現共同優化。因此,仍有必要繼續研究。
大規模網絡應用系統性能優化設計:
使用自定義緩存清除策略査詢結果
使用LRU緩存策略查詢結果
請求線程組設置
Lucene和EHCache査詢結果圖
EHCache和Lucene加入同步鎖后查詢結果
800個線程請求
1000個線程請求
目錄
第一章 緒論
1.1 研究背景及意義
1.2 國內外研究概況
1.3 論文的主要工作
1.4 論文的組織結構
第二章 相關技術研究與概述
2.1 JAVA EE層次模型
2.2 JAVA EE框架技術
2.3 LUCENE全文索引
2.4 緩存
2.5 系統開發環境和工具
2.6 本章小結
第三章 基于JAVA EE框架的網站架構優化
3.1 網站總體架構設計
3.2 SSH2整合思路
3.2.1 Struts2與Spring的整合原理
3.2.2 Spring與Hibernate的整合原理
3.2.3 注解配置
3.3 SSH2框架的分層實現
3.3.1 配置Struts 2
3.3.2 配置 Hibernate 4.19
3.3.3 配置Spring 3.2
3.3.4 Spring對Struts2的整合對Hibernate的整合
3.3.5 S州ng對Hibernate
3.4 分層架構實現組織圖
3.5 系統應用
3.6 本章小結
第四章 基于索引優化的設計與實現
4.1 全文檢索
4.2 LUCENE全文檢索與數據庫模糊查詢
4.3 HIBERNATE SEARCH整合LUCENE原理
4.4 HIBERNATE SEARCH結合LUCENE應用實現
4.4.1 建立索引
4.4.2 檢索器的實現
4.4.3 應用實現
4.5 增量索引
4.6 JMETER測試
4.6.1 試環境
4.6.2 測試分析
4.7 本章小結
第五章 基于緩存優化的設計與實現
5.1 EHCACHE緩存算法
5.2 自定義緩存清除策略思路
5.3 基于EHCACHE緩存優化與實現
5.3.1 配置EHCache二級緩存
5.3.2 改進的緩存替換策略實現
5.3.3 自定義EHCache二級緩存測試
5.4 同時實現LUCENE索引和EHCACHE二級緩存優化
5.5 并發事務處理
5.6 J1VIETER性能測試
5.6.1 測試環境
5.6.2 性能分析
5.7 本章小結
第六章 總結與展望
6.1 論文總結
6.2 工作展望
參考文獻
致謝
攻讀學位期間的研究成果
(如您需要查看本篇畢業設計全文,請您聯系客服索。
將微信二維碼保存到相冊
打開微信掃一掃從相冊識別
1.點擊下面按鈕復制QQ號
3008637063
2.打開QQ→添加好友/群
粘貼QQ號,加我為好友