目 錄
摘 要 I
Abstract II
第1章 緒論 1
1.1研究背景 1
1.2論文研究的意義 2
1.3房地產信息管理系統國內外研究現狀 3
1.3.1國外研究現狀 3
1.3.2國內研究現狀 3
1.4存在問題 5
1.5論文主要內容與論文結構 6
1.5.1論文研究的主要內容 6
1.5.2論文研究路線 6
1.5.3論文結構 7
第2章 基礎理論及相關技術 9
2.1開發環境介紹 9
2.2分布式服務技術 9
2.3云服務技術 10
2.3.1云服務的定義 11
2.3.2云服務的特征 12
2.3.3云服務管理模式 12
2.4JDK 核心技術 13
2.5數據庫MySQL技術 15
2.6系統架構 16
2.7本章小結 18
第3章 房地產信息管理系統需求分析 19
3.1房地產信息管理系統開發的可行性分析 19
3.2需求獲取的方法 19
3.3系統應用業務用例 20
3.3.1確定系統參與者 20
3.3.2房地產信息管理系統操作員用例 20
3.3.3系統管理員用例 21
3.4系統應用功能需求 22
3.4.1首頁信息展示 23
3.4.2住房信息管理 24
3.4.3住戶信息管理功能 24
3.4.4維護工程管理功能 24
3.4.5系統管理功能 24
3.5非應用類功能需求 24
3.5.1系統安全性需求 24
3.5.2系統性能需求 25
3.6本章小結 25
第4章 房地產信息管理系統的總體設計 26
4.1設計標準及原則 26
4.2系統總體設計 26
4.3分布式架構設計 28
4.3.1服務注冊中心 Eureka 29
4.3.2網關服務 GateWay 31
4.3.3配置管理服務 Nacos 33
4.3.4網絡服務器的選擇 35
4.3.5數據的緩存功能 36
4.3.6分布式事務的處理 37
4.4云服務器的選擇 37
4.4.1云服務的類別 37
4.4.2選擇適合的云服務 39
4.5系統應用架構設計 40
4.5.1應用展示層 40
4.5.2應用控制層 40
4.5.3應用數據層 40
4.6應用功能模塊設計 40
4.6.1應用功能模塊總體設計 41
4.6.2首頁信息展示模塊 41
4.6.3住房信息管理模塊 42
4.6.4住戶信息管理模塊 42
4.6.5維護工程管理模塊 42
4.6.6系統管理模塊 42
4.7數據庫設計 42
4.7.1數據庫設計原則 43
4.7.2數據庫需求分析 43
4.7.3數據庫表設計與創建 43
4.8本章小結 49
第5章 系統的詳細設計與實現 50
5.1分布式架構的搭建 50
5.1.1創建微服務父子工程 50
5.1.2搭建服務注冊中心 Eureka 54
5.1.3搭建網關服務 GateWay 57
5.1.4搭建配置管理服務 Nacos 60
5.1.5編寫數據緩存與其工具類 61
5.1.6分布式事務框架的整合 67
5.2應用服務的實現 78
5.2.1首頁信息頁面實現 78
5.2.2住房信息管理模塊 84
5.2.3住戶信息管理模塊 88
5.2.4維護工程管理模塊 90
5.2.5系統管理模塊 94
5.3在云服務器上的部署 97
5.3.1云服務器的配置 97
5.3.2安裝代碼運行環境 98
5.3.3數據庫的安裝 99
5.3.4數據緩存服務的安裝 105
5.3.5網絡服務器的安裝 108
5.3.6系統服務框架的啟動 112
5.3.7應用服務的啟動 112
5.4本章小結 112
第6章 系統測試 113
6.1系統測試 113
6.1.1系統測試環境 114
6.1.2系統功能測試 114
6.2案例對比測試 125
6.3測試總結 125
6.4本章小結 126
第7章 結論 127
致謝 129
參 考 文 獻 130
第1章 緒論
1.1研究背景
我們國家體制的重大改革和商品的經濟價值急劇擴張,與房地產業相關的部分行 業已成為了我國經濟十分關鍵的支柱,與此同時房地產的數量也在不斷上升,這也造 成房地產數據使用量的急劇增加,統計、查詢、歸檔已經成為影響相關管理工作的重 要因素。現有較落后的房地產信息管理系統已經無法滿足日益增長的住房信息管理、 住戶信息管理或者后期維護的需求。這不僅影響了城市房產管理的效率和水平,而且 也限制了政府房產管理部門的工作[1]。
同時,隨著社會經濟的發展進步,計算機、互聯網相關技術的發展被國家越來越 多地投入其中,這樣可以將更有利的經濟保障和支持提供給計算機與互聯網技術,計 算機與互聯網同時也帶動相關經濟的發展速度。因此,以互聯網、計算機技術為名義 的相關技術研發在當今社會呈現快速發展的趨勢。
房地產管理信息化工程是以計算機軟件技術為核心的信息時代的產物,同時也是 以互聯網為支撐的信息化管理系統[2]。現代社會對房產信息管理理論和計算機軟件技術 的融合,充分的被房產信息管理系統的相關應用所表現。其主要原因是房地產信息管 理系統可以將住房信息管理、住戶信息管理、后期維護信息等原本相互分離的信息、 數據、工作結合起來,在對其業務關系進行分析后,再研發出各種復雜有用的功能[3]。
從目前各方面信息分析后可得出,房地產信息管理系統其本質是以信息技術為基 礎,以計算機應用服務和互聯網為核心的當前信息時代重要的產物之一。并且朝著高 性能、高密集、高效率的方向發展。
在房地產行業,關鍵問題一直是如何提高房地產管理的效率,同時最大限度地降 低管理成本。房地產信息管理系統是專門用于維護和管理整個房地產生命周期的信息, 包括房屋、住戶、后期維護等信息。目前房地產信息管理最重要的問題之一是如何使 用當今互聯網與計算機相關技術來安全、快速、便捷、低成本的處理這些信息,并且 用戶可以不受時間、空間約束隨時隨地的管理系統。其中,安全、快速地處理信息具 有多方面的意義,其不僅能夠為房地產信息管理中的數據傳輸、數據存儲和復雜的業 務流程提供解決方案,與此同時也可以為房屋整個生命周期持續化的管理提供有效可 行的方法[4]。
在上述的大背景下,本文從基礎理論及相關技術、房地產信息管理系統需求分析、 房地產信息管理系統的總體設計、房地產信息管理系統的詳細設計與實現、系統測試 等方面來設計符合當前國情的基于分布式云服務的房地產業信息管理系統。本文所設 計的房地產信息管理系統具有較強的實用性,希望可以為后期類似系統提供很好的參 考價值。
1.2論文研究的意義
地產行業是各個發達國家經濟的一個很重要的組成部分,而且這和每個人的日常 生活都密不可分。隨著中國城鎮化的基礎條件不斷完善、農村人口與人才不斷的向城 市引進以及民眾生活水平的日益改善,房地產信息交互量也隨著房地產的不斷火熱而 提高[5][6]。
當今大多數房地產管理信息系統功能較為單一,只有單項內容存儲處理功能,無 法處理多維度數據,更別說適合小區整個生命周期相關業務的功能了。由于信息處理 量急劇增加,造成一些政府或者企業的房地產信息管理系統也時常會有不穩定的情況。 這其中一個主要原因是這類系統一般都為老舊的單體框架可以處理的信息量是非常有 限的[7]。同時這些系統都運行在需要人員 24 小時現場值守維護的機房內,這類系統不 僅效率低下、也不環保,并且還需要持續投入大量資金進行維護。
所以,本文基于分布式云服務建立房地產信息管理系統設計具有如下意義:
(1) 本房地產信息管理系統在應用業務方面,有住房信息管理、住戶信息管理、 維護工程信息管理等模塊,可以對房地產整個生命周期的信息進行監控管理,同時系 統記錄信息準確,可以統計和分析復雜的數據,通過不同系統數據的關聯,提供了豐 富的應用場景,不僅可以給政府或企業使用,同時也支持小應用場景如小區物業或相 關轄區工作人員。
(2) 本房地產信息管理系統使用了分布式架構,這是一個前沿的服務系統架構技 術,能夠非常迅速的分析、處理各式各樣大量的、高復雜度的信息數據,從而增大用 戶的訪問量。因為分散了負載,所以系統的整體穩定性也提高了。
(3) 將房地產信息管理系統部署在云端,進而可以根據實際使用情況動態的改變 云服務器的容量、性能或者帶寬,提高整套系統的經濟性、高效性、擴展性[8]。這樣需 要多少就用多少,小區物業或社區街道也能負擔得起運營成本。同時,節約能耗更加 環保,符合我國碳中和碳達峰的政策目標。
這種分布式云服務對房地產信息管理系統具有很大的優勢,為老舊系統遇到的問 題提供了很好的解決方案。通過本文設計的分布式云服務的房地產信息管理系統,可 以解決現有系統擴展性差、處理效率低下、數據的存儲性能不足、價格昂貴、維護困 難等問題。很好的完善了中國房地產信息管理系統各種缺陷,為其注入新的動力。
1.3房地產信息管理系統國內外研究現狀
1.3.1國外研究現狀
在國外,特別是部分發達國家,早在 80 年代已經使用計算機與網絡技術對房地產 信息進行管理了。比如美國在當時已經使用計算機軟件系統來幫助房地產企業對房地 產進行收購、撤資、擴張、翻新等業務進行管理以及決策分析,該系統被命名為 DSS
(Decision Support System) [9];到了 90年代,國外已經在LINUX系統上開發了一套可 以快速檢索的信息管理系統,名叫TITAN。在M68000機器上,TITAN能夠在5秒內 從超過400,000條記錄的集合中檢索出超過1,000條記錄。即使在個人電腦上,也只需 半秒鐘就能從包含 7 個術語的查詢中檢索出 35,000 條記錄[10];于此同時,房地產信息 系統已不再限制于查詢、記錄功能,比如通過GIS (Geographic InformationSystems)的 配合,可以對房地產進行估價[11];進入千禧年后,國外已經將人工智能(特別是神經 網絡的應用)應用到了房地產信息管理系統中,其可以對房地產進行預測[12];近幾年, 已有外國學者已經在探索將區塊鏈技術應用與房地產信息管理,該技術可以提供一個 透明、安全和高效的系統。它將把所有的交易存儲在一個分布式許可的區塊鏈上,其 主要特點是安全,不容易被黑客攻擊[13]。
在分布式云服務發展方面, 2000 年后云服務體系漸漸成熟,人們也開始對云服務 應用傳輸效率以及成本優化進行了前沿性的探索,比如制定了一個非線性編程模型來 最小化數據密集型應用的數據檢索和執行成本,該模型從云存儲資源中檢索數據,以 便該模型從云存儲資源中檢索數據,從而幫助統計其數據傳輸所需要的成本[14]。同時 隨著云服務的發展,越來越多的全球分布的數據中心隨著云服務的增長,讓越來越多 的人迫切需要云服務自動化的機制,其使用一種基于數據訪問模式和客戶端位置的迭 代優化算法來分析日志,并將遷移建議輸出給云服務,從而幫助云服務提高性能[15]。 近年來,隨著物聯網的普及,分布式云服務也被用在了物聯網相關業務上,因為不同 設備在地理位置上也是不同的,通過優化后的算法解決了動態請求不同數據中心之間 以及數據中心和用戶之間的動態請求效率低的問題[16]。
1.3.2國內研究現狀
在房地產信息管理應用方面從20世紀80年代末,我國才開始對房地產管理信息進 行探索與研究,該系統根據南京市房地產管理的經驗和國家對房地產管理的要求,設 計了數據模式和統計表格,可適用于全國房地產管理部門的使用。為了準確、快速反 映城鎮房屋、土地各種信息,系統設計了匯總統計表21套[17]。在90年代初期,開發出 了功能較為齊全的系統,即ALTOS-2086的三十二位控制系統。同時,I-NFORMIX數 據庫、C語言和XENIX操作系統都被用在了多用戶高檔微機上。該系統最大優勢之一 是全部的窗口、對話方式都可以使用漢字進行交互,同時還具有一定防錯與糾錯功能。 該系統可以使用電話線進行多終端遠程連接,這種形式可帶多臺終端,這樣就可以讓 分布在不同辦公室的電腦進行聯機交互查詢[18]。上海市在九十年代末的時候就已經形 成了房產信息網,它以上海市主城區的上海房產交易管理中心的局域網為中樞,同時 把遠程站點放在了周圍已被統一管理的二十余個區市縣房產交易管理機關,并完成了 對上海市內房產行業區縣所有各單位的并網管理,這也標志著已形成了上海市區大規 模房產信息網絡的全域網絡段。與此同時,ATM的網絡交易技術也被使用到了上海市 房地產信息網,通過In-etmet以及Intranet的交互連接,成功接入了“上海信息港”。這 標志著房地產系統的電子化信息交換已經全方位實現,在未來可以更好的服務于房地 產相關產業,房地產信息資源的共享服務將會被得到全方位的促進效果[19]。 2000 年后, 已經通過主流開發語言并結合 GIS 技術開發房地產信息管理系統。采用了 GIS 平臺的 應用軟件MapInfo7.5及其MapBasic7.0等編程語言,并使用了面向對象的計算機編程語 言VisualBasic6.0,以及插值軟件Surfer6.0,研發了應用型的GIS軟件土地價款信息管 理系統[20]。近些年,我國已有團隊開始使用大數據對房地產信息進行管理。使用大數 據可以對房地產進行分析、管理并且提供宏觀的決策,比如通過住房電梯的使用情況 來分析住宅的入住率,從而判斷區域位置的人口密度。當然,現階段大數據分析的準 確性、完整性以及難易程度還有待考驗[21]。
在分布式云服務發展方面,我國上海電信在 2000 年便推出了自己的云服務,其能 夠對用戶的操作進行智能分析,比如確認出哪些文件是新修改的。這樣不僅可以對文 件進行備份,還可以讓用戶看到近期文件的狀態。用戶可以設置自動備份,或者自己 手動挑選文件進行備份,但是該服務只是應用級的 SaaS 服務,應用面較為狹窄[22]。在 2010 年后對分布式云服務相關應用進行了探索,如在云計算服務下,對分布式數據存 儲技術進行研究并設計了一套面向廣電相關產業可以對新聞線索進行檢索的 SaaS 服務 平臺,此平臺采用Hadoop作為分布式數據存儲平臺,并使用HBase作為數據庫[23]。同 年間,由于我國對基建的大力發展,相關分布式架構云服務應用也被用在了電信行業, 對構建一套分布式云服務的項目監管服務系統進行了探究,其主要目的是使相關平臺 統一,在設計的技術方面也能有相應的標準指導,同時也能夠對項目進行實時監管, 最終能夠達到一套統一的流程標準[24]。在近年隨著人工智能的普及,分布式架構云服 務也被運用在了機器學習領域。該系統使用分布式架構搭建了一套機器學習系統,并 將其服務部署在容器類云服務中,這樣每個容器都是一個獨立的節點并管理一套獨立
的服務,同時每個節點都有一套自己的運算體系,這樣可以增加并發性以及調高效率
[25]。
在房地產信息管理系統的架構方面,千禧年后有了飛速的發展。早期基于WEB的 房地產信息管理系統基本使用.NET進行開發,服務的命令語言使是ASP.NET,數據庫 采用較為傳統的SQL Server 2005, B/S三層軟件體系結構,同時使用Ajax和ADO.NET 對數據進行交互[26]。在近幾年,更成熟的框架也逐漸被使用,比如 J2EE 的輕量級架構 , 此系統架構采用SSH形式,即使用Struts> Spring、Hibernate框架進行組合,并分別從 持久層、業務邏輯層和表現層進行實現[27][28]。
1.4存在問題
近幾年隨著互聯網相關技術以及電腦軟件與硬件共同的蓬勃發展,通過利用互聯 網與計算機技術所進行的各種業務之間的信息交互平臺的功能、效率、安全性的相關 需求已經逐漸急迫[29]。因為現在使用的各種管理系統建設的時間久遠,同時這些系統 也僅僅限于相同網絡環境不同部門的內部使用,更新速度也比較慢,已經無法滿足當 今社會的需要[30]。盡管我國房地產信息管理系統在技術、易用性、擴展性方面都在不 斷發展與提升。但是,隨著向著城市遷徙的人口,以及老百姓對居住條件的提高,房 地產的交易量也愈加擴大,易用性、智能化、可擴展、經濟等需求越來越強烈,現有 的房地產信息系統已經不能滿足[31]。各種關于房地產信息管理平臺的問題也會逐漸暴 露出來,具體如下:
(1)工作量大效率低且易出錯:房地產信息管理的部分工作流程需要工作人員填 寫大量的數據[32]。例如,街區名稱、樓號、住戶信息、住房狀況信息。重復輸入這些 信息不可避免地降低了工作人員的效率,增加了工作量,并且由于人工重復大量的輸 入操作,很難提高準確性。因此,更新和同步客戶信息尤為重要,而手動一遍一遍的 重復的操作是不現實的,需要建立數據之間聯系,做到一次數據錄入,能讓其他模塊 都能查詢。
(2)信息管理不方便,隱私沒有保證:使用傳統的管理系統是非常不方便的。為 了信息安全,這些系統都是無法與互聯網聯通的,處理、錄入、維護信息都需要在相 應工作局域網內[33][34]。然而,如果使用第三方系統或將系統開放到互聯網中,則存在 數據被盜或濫用的風險。
(3)傳統系統維護成本高、效率低、安全性差:傳統的單體項目的服務器受數量 限制,處理信息的效率遠遠低于可以自由擴展的分布式系統。此外,傳統的信息系統 需要服務器來支持系統的運行,需要數據庫服務器來存儲數據,這些都需要專門的網 絡支持,而且操作和維護成本高昂。此外,為確保抗災性、災后恢復和其他安全措施, 還需要管理人員看管服務器以及運行的系統[35]。
因此,開發一套符合要求的房地產信息管理系統是非常必要的。本文從房地產管理 系統的業務、架構選型、運行環境角度出發,開發了一套能夠解決上述問題的基于分 布式云服務的房地產信息管理系統。此系統不僅可以幫助政府或房地產公司對房屋信 息進行長周期管理,同時因為其部署在云端具有維護、使用成本低等優點,社區以及 物管也能使用。
1.5論文主要內容與論文結構
1.5.1論文研究的主要內容
本文通過對一些較成熟的國內外房地產信息管理網站的相關應用功能、需求以及 其系統軟件的總體設計進行了詳盡的分析與深入的研究。同時再結合應用較廣泛的其 他信息管理類系統的主要功能,為本房地產信息管理信息系統設計出5個主要功能模塊 分別為:首頁展示、住房信息管理模塊、住戶信息管理模塊、維護工程管理模塊、系 統管理模塊。
研究的內容具體有如下幾個方面:
(1) 對目前房地產信息管理系統的情況和目前現狀進行的分析和調研,確定本課 題研究的基于分布式云服務的房地產信息管理系統是可行且有效的。通過分布式架構, 動態的部署多服務節點能增強系統的處理能力以及有高可用的能力。
(2) 將系統部署在商業云,以便提高系統的安全性、可維護性、經濟型,同時結 合分布式架構的特性,增強服務的穩定性。
(3) 對基于分布式云服務房地產信息管理系統所采用的相關軟件開發技術及開發
工具進行篩選。同時對這些相關軟件開發技術和開發工具進行了詳盡的介紹和分析。
(4) 從房地產與信息系統的角度出發對房地產信息管理系統分析,并對其需求進 行分析與總結。
(5) 根據軟件開發需求以及得出的設計需求,提出了軟件系統所需要的系統架構 要求、軟件系統的總體功能設計和數據庫表結構的設計。
(6) 通過梳理出的需求,對房地產信息管理系統進行應用模塊的劃分,并對主要 應用功能模塊進行的詳細設計與實現。
1.5.2論文研究路線
本論文研究路線如圖 1.1所示。
提出問題
問題分析
基礎理論及相關技術分析
開發環境、分布式服務技術、云服務、JDK核心技
術、數據庫MySQL.系統架構
需求分析
系統可行性 分析 4 需求獲取方 法 4 應用業務用 例 應用功能需
求 4 非應用功能
需求
系統總體設計
詳細設計與實現
圖 1.1 論文研究路線圖
Fig. 1.1 Thesis Research Roadmap
1.5.3論文結構 本文對分布式云服務房地產信息管理系統進行研究,介紹了房地產信息管理系統 當今研究現狀、當前所需要解決的相關問題,以及研究的意義。
論文分為 7 個章節。
第1章:引言。闡明了本課題的背景與含義,并列出了房地產信息系統所要實現的
具體服務功能,以及本文的基本體系結構。
第 2 章:基礎理論及相關技術。闡述了該體系的研究過程中所包含的重要概念。 如:分布式服務技術、云服務技術、 JDK 核心技術等。
第3章:房地產信息管理系統需求分析。首先對本系統開展了可行性研究分析,再 介紹需求的獲取方法。并通過用例圖對使用者建模,確定了本系統的功能需求如下: 首頁展示、住房信息功能、住戶信息功能、維護工程信息功能等。最后再對本房地產 信息管理系統的主要非應用功能需求進行了詳盡的介紹。
第4章:房地產信息管理系統的總體設計。主要介紹基于分布式云服務的房地產信 息管理系統的總體架構設計。先對分布式架構及各個重要的組件進行了相應說明。隨 后講解了云服務的使用方式、屬性類別。再后介紹了應用框架的設計,同時整理出需 要開發的功能模塊。最后對整個數據庫系統進行設計,建立了對應的數據庫表結構。
第5章:系統的詳細設計與實現。本文主要闡述了信息系統開發的一些關鍵技術方 法與思路、如分布式技術與云服務。詳盡闡述了各層技術實現的具體應用方法,并介 紹了信息系統功能的幾個關鍵的技術實現步驟。比如分布式云服務的搭建方式,以及 框架設計方案。
第6章:系統測試。對已研發完成的房地產系統,進行了標準的檢測流程。
第 7 章:總結
第2章 基礎理論及相關技術
2.1開發環境介紹
(1) 使用的操作系統:Windowsl0
(2) 開發語言: Java 1.8
(3) 開發工具: Idea 2021.3.3
(4) 開發硬件配置:個人電腦,CPU 4核、16G內存、固態硬盤512MB
2.2分布式服務技術
與傳統的單體架構相比,分布式服務框架目前已經被普遍使用。在軟件開發的早 期,通常會選擇單片式架構來建立業務,并將所有的業務組件放在同一個應用程序中, 以便快速啟動和運行,并進行上線與試錯。然而,隨著業務規模的增長和用戶數量的 增加,單體應用的性能成為一個瓶頸。同時,用戶需求的數量增加,組件的耦合導致 需求研究和開發效率低下,無法跟上快速變化的用戶需求。正是在這樣的時候,應該 考慮分布式服務的架構[36],分布式架構流程如圖 2.1所示。
圖 2.1 分布式架構流程
Fig. 2.1 Distributed Architecture Process
面向服務的架構要求將原來的單體應用重新拆分為多個服務架構。 這通常是根據
業務領域縱向進行的,例如將信息平臺拆分為用戶中心、后臺管理中心、數據信息中 心等,橫向則根據共同的共享維度進行,例如數據信息中心可以繼續拆分為基本信息 服務、信息聚合服務、應用服務等。在服務被合理劃分和整合后,它們可以獨立擴大 或縮小規模以解決性能瓶頸,或獨立迭代和演進以解決研發效率問題。
服務化架構中通常需要采用服務化技術架構,來解決服務質量發現與業務管理問 題(比如:流量限制、降級、熔斷、分流)等問題。在開源架構里,應用比較多的是 SpringCloud,分為用于業務注冊和發現的Netflix Eureka、用于業務調度的Ribbo和 Feign、用于服務治理的Netflix Hystrix、用于服務配置的SpringCloud Config和用于服 務網關的Netflix Hystrixo Dubbo也提供了類似的解決方案,并在中國同樣也有一個龐 大的用戶群。
然而,使用開源框架在兩個主要方面仍有相對較高的成本。首先是開源框架對業 務運營的侵入性很強,框架代碼與業務代碼緊密耦合比較緊密,這使得后期版本升級 和維護非常復雜[37]。其次,開源框架缺乏系統的解決方案,往往面臨不同的組合和選 擇。所以,無論是基于SpringCloud還是Dubbo,構建一整套微服務解決方案都需要花 費大量精力去做方案的選型和差異方案的整合。
SpringCloud 特點:
(1) 約定優于配置。
(2) 開箱即用、快速啟動。
(3) 適用于各種環境。
(4) 輕量級的組件。
(5) 組件支持豐富,功能齊全。
這里考慮到后期維護、使用量、擴展性等因素。本工程選用SpringCloud作為分布 式服務框架。
2.3云服務技術
本文采用的云服務是指一個基于互聯網的模型,可以用來增加、使用和交互關聯 的業務,通常包括利用網絡創造動態的、可擴充的、虛擬化的資源等,云服務是對互 聯網的一種比喻性用語。在過去,云經常被用來形容通信網絡的一個說法,但后來又 被作為網絡及其底層基礎設施的一個抽象概念[38]。云服務是指企業利用互聯網按需要 提供所需要的服務,并且這些服務易于擴展。而這些業務往往涉及IT、軟件、與網絡 有關的業務,以及其他服務行業等。這就意味著計算能力也可成為一個產品,在網絡 上實現信息分配流通。如今云服務功能示意如圖2.2所示。
過去 10 年中,互聯網的發展速度之快堪稱奇跡,對所有互聯網用戶產生了深遠的 影響,而云服務正是在這種快速發展的浪潮中出現的。云服務的起源可以追溯到 2006 年,當時著名的 IT 公司谷歌提出了這個想法。傳統的使用軟件和硬件資源的方式是一 次性支付費用后使用,這樣會產生不必要地消耗資源,而且也不夠靈活,無法根據自 己的需要進行改變。云服務的出現就是基于這種新的用戶對IT資源的新需求。
2.3.1 云服務的定義
近年來,世界上領先的企業正不斷拓展其在“云”領域的領土,并積極推廣自己 的“云”業務。IaaS (基礎建設即業務)、Paas (網絡平臺即業務)和SaaS (應用軟件 即業務)是目前中國主流云服務公司的三個方式,其商業模式都是圍繞著企業的實際 需要而構建出來的[39]。IaaS、Paas和SaaS推動著企業從業務形式到商業模式的過渡。
因此,通過應用軟件、平臺、服務的這種模式,云服務正在影響個人、計算機、 互聯網的互動方式的方式,新的技術與社會變革將隨著這一趨勢漸漸逼近。
2.3.2云服務的特征
巨大的規模經濟效益可以算是云服務的最大的優點之一。開發者將能夠提供更方 便、更安全的應用程序,這一切主要歸功于使用供應商所提供的基礎設施,而且這一 應用方式將會比在單個公司內部發布的應用程序更好。同時,云的資源可以充分的被 應用程序利用,通過對需求的合理評估,減少不需要投入的物理資源,從而降低使用 成本。
就成本而言,云服務是一種一對多的模式,因此與部署單體服務到物理主機相比, 可以大大節省成本。如果要使用云服務則需要向相關云服務商家租借,通過單個應用 的使用時間的累加進行計費,這與傳統物理軟件的購買與授權是不一樣的。這更貼近 于商品訂閱模式,這與直接購買物理資產的模式是有區別的。得益于前期投入資金較 小,每月的商業成本流更可預見。
同時,云服務及其相關應用也獲得了眾多開發人員的青睞,由于它使所有的節點 活動都經由某個中心位置,而不是由不同的站點或工作站進行管理。這使員工們可以 利用網絡遠程瀏覽該應用程序。它還具備了快速地為用戶安裝他們所需要的應用軟件 的功能,以及隨著用戶數量增長,或者因操作系統的過載而增加計算資源自行擴充的 功能。當要增加服務器存儲空間或者寬帶時,云服務可以自行完成這一操作,前提是 進行了相關配置。相反的,如果要從新配置一臺傳統實體服務器,需要重新購買、運 輸、安裝、配置等一系列操作,這將花費數天完成。
與傳統的物理機服務器相比,云應用程序的升級對開發者來說是非常容易的。開 發者不必一個一個服務升級程序,而只需升級一個集中管理的應用程序,就能達到快 速且順利地更新應用程序。開發人員只需要前期在云服務上進行自動化的配置,云就 能完成幾乎全部的部署、維護工作,很大程度提高了開發人員的工作效率。
2.3.3云服務管理模式
按照云服務的用途,可以被分為公有云服務平臺、私有云服務平臺,以及混合云 服務平臺。各種類型的云服務平臺有截然不同的經營管理策略。
公共云服務是通過互聯網提供的,使用者可按照自身的需求登錄并付費。私有云 是一種通常設置于某機構內的私有環境中,無法讓外界使用者登錄的服務平臺。混合 云平臺是指公有云和私有云的融合形態。這一般是指,一些機構可以在公有云環境的 基礎上擁有一個私有的云環境,并以公有云環境作為補充的情況。公有云、私有云、 混合云具體區別如圖2.3所示。
圖 2.3 不同云的區別
Fig. 2.3 The Difference Between Different Clouds
嚴格來說,公共云平臺也是指一種云服務體系,通常是由第三方公司云服務供應 商向租戶供應云服務的服務平臺[40]。云服務使用者可以通過互聯網對業務進行訪問, 無論它是IaaS、PaaS還是SaaS。公有云的基本管理方法,是由云服務管理人員根據使 用者的需求對使用資源的時間、流量大小進行收費。而作為公有云管理員,職責則是 監控平臺在處理服務過程中獲得的各種運行的數據信息,從而根據這些數據信息計算 出使用時間或流量等可量化的指標,然后進行收費。公有云管理員還需要為租戶提供 必要的頁面或者功能接口,以便租戶對服務進行維護。而作為租戶,只需要以現收現 付的方式支付服務費用。這也是公共云的低成本是最大的優勢之一,因為它允許租戶 使用在傳統商業模式下成本較高的服務,而不會產生過多的費用。最后,公共云平臺 還可以提供部分增值服務給租戶,進一步提高云平臺的價值[41]。
通過本系統對云服務的應用功能考慮,本系統采用IaaS這一形式。
2.4JDK 核心技術
JDK(Java Development Kit)顧名思義這是Java語言技術開發的技術工具包(SDK), 是指軟件開發者在利用 Java 語言編制程式時所必須的各種技術開發技術工具的合集, 這也是專門供應給程式員所用的。JDK中不僅涵蓋了 JRE,還有專門編輯Java源代碼 的編輯器Javac,而且還涵蓋了許多Java程式開發調試與數據分析的開發工具[42]。內含: Jconsole、 Jvisualvm 等開發工具程式,此外還有 Java 程式編制時所要求的相關文件與 demo 實例。
SE (Java SE),是Standard Edition的縮寫,Java的國際標準版。是大多數開發人 員最常用的版本,從JDK 5.0起,以后的JDK被命名為Java SE。EE (Java EE),是 enterprise edition的簡稱,Java的企業版本,也采用了這個JDK發布J2EE軟件,從JDK 5.0開端,定名為java EE。從2018年起,J2EE定名為Jakarta EE[43]o如果沒有JDK這 個工具合集的話,Java程序將無法被編譯[44]。它們組件之間關系如圖2.4所示。
Fig. 2.4 JDK Construction
JDK包含的基本組件包括:
Javac:代碼編譯器,其功能主要是將開發人員編寫的程序代碼轉換成字節碼的形 式。
Jar: Java的打包工具,可以將相關的配置文件、JSP文件、類文件亦或者是靜態資 源文件等統一打包成一個后綴為JAR的壓縮文件。
Javadoc:文件產生器,能夠在源碼注釋中直接獲得文件。
Jdb: debugger 的查錯工具組件。
Java:是運行編譯器后產生的Java程序,可以在Java環境下運行(文件名后綴 為.class)。
Javah:生成能夠使用所有Java流程的C流程,并創建可被Java程序所使用的C流 程的頭文檔。
Javap: Java 反匯編器,可以表示已匯編類文檔中的所有可使用功能和數據信息, 并同樣表示字節代碼含義。
Jconsole:管理類工具,可以用來調試、監控Java系統。
JDK的版本現在更新非常快,最新的版本為JDK17現在可以從Oracle網站上下載。 但是,目前程序員開發的絕大部分項目都是使用 JDK8。 在主要更新里面,可以選擇 8 或 11,因為其他的不是 LTS( Long Time Support 長期支持版)。同時,官方目前已經 不對JavalO進行維護工作了,并且JDK12是一個非LTS版本,而JDK11與JDK8 一樣 是LTS版。這意味著下一個通用的版本將從JDK8直接過渡到JDK11,畢竟JDK11包 含了 JDK9和JDK10的所有新功能和新特性。因此,暫時不考慮JDK9和JDK10的版 本。
考慮到穩定性、兼容性以及后期維護,本工程依然選擇JDK8這個版本。
2. 5數據庫MySQL技術
本房地產信息管理系統使用MySQL數據庫管理,這是由瑞典MySQL AB企業所 研制的。 MySQL 是一款關系式數據庫管理系統,它可以把數據放在各種類型的表中, 使該系統的查詢不僅迅速,而且可擴展性、靈活度大大增強。操作MySQL數據庫所使 用的SQL語言,是當前數據庫管理系統中使用最廣泛的數據庫語言。而MySQL應用 軟件管理系統,以其造價低、體積小、性能優異以及開放源碼的優點,被廣泛選用于 為中小企業網站所開發的最優預數據庫系統[45]。盡管MySQL有其缺點,但依然不妨礙 它成為目前最流行的數據庫之一。它特別適用于普通個人用戶或小型企業的軟件開發 工作 。
本系統采用MySQL主要是基于其以下五個優勢:
(1) 低成本。由于MySQL數據庫由MySQL AB所有,不僅在網絡上只有一種社 區版本可提供免費使用,而且其源代碼也是公開的。初學者在普通的硬件上裝備和配 備MySQL都非常容易。這也就是MySQL的最大優點所在。
(2) 簡易性。 MySQL 數據庫配備了許多強大的開發和支撐工具。同時代碼語言 也是用標準的 SQL 語言。市面上大部分可視化數據庫工具也對 MySQL 有很好的支持 性。所以,MySQL數據庫的開發很容易實現,即使對新的開發人員來說也是如此。不 需要系統的學習或專業的培訓。
(3) 靈活性。因為MySQL實際上是一個數據庫系列。最開始可以選擇其中一個 版本,并根據需要對其進行配置所需要的設置。因此,可以先從一個較小的版本產品 開始,以后根據它的性能和大小來動態擴展。
(4)普及性。 MySQL 目前在全球操作系統的裝機總量已經達到了一千二百萬個, 平均每日有約七萬個的下載,當前 MySQL 有很大的市場占有率。對比其他開放的閉源 數據庫,大多數開發者也更青睞于MySQL[46]。
(5)良好的支持。 MySQL 可以很方便安裝、運行到大多數主流的操作系統上。 通過自動化的安裝包,可以在數分鐘內進行正確配置并啟動服務。同時,官方也提供 綠色安裝包。
2.6系統架構
應用軟件系統經過多年的探索與實踐, 最終形成了兩種常見架構模式: Client/Server (C/S)模式和Browser/Server (B/S)。兩者都是先后為指導各應用系統 的開發而建立設計的[47]。
在 C/S 架構模式下,客戶端想要訪問服務器信息時,必須先在本機上安裝客戶端軟 件。因為本地安裝了客戶端,所以大部分數據計算、圖形渲染都由客戶端處理。相對 于B/S模式,服務器壓力較小。C/S架構模式如圖2.5所示。
在B/S架構模式下,操作系統客戶端只需要安裝一個瀏覽器(Browser),而大多 數操作系統也都自帶了瀏覽器[48],如IE或谷歌瀏覽器。B/S架構模式如圖2.6所示。
B/S 體系結構的優勢如下:
(1) 系統維護和系統升級的方法非常簡單,只需要服務器升級。因為系統客戶端 是運行在瀏覽器,用戶不需要做任何操作,系統管理員只要做好服務器的管理、維護、 升級工作就行了。
(2) 系統低成本且選擇范圍廣泛。因為大部分主流操作系統都自帶瀏覽器,各個 主流操作系統也都能安裝其他瀏覽器。同時,有瀏覽器對各個操作系統兼容性的適配, 所以穩定性較高。
B/S 體系結構的缺點如下:
(1) 在過于豐富的圖形表現能力上以及涉及到大量數據的運行速度上比 C/S 體系 結構要差。
(2) 程序運行過程中容易受到瀏覽器版本的影響,如果瀏覽器版本過老會影響展 示。
(3) 由于所有信息都在服務器上進行處理,后端服務器運行、傳輸、處理數據負 荷較重(當然可以通過分布的形式優化)。
盡管B/S有以上的缺點,本系統考慮到后期維護、多環境辦公、用戶的易用性等因 素,最終決定采用 B/S 體系結構。
2.7本章小結
本章,根據系統開發的需要,首先介紹了本系統所使用分布式服務技術 SpringCoud,以及其架構。同時,又介紹了云服務的概念及使用的意義,以及不同云 服的優缺點,確定了本系統采用IaaS云服務。隨后,又介紹了開發語言Java的JDK技 術,在綜合考慮了各種版本優缺點之后最終使用的JDK8版本。再后,對本系統所采用 的數據庫Mysql的特性以及優缺點加以說明,解釋使用該數據庫的原因。本章節最后, 介紹了本系統開發所涉及的開發框架技術B/S架構以及C/S架構,在比較了 C/S與B/S 對應的特點以及優缺點的基礎上,最終決定本系統采用B/S的架構形式。
第3章 房地產信息管理系統需求分析
需求分析是軟件設計的重要基石,也奠定了后續研究的工作。在了解所面臨的現 實問題和用戶的需求后,系統設計者可以提出解決這些問題的設計方案,以滿足需求。 在我們提供的房地產信息管理系統中,對系統所包含的功能模塊進行了需求研究。
本章中所討論的房地產信息管理系統的需求可以分為兩個方面:應用類功能需求 與非功能的需求。應用類功能需求,可理解為軟件系統開發中必須完成的相關應用功 能,最終讓用戶能使用上這些所必須的應用功能。如果缺少應用類功能,那么系統將 會是缺失的,無法使用的。而非功能需求補充了應用類功能需求所缺少的各種附屬類 操作等。比如:系統的規范標準、要求合約以外的需求細節、質量、性能等相關屬性 內容。
3.1房地產信息管理系統開發的可行性分析
可行性研究也可以被稱為可行性分析,主要是評估系統應用的前景,在系統開發 之前。它通常從社會、經濟和技術等多個角度進行。本工程主要評估角度如下。
(1) 技術要求。除了扎實的計算機知識外,還需要逐一了解房地產信息管理的整 體流程和主要任務。
(2) 社會層面的要求。這里涉及到很多內容,包括確保一定數量的使用者,提供 令用戶滿意的業務系統,記錄和統計業務信息,同時還包括一些推廣方面的問題等等。
(3) 對系統使用者的要求。建立信息管理系統的好處很多,而且費用不高,可以 承受。同時可以使相關使用部門的開發效率提高,同時也能節約數據維護的成本,使 工作得以順利進行。大概率會受到相關工作人員的喜愛。
3.2需求獲取的方法
系統需求分析的實質是系統地分析和調查要開發和設計的對象,并建立相關的需 求模型。需求的獲得主要有兩種方式。
首先,可通過參考一些較成熟的國內外房地產信息管理網站來獲取其核心需求。 就其管理而言,核心功能差別不大,這些網站提供的綜合功能構成了房地產信息管理 系統的詳細系統功能清單。在此清單的基礎上,進行分類和總結,作者與相關從業人 員、同學進行溝通交流,獲取相關需求意見,再結合系統自身的特點,在清單里增加 某些必要的功能,或者刪除系統功能清單中不符合實際的功能。以此初期的需求為基 礎,設計出系統頁面原型圖。在后期以設計出的原型圖為基礎,頻繁與相關從業人員 以及同學進行需求功能交流、推導、驗證,并不斷重復該操作過程,從而使需求分析 不斷的進行迭代完善。最終形成完整穩定的系統功能需求。
本系統使用了用例圖來研究和記錄具有復雜功能結構的需求。用例圖,是指通過 描述信息系統主要參與者和相應信息系統的交互方式,來模擬系統需求的一個方法。 以上這一過程就是對用例圖進行建模。所有用例都是用戶使用系統的一個方式,可以 包括許多邏輯上相關的任務和交互序列來完成一個特定的任務,所有這些用例的組合 體就是系統的所有功能。通過用例來描述系統需求,可以使系統更加以任務、應用為 中心,讓使用者更加明確地知道系統能夠做什么以及應該怎樣做。
3.3系統應用業務用例
為得出本房地產信息管理系統的最終應用功能需求,需要先確定系統的參與者, 通過對不同的系統參與者的交互方式來對用例圖進行建模。
3.3.1確定系統參與者
本房地產信息管理系統是一個普通的應用類信息管理系統。經過分析,可以確定 本系統的參與者有兩類人員,系統操作員(普通用戶)、系統管理員。系統操作員就 是本系統的使用人員,而系統管理員是專門對系統后臺進行管理維護的工作人員。具 體這兩類參與者各自的系統功能如下:
房地產信息管理系統操作員:此用戶是本系統中具有使用應用功能的用戶,能在 登陸本房地產信息管理系統之后可以對有關的信息內容進行增、刪、改、查等操作。
系統管理員:有且只有對系統后臺進行管理和維護的功能,不能使用房地產信息 類的相關功能。
3.3.2房地產信息管理系統操作員用例
本系統由于涉及隱私,所以并不是任何人都可以通過互聯網進行訪問的。相關操 作員只有通過輸入正確的賬號、密碼才可以登錄本系統。操作員登錄系統后可以對住 房、住戶、維護工程等信息進行增加、修改、查詢、刪除等操作,并且也具有修改密 碼、找回密碼等功能,用例圖如圖 3.1所示。
3.3.3系統管理員用例
系統管理員有管理操作員賬號的權限。具有如下:系統安全管理維護、操作員權 限管理、數據維護等功能。通過管理員賬號登錄后可以通過頁面對操作員的權限進行 管理,比如查看管理員賬號相關信息、禁用賬號、新增賬號、編輯賬號等功能。同時, 管理員還需要對系統及數據庫進行管理,主要包括但不限于備份、還原、修改數據庫 等。用例圖如圖 3.2所示。
3.4系統應用功能需求
通過用例我們可以清晰的得出相關人員為了能順利完成與本系統進行交互,需要 使用到的功能分別為:住房信息管理、住戶信息管理、維護工程管理、系統管理等功 能。與此同時,在相關用戶還未登錄的時候,可以在首頁瀏覽部分非隱私數據,所以 這里增加一個首頁信息展示。圖 3.3展示了本房地產信息管理系統全部應用功能模型關 系匯總。
圖 3.3 系統需求模型
Fig. 3.3 System Requirements Model
3.4.1首頁信息展示 可以展示相關新聞推送、本系統各項指標的統計數據,各種圖例與報表等數據。
同時各個用戶也是從首頁登錄。
首頁展示可以將現有的住房、住戶、維護工程、工程款項等數據進行篩選、處理、計算實現需 要的頁面展示,展示圖形有折線圖、柱狀圖、排名等展示。
第一部分:指標分析趨勢圖,是對關鍵指標的歷史數據及其對照數據、排名通過折線圖進行展 示。幫助相關管理員做出應多措施。
第二部分:指標看板圖,可以查看己知數據在計算后的結果,并且對不同小區進行對比,該數 據通過折線圖、柱狀圖進行展示。
第三部分:指標排名圖可以對轄區內小區關鍵數據進行排名,方便管理員了解小區當前情況。 比如可以展示工程預算排名、工程進度排名等信息。
3.4.2住房信息管理
通過住房信息管理,可以對住房的地理位置、所有者、狀態等基本信息進行登記。 不僅可以檢索房屋的信息,同時也與住戶信息相關聯。可以通過關聯條件查詢對應住 戶的信息。
3.4.3住戶信息管理功能
住戶信息管理,是對所管轄區的居住者的信息進行管理,可以是住房的所有者, 亦或者是合法的租賃者。住戶信息可以與住房信息進行關聯,方便了解對應住戶的整 體情況,可以通過住戶信息查詢相關住房信息了解住戶屬于哪一棟、哪一層等。
3.4.4維護工程管理功能
本房地產信息管理系統是對房地產整個生命周期進行管理的。考慮到房地產管理 是一個持續性的工作,后期涉及到維護、改建、維修等業務需求。用戶可以通過工程 管理來對小區的建設維護工程進行管理,比如:屋外觀翻新、外墻翻新、維修等。
通過該功能可以對社區相關維護工程的進度及其維護工程款項進行管理。其中工 程進度管理包括了維護的開始時間,完成時間、當前狀態信息等。同時,通過款項管 理對工程款項審批、支付等情況進行管理。
3.4.5系統管理功能
系統維護由權限管理、系統管理以及數據管理組成。系統管理功能只能是內部系 統工作人員登錄后使用。該功能與另外其他應用功能沒有任何聯系,其主要細節功能 有:系統操作員信息錄入、系統操作員信息修改、系統恢復、數據庫備份及恢復等功 能。
3.5非應用類功能需求
非應用類功能的需求與系統應用的相關功能是沒有任何關系的,但是這些需求是 系統不可缺少的,因為其反映了系統的質量。如果缺少了這些功能,即使有應用功能, 但是系統也不能說是完整的。本系統的非應用類功能如下。
3.5.1系統安全性需求
系統需要具有完善的安全措施,有較高的安全等級,能抵御常見的黑客攻擊。由 于系統內部有很多隱私數據,所以要做到安全可靠,防止數據落入不法分子手中。
本系統服務運行以及數據存儲都在云端,而非實體服務器。而云端服務供應商都
有著領先的企業級安全措施。同時,云端數據維護由系統管理員維護,所以一般人不 可能盜取數據,也無法修改數據。綜上所述,本系統相較于擁有自己實體機房的系統 要更加安全。
3.5.2系統性能需求
系統需要在任何時候保證訪問流暢,能做到多用戶并行操作。本房地產信息管理系 統主要是針對政府、企業開發制作的。所以在線人數較多,需要保證多用戶的并發操 作的穩定性。同時考慮到環保與經濟性,不能一味的使用高性能服務器,這樣在業務 閑置的時候是非常浪費的,這就需要根據業務量來動態調整系統的處理性能。
本系統使用分布式云服務架構,當系統業務量上升,可以調整云端虛擬服務器的性 能或者帶寬,亦或者是新增云服務器來增強系統的處理能力。這樣既保證了業務量的 高峰時刻的處理能力,同時也兼顧了經濟性與環保性。
3.6本章小結
本章從房地產信息管理系統的可行性分析出發,得出開發本系統是非常有必要的。 之后介紹了系統的需求是通過參考相關成功案例以及用例圖方法進行推斷的。再后確 定系統的參與者,通過對不同的系統參與者的交互方式來對用例型進行建模,最終得 出本系統的應用功能需求:首頁信息展示、住房信息展示、住戶信息展示、維護工程、 系統管理功能。最后介紹了本系統非應用類功能的需求:系統安全性需求、系統性能 需求。
第4章 房地產信息管理系統的總體設計
本文的房地產信息管理系統能夠全覆蓋管理住房、住戶、維護工程,以及一定程 度的業務流程自動化。可以對整個房地產生命周期的信息數據進行記錄及監控。同時 運用分布式云服務架構,降低信息維護難度,提高信息安全,節能增效。通過利用互 聯網的便利性的B/S模式,不僅僅對于開發者減少了開發、維護的工作量,同時對于用 戶減少本地環境的依賴,降低用戶的總體使用成本。
系統的總體設計,是對理論體系分析和研究的進一步擴展。此章節主要介紹了本 系統的設計原則及標準、分布式架構的設計、云服務的選擇、應用功能模塊的設計等。
4.1設計標準及原則
房地產信息管理系統是政府及企業內部現代化信息管理的一個非常重要的應用, 它可以利用計算機軟件與硬件技術、互聯網技術、局域網技術、電信設施以及其他辦 公設備,通過管理互動提高管理效率達到節能增效的目的,系統開發遵循以下原則:
(1) 本系統的總體設計需要體現完整性原則,系統各個模塊、組件、功能不能有 缺失,必須是完整可靠的。。
(2) 數據庫建表結構以及類型必須是規范的、按照統一的SQL標準來執行。
(3) 由于本系統有大量隱私數據,所以安全性是很有必要的,同時需要具有容災、 災后恢復的功能。
(4) 最終系統是拿給用戶去使用的,所以總體設計原則要以使用者為中心。同時 所開發的功能盡可能要考慮到后期功能的擴展、系統的維護。
4.2系統總體設計
本章主要介紹系統的分布式架構設計、應用功能模塊設計、數據庫設計。它們之 間關系如圖 4.1 所示。用戶通過瀏覽器發送請求到分布式架構服務,該服務再將請求定 向到對應的系統應用功能服務,應用功能服務去數據庫查詢數據后對數據進行處理, 最終將請求返回到用戶的瀏覽器端。
緩存
o
o
o
用戶
用戶
用戶
用戶
配雪中心 服務
分布式架構
酬中心 服務
^Seata 服務
網關服務
網絡服務器
數據庫
系統應用功能模塊
索統操作員可使用的摸塊
朋信息摸塊
錄
首頁
堵刪改查
登錄功能
本慈肖息
腿信息模塊
房息
系統管哩員登錄
堵刪改查
數蹄計
素統萱理員可便用的模塊
魴工程諏
談管理模塊
增刪改查
復
工就項臧
增刪雄
用戶
用戶
用戶 用戶 用戶 用戶
圖 4.1 系統總體結構
Fig. 4.1 Overall system structure
4.3分布式架構設計
分布式架構,也就是將一個服務拆分為幾個子服務,再分配到不同的服務器節點, 支撐這種共同構成的系統的架構稱為分布式架構。使用分布式結構的系統服務器節點, 在空間部署上是可以任意分配的,這些服務器既可以放到了不同的機柜中,也可以在 不同的機房中,又或者分配到了不同的城市[49]。
本系統架構使用了 SpringCloud 分布式結構,是對多種結構的有序融合。其運用了 Spring Boot 的設計便利性,精簡了布局式信息系統基礎建設的研發過程,如數據監控 管理系統、業務的發現與注冊服務、消息總線、負載均衡功能、 Nacos 配置分發中心、 網關的斷路控制器等,都能夠用Spring Boot的自動裝配功能完成一鍵啟動部署。Spring Cloud 并不是在重復制造輪子,它是將同行業中所研發的功能比較齊全、可以經過實踐 考核的服務框架結合一起,使用Spring Boot屏蔽掉了繁瑣的安裝過程和實現原理,并 完成再次包裝,最終讓開發者可以使用一個簡潔易懂、便于部署、可維護的分布式開 發工具合集[50]。
本系統主要架構所屬服務有:注冊中心Eureka、網關服務GateWay、配置管理服 務Nacos、網絡服務器Nginx、緩存服務Redis、分布式事務服務Seata以及數據庫Mysql。 以上服務統一都部署在云虛擬服務器上。如圖 4.2展示了本文基于房地產信息管理系統 的架構圖。
由圖中可知,用戶通過瀏覽器發送請求,首先會進入作反向代理的網絡服務器
(Nginx)服務器,通過網絡服務器(Nginx)進行定向,到本系統業務的網關 (GateWay)。網關(GateWay)通過負載均衡算法將請求發送給指定的應用服務器, 當應用服務器查詢數據時候,先去緩存服務(Redis)查看是否有緩存,沒有再去數據 庫(Mysql)進行查詢。最終應用服務器將處理完成的請求按原路返回給用戶的瀏覽器。
4.3.1 服務注冊中心 Eureka
Eureka其主要功能為完成業務管理(業務登記與發現),以Eureka業務端作為業務登 記管理中心。并支援集群部署工作。 Eureka 服務器端是一種 Java 服務器端,主要用于 辦理業務申請和發現。當使用開啟時,Eureka客戶端向服務器進行申請自身的業務信 息,并且把業務端的業務信息緩存在本地。并且服務器端會與服務器進行周期性的進 行心跳交換,并更新業務租約信息和業務消息[51]。
Eureka 是由 Netflix 公司開發的分布式服務框架中的服務發現架構,實際上就是一 種通過REST的業務。一般是用來定位執行在AWS域中的中間層業務,以便后續能達 成AWS域中的中間層業務故障遷移與負載均衡的目的。Eureka也有基于Java的客戶 端,可以幫助服務與服務之間的交互更加便捷。同時 Eureka 的客戶端也包含了負載平 衡器,這使得Eureka客戶端擁有基本的循環負載均衡功能。
Eureka 包含兩個組件:Eureka Server 和 Eureka Client。
Eureka Server也提供了業務登錄業務,當各個節點啟用后,會在Eureka Server中完 成業務登錄,這樣一來在 Eureka Server 中的業務登錄表上將會保存全部使用業務節點 的消息,每個業務節點的消息都能夠在網頁中直接的查看。
Eureka Server 本身就有這個業務,但默認狀況下是自動登錄到 Eureka 的注冊管理 中心。假如構建了單機版的 Eureka Server 登記注冊管理中心,那么就必須安裝并解除 了 Eureka Server 的自動注入邏輯。畢竟將當前業務注入在當前業務代表的登記注冊中 心中是一種講不通的邏輯。
Eureka Server使用Register> Get、Renew等接口技術進行服務的申請、發現,以及 心跳測試等業務。
Eureka Client也是一種java服務器端,其分為兩個角色,分別是:Application Service(Service Provider)和 Application Client(Service Consumer)。Application Service 是 業務的供應方,主要是指注冊在Eureka Server中的業務。對應的Application Client為業 務消費方,使用 Eureka Server 發現業務,并對其執行。在此處, Application Service 與 Application Client并沒有一定上的界定,因為Provider在進行服務的時候,也只能消費 他人的Provider所進行的業務;而Consumer則在消費服務的時候,也只能進行對應的 業務。如圖 4.3所示。
圖 4.3 Eureka 工作原理
Fig. 4.3 How Eureka works
其中:
Application Server 表示服務提供方
Application Client 表示服務消費方
Make Remote Call 表示遠程調用
服務將在 Eureka 服務上進行注冊,并且每隔三十秒鐘發出心跳信息并自動更新它 的租約。一旦業務客戶端無法重復續訂租約,則它將在大概九十秒鐘內從服務器登記 注冊表中清除。登記消息和自動更新被復制到集群中的每個 Eureka 節點。而對于任何 區域內的客戶端系統都通過查詢注冊表消息(每三十秒進行一個)來定位它們的業務(可 能在任何區域)從而實現遠程調度。Eureka Client需要每三十秒鐘內向eureka Server系統 發出一個心跳,并且自動更新 Server 系統上最新的注冊消息到本地,而一旦 Server 系 統上幾次都沒有得到來自服務器端的心跳消息,則在九十秒鐘內就會被從Server系統 上刪除。
4.3.2網關服務 GateWay
在微服務眾多的服務的治理過程中,服務網關的作用在微服務框架中的主要功能 有統一入口、權限校驗、動態路由、降低耦合度等功能。
關于SpringCloud的網關有三個,分別是Zuul、Zuul第二代版本和Gateway,其中 Zuul以及Zuul第二代版本是Netflix公司開發的,但是因為Zuul的性能不夠好,Zuul第
二代版本的開發內部有歧義,所以SpringCloud開發人員自己研發了一套網關服務,其 名字叫 Gateway。
Gateway是在Spring第五代版本基礎上開發而來的。Gateway的工程師們使用了一 種簡潔并且高效的方法來對 API 對象執行路由,并且提出了一系列強大的過濾操作功 能,比如:熔斷、限流等。 SpringCloud Gateway 的目標是,實現統一的網絡路由方法, 且通過 Filter 鏈的方法提高了網關系統最基本的控制功能,比如:更高的安全、指標的 監控、以及限流等功能。
SpringCloud GateWay 的三個重要功能組件:
(1) Route,路由是建立網關的基礎模型,它由ID,目標URI,以及一連串的斷 言和過濾所構成,一旦斷言為true即對應該路。
(2) Predicate,斷言判斷請求的轉發條。
(3) Filter,過濾指的是在Spring框架中GatewayFilter的例子。利用過濾器,就 能夠在請求被路由之前和事后,對請求內容作出調整。
其工作原理見下圖 4.4所示。
Gateway Client
Spring Cloud Gateway
Gateway Handler
Mappi ng
客戶端首先去請求Gateway,然后再和Gateway Handler Mapping中的路徑進行匹 配,如果 Gateway Handler Mapping 中找到了對應的地址再將其發送到 Gateway web。 Hander Handler再使用特定的可以過濾的鏈路把要求發送給下一個實際的服務進行業務 邏輯的處理工作,等待處理完成后再回復。過濾間用虛線分隔,因為過濾可以會在發 出代理申請前("pre")或事后("post")進行業務邏輯。
Filter在"pre"類別的過濾器中的功能有驗證權限、監控流量、打印日志、數據檢驗 等功能。而在"post"類別過濾器中的功能有應答內容、應答頭的調整,以及日志信息的 輸入輸出,流速監測等十分關鍵的功能。
最后,還需要在 GateWay 網關服務內整合負載均衡器以及斷路器,以便服務器在 處理大量應用的時候增加處理效率,同時防止宕機。
(1)負載均衡器Ribbon,是一種使用HTTP和TCP的服務器端負載平衡工具。 它能夠使用 Netflix Ribbon 來實現。利用了 Spring Cloud 的技術,能夠使開發人員更輕 易地將面向業務的REST模版要求,手動轉換成服務器端負載均衡的業務調度。重點在 于把外部的 REST 調度,根據負載均衡策略轉化為微服調度。 Ribbon 有比較多的負載 均衡策略。
(2)斷路器Hystrix,維護控制系統,并限制設備故障區域。為確保其高可用性, 某些業務一般都會集群部署。由于網絡因素或是操作系統本身的因素,服務質量問題 并無法確保百分之一百可用性,因為一旦一個服務質量發生問題,調用的這一個服務 質量將會發生線程堵塞,而此時若有更大規模的業務要求發生,Servlet容器的所有線 程資源將會被耗盡為止,從而造成服務質量崩潰。由于服務質量問題和服務質量之間 的依賴性,故障問題將會傳染,會對整個微業務體系產生災難性的嚴重后果,這便是 所謂服務質量故障問題發生的"雪崩"效應。而Hystrix可以在故障時及時"熔斷",防止" 雪崩"效應。
4.3.3配置管理服務 Nacos
使用傳統的靜態配置方法,改變配置的唯一方法是事后重新發布應用程序。這樣 帶來了很多麻煩,降低效率同時也容易出錯。為了實現動態性,可以選擇使用一個數 據庫創建相關配置表,并定期輪詢數據庫以便查詢配置的變化。低輪詢頻率會增加感 知配置變化的延遲,而高輪詢頻率盡管可以減少感知配置變化的延遲,但同時又會帶 來性能上的降低。所以必須在實時性和性能之間做出妥協。配置中心是專門為此類業 務場景設計的,可以管理動態配置,同時平衡實時性能和一致性。目前論性能, Nacos
的讀寫是最快速的配置中心,同時也具有大部分配置的管理功能,最后Nacos的架構復 雜度也相對較低可以減少運維部署的工作。其重要功能見圖 4.5所示。
注冊自身服務
圖 4.5 Naocs 核心功能
Fig.4.5 Naocs core functions
Nacos是阿里開發并且開放了源代碼的發現配置管理服務。Nacos支持基于DNS和
RPC的服務發現。要在Spring Cloud中使用Nacos,僅僅需要下載Nacos并啟動Nacos 服務器即可。
Nacos 支持服務的動態配置,以及服務注冊和發現。動態配置服務允許對所有環境 的應用和服務配置進行中央化、外部化和動態化的管理。動態配置消除了在改變配置 時重新部署應用程序和服務的需要,使配置管理更加有效和靈活。以配置為中心的管 理促進了無狀態服務的實施,并使按需彈性地擴展服務變得更加容易。
Nacos注冊管理中心包括Server和Client,其中Server使用Java編程,主要作用是 為Client進行注冊發現業務和分配業務。而Client則能夠用多語言完成,將Client和微 服務嵌套在一塊,同時Nacos則給出了 Sdk和OpenApi,只要不用Sdk就能夠通過 OpenApi自動寫服務注冊與發現,并對配置內容進行更新。
Nacos 的技術領域模型,主要內容包括了命名空間環境、集群、以及服務。從圖
4.6 的分層存儲管理工作模式中可看出,在業務層面,存儲了健康檢查控制器、元數據、
路由機制、防護閾值等設置信息,在集群中存儲了衛生檢測模式、元數據、同步機制
等數據分析信息,在案例中存儲了各案例的 IP 地址、接口、權重、衛生檢測狀況、下 線情況、元數據、應答時限。
—注圧月務、實例、葩心跳
長輪詢訂聞跆、
■如果服務有交動
則拉戰艮務信息
嚴拉取到的 •服務實例信息?
請曲例
根揭拉取到的
•服務實例信息?
請卓例
圖 4.6 Nacos 工作流程
Fig. 4.6 Nacos Workflow
4.3.4網絡服務器的選擇
網絡服務器是直接影響網站性能的一個重要因素,也是所有軟件開發者在選擇網 站運行環境時必然要考慮的一個因素。這里比較目前較為主流的Apache和Nginx。
Apache 創建于 1995 年,自 1999 年起在 Apache 軟件基金會下開發,它靈活、高效、 具有豐富的可擴展性,并得到一個活躍社區的支持,是世界領先的開源免費網絡服務 器[52]。而 Nginx 是由一位俄羅斯軟件工程師開發的一個免費的、高性能、高并發和低 內存的開源網絡服務器。其主要功能有:負載平衡、緩存、訪問和帶寬控制等,同時 它部署簡單、也輕量化,可以與各種應用程序進行整合[53]。
雖然 Apache 和 Nginx 有著不一樣的背景,但它們起到的作用是相同的,即接收用 戶的請求,處理這些請求并將結果返回給用戶。 Apache 提供了一套多處理模塊,使用 操作系統資源,管理進程和線程池,控制用戶請求的處理。而Nginx是以異步的、非阻 塞的、事件驅動的方式實現的,有單線程的工作進程,每個進程都能異步處理大量的 用戶請求。靜態內容可以得到高效的處理。
相對于 Apache, Nginx 有如下優點。
(1) 它是輕量級的,作為一個網絡服務運行,比apache消耗更少的內存和資源。
(2) 對于靜態處理,Nginx比Apache強大三倍以上。
(3) 在并發性方面很強,nginx是異步和非阻塞地處理請求,請求流程如圖4.7所 示。而apache是阻塞的,即使在高并發的情況下,nginx的性能在資源和消耗方面也比 較低。
(4) 在中國國內社區很活躍,相關維護內容很容易查詢。同時,各種高性能模塊 正在迅速被眾多程序員開發出來。
綜上所述,本工程采用Nginx作為Web前端服務器。
4.3.5數據的緩存功能 為了處理分布式服務的用戶登錄權限問題,同時降低數據庫的負擔,提升系統的 運行速度,本系統的分布式架構使用Redis作為數據的緩存服務。
Redis 是一個可以被用來做緩存、數據庫且開源的數據存儲系統。其主要特點是可 以運行原子操作,比如向字符串追加、增加哈希值、向列表推送一個元素、計算集合 的交集與并集等操作。為了實現最高性能, Redis 與內存中的數據集一起工作。根據服 務的使用情況, Redis 可以通過定期將數據集轉儲到磁盤或將每個命令附加到基于磁盤 的日志來持久化數據。
Redis 緩存主要是為了做 session 數據共享,但因為在分布式系統中 session 數據共 享也是一項很重要的功能[54]。同樣, Redis 作為二級緩存對于縮短所有業務的響應時間, 以及減低對數據庫系統的瀏覽頻次也是非常有好處的。
當然,Redis cluster或者Redis sentinel也可以按照實際狀況加以選用。
4.3.6分布式事務的處理
由于不同的業務集群都對應著自己的數據庫系統,彼此數據庫不能互聯的,所以 相互之間業務數據庫調用都要彼此連接,有時甚至于是異地的,這所帶來的后果就是 網絡延時導致的請求等待,或者網絡抖動導致的信息損失,這都是非常恐怖的現象, 所以一定要解決分布式事務。可以通過消息隊列,或者通過第二階段的協議配合事務 補償機制[55]。
本分布式架構使用Seata進行事務處理,這是一款開源的分布式事務解決方案,其 性能高且使用簡單,社區也非常活躍。Seata有AT、TCC、SAGA和XA等事務模式, 這里使用AT模式[56]。
4.4云服務器的選擇
云端業務集中形成了強大的虛擬化資源池,使用者能夠通過終端設備隨時登錄云 端,進行資料存取、數據瀏覽和信息計算等功能業務。另外,對企事業單位等個人用 戶而言,可以通過把系統托管到企業云端或租用相應的云服應用,既不需增加本地機 房實體服務器的數量,也不需指派更多的系統運維人員進行維護,這一方式更具有靈 活擴展性,減少管理成本。
4.4.1云服務的類別
云服務可以分成四個類別:公有云、私有云、社區云。公共云是一個云業務形式, 由大型的云服務供應商所組成,對公眾開放,能夠支持大量用戶對資源和服務的請求, 目前各大互聯網公司的云盤就是一種常見的公共云。私有云是一種封閉的云服務形式, 由企業或機構等組織單獨部署,與外界隔絕。通過在私有基礎設施上構建大數據資源 中心,組織能夠更有效管理對私有資源的共享、安全與服務。社區云服務是指一個構 建于一定范圍內的云業務形態,為某個地區或產業提供服務、應用和內容,以實現社 會內用戶的共同需要,并提高用戶間的高度參與性交流和溝通,并實現高效的資源共
享。混合云是一種由多個公有云、私有云和社區云用統一的標準和專有技術組織起來, 使每個云的優勢最大化的云服務形式[57]。
云服務的層次結構上可分成自下利益再至上三級, 包括了 Infrastructure as a Service (IaaS,基建即業務),Platform as a Service(PaaS,平臺即業務),還有 Software as a Service(SaaS,應用軟件即業務):IaaS是指一個基建業務,服務提供商利用虛擬化技術 建立一個軟硬件資源池,并以基于時間和使用的租賃方式為服務器、存儲設備、網絡 和軟件等基礎設施環境提供服務支持,可以根據用戶的需求靈活調整[58]。 PaaS 是把軟 件開發平臺本身,當作一個服務提供給應用的平臺服務,通過集成開發工作環境、基 礎運營、監控服務過程的開放平臺技術,為應用搭建功能齊全、高度可定制的業務中 間件,有效保障各類應用軟件業務的安全穩健運營,并實現應用服務的迅速發展與部 署[59]。 SaaS 提供軟件服務,在云環境中完成特定的網絡化應用,用戶不需購置價格昂 貴的軟件產品,只需向網絡服務供應商租賃,而軟件產品的更新與保護工作則交由服 務提供商[60], IaaS、PaaS 、SaaS 及其區別如圖 4.8 所示。
本系統大部分應用都為自己開發,只需用到云服務的基本功能,故采用IaaS類別服 務。
4.4.2選擇適合的云服務
選擇云服務有如下標準:
(1) 從功能考慮:一些云供應商只涵蓋了云功能集的個別方面,而其他供應商則 提供完整的云組合,包括 IT 基礎設施服務,如網絡服務和虛擬服務器服務。一些供應 商提供額外的應用程序,如在線會計、在線客戶關系管理(CRM)和辦公程序。還有 一些云服務提供商專門存儲數據,如文件、照片和視頻。可以通過確定所需的云服務, 以首先縮小潛在供應商的名單。
(2) 云服務的安全性:如果一個公司的關鍵數據被濫用或客戶信息沒有得到適當 的保護,就會對企業產生嚴重影響。當中小企業依賴云供應商時,則取決于其安全理 念。因此,云服務的安全性至關重要,供應商必須能夠確保消除導致故障、性能下降、 數據丟失或數據盜竊的風險。有效的安全措施,如現代反病毒系統和防火墻,是專業 云解決方案的一部分,還有加密、安全認證機制和定期安全審計[61]。為了評估一個云 供應商的在線安全,必須能夠確鑿地證明其安全理念。他們必須披露誰可以訪問云數 據,有哪些控制措施,如何防止網絡犯罪,有哪些備份程序。一個專業的云服務提供 商必須能夠提供有效的保護,防止自然災害,如洪水、火災、風暴、盜竊、地震和搶 劫。數據的存儲和服務器的物理安全在這里起著關鍵作用。云服務提供商的財務信用 也必須得到澄清,比如在瑞士,云服務提供商的破產將導致從第一天起停止所有商業 活動。在這種情況下,對中小企業的應用程序和數據的訪問可能會被封鎖數周或數月。
(3) 云服務的兼容性:購買云服務的公司必須始終擁有在云中存儲或處理的數據 的所有權。這包括在更換云服務提供商的情況下,在合理的時間內將數據取出(遷移) 的權利。在遷移和云合同結束時,以前的供應商必須刪除其系統上的所有數據。在這 種情況下,需要注意合同的條款。
(4) 云服務的可擴展性:在選擇云服務供應商時,重要的是要考慮該供應商是否 能夠提供靈活的服務以滿足需求。隨著企業的成功和發展,對其 IT 基礎設施的要求, 也就是對云服務性能的要求變得更加苛刻。因此,重要的是要清楚云服務供應商能提 供什么容量和性能增值,在什么時間范圍內,以什么成本。只有提供可擴展服務的云 供應商才能持續滿足客戶需求。
(5) 云服務成本:此外,每個供應商選擇的云服務的價格也是不同的。例如,按 需計算的CPU實例的售價:華為云的最優預測區域價格低至2角/小時,而騰訊云的最優 預測區域售價則高至 9角/小時,是華為云的三倍,而另外一些售價則在 5角/小時與6 角/小時間之間波動。對于通用CPU,在華為云的最高區域價格還是很低,為2角/小時, 而阿里云、谷歌云和Azure則處于中間。
本系統只需要基礎設置服務即可,再綜合考慮以上標準在滿足功能、性能、安全的 前提。本系統選擇采用阿里云的ECS(Elastic Compute Service)服務。軟件、服務、升 級維護由系統開發人員負責。
4.5系統應用架構設計
本系統的開發語言為Java,WindoslO操作系統的PC機為本系統的開發平臺,使用 Idea 作為開發應用軟件, Mysql5.7 作為系統的后臺數據庫。使用 MVC(Model-View- Controller)模式實現應用功能。采用B/S模式實現了相同的代碼可以在不同的環境中 運行。
4.5.1應用展示層
這是與用戶交互的功能層級。對于B/S架構,展示層一般為瀏覽器頁面,對系統數 據進行前臺的展示。用戶可以使用鍵盤、鼠標等輸入設備與展示層進行交互工作。使 用者點擊了某個展示層的功能,瀏覽器會向服務器端發送請求,控制層對其請求進行 處理,最終將結果展示在展示層供用戶查看。
4.5.2應用控制層 為核心的功能,主要功能是對用戶的操作進行處理,如:對數據驗證、事務處理 和邏輯建立。是展示層與數據層的橋梁。
4.5.3應用數據層 數據庫查詢,更新,事務處理和存儲等操作,在數據層中實現對查詢結果返回。
數據層實現了對象和表的映射,關系表和對象通過數據庫實現了鏈接,數據層中主要 實現從Java對象到關系型數據庫Mysql的處理。。
4.6應用功能模塊設計
系統的詳細功能設計是系統開發中非常重要的一步,因為它設計了整個系統的每 個模塊的功能,并幫助開發人員了解系統的功能,以及確定設計的功能是否滿足用戶 的要求。根據需求設計,模塊基本功能設計如下:
首頁信息展示模塊:負責首頁的相關信息、通知、新聞進行展示。瀏覽該模塊不 需要登錄。
住房信息管理模塊:可以對住房信息進行查看、編輯等操作。
住戶信息管理模塊:可以對住戶信息進行查看、編輯等操作。
維護工程管理模塊:可以對維護工程信息進行查看、編輯等操作。 系統管理模塊:分配賬號、管理賬號、日志管理、數據備份、系統恢復等操作。
4.6.1應用功能模塊總體設計
本系統主要的應用功能模塊有:首頁信息展示模塊、住房信息管理模塊、住戶信息
管理模塊、維護工程管理模塊、系統管理模塊等。具體功能模塊如圖 4.9 所示。
從圖中我們可知系統管理員可以使用的具體模塊有:首頁信息展示模塊、登錄模塊、
系統管理模塊。而系統操作員可以使用的模塊有:首頁信息展示模塊、登錄模塊、住 房信息模塊、住戶信息模塊、維護工程模塊、工程款項模塊。
4.6.2首頁信息展示模塊
首頁信息展示模塊主要功能是展示門戶信息,如:本系統消息、房地產信息、數 據統計等匯總信息展示平臺。并且在右上角有登錄按鈕,可以跳轉到登錄頁面。
4.6.3住房信息管理模塊
通過住房信息管理模塊,可檢索房屋的信息,展示如:住房編號、住房類型、住 房區域、住房街道、小區名字、樓層、朝向、備注、狀態等與住房相關的信息。并且 與住戶信息、維護工程信息相關聯。
用戶可以在住房信息管理模塊中查看并添加住房信息,或者對住放信息進行修改。
4.6.4住戶信息管理模塊
住戶信息模塊主要展示住戶編碼、戶籍、聯系電話、郵箱等信息。該模塊與住房 信息聯動,可以通過住房信息了解住戶屬于哪一棟、哪一層等。
用戶可以在住戶信息管理模塊中查看并添加住戶信息,或者對住戶信息進行修改。
4.6.5維護工程管理模塊
考慮到房地產管理是一個持續性的工作。后期設計到維護、改建、維修等業務需 求。用戶可以通過工程管理模塊來對小區的建設維護工程進行管理,比如:屋外觀翻 新、外墻翻新、維修等。該模塊可以展示的信息有:工程編碼、工程名、相關公司、 進度、工期、工程狀態等信息。同時,在本模塊中可以對社區相關維護工程的進度及 其維護工程款項進行管理。工程款項的信息有:款項編碼、總款項、已支付款項等。
通過維護工程信息可以查詢到具體哪一棟在進行維護,從而通知相關住戶,方便 工作人員管理。
工程管理包括了工程項目進度管理,樓盤信息管理,房地產位置信息等。
4.6.6系統管理模塊
系統維護模塊由權限管理、系統操作日志以及數據備份管理組成。系統管理模塊 只能內部工作人員登錄。
主要功能有:日志維護、系統恢復、數據備份恢復等。
4.7數據庫設計
數據庫技術是一種有效管理信息資源的技術工具,它基于對特定應用領域的詳細 分析和深入了解,并構建相應的最佳數據庫模式,使應用程序能夠有效運行。例如, 它查詢、插入、存儲和刪除記錄以滿足用戶的信息需求。本部分將介紹房地產信息管 理系統的數據庫設計。
4.7.1數據庫設計原則
由于數據庫設計對系統的穩定運行和后期維護起著重要作用,因此在進行設計之 前,有必要分析一下數據庫設計的原則。數據庫的設計原則有很多,這里只介紹兩個。
(1) 標準化的名稱既能夠反映信息系統專業化和可讀性,也有助于用戶的掌握。
(2) 數據類型在數據庫特性和數據庫系統規模等方面都起著關鍵性影響。使用數 據類型的基本準則就是選取最大范圍的正確的數據類型定義,但開發人員也必須認真 考慮數據類型的正確定義大小,越大的不一定好。
4.7.2數據庫需求分析
根據需求具體情況,本文對數據庫進行了詳盡的設計。從需求以及應用功能模塊可 知,本系統數據庫表結構主要有首頁信息表、小區信息表、住房信息表、住戶信息表、 維護工程信息表、工程款項信息表以及登錄所需要的用戶表。數據表結構如下:
首頁信息表:數據名稱、數據值、數據日期、數據類型、相關描述。 小區信息表:小區編號、小區名字、小區類型、小區省份、所在城市、區域位置、 一級區域、二級區域、街道、備注等信息。
住房信息表:住房編號、住房類型、住房省份、住房所在城市、住房區域位置、樓 層、朝向、備注等信息。
住戶信息表:住戶信息編碼、住戶國籍、住戶證件類型、證件編碼、住戶電話、住 戶郵箱。
維護工程信息表:工程編碼、工程名稱、施工公司名稱、工程總進度、工程當前進 度、施工工期、施工開始日期、施工結束日期等。
工程款項:款項編碼、總款項、已支付款項、總分期、當前分期數。
系統用戶表:用戶ID、用戶姓名、用戶類型、電話號碼、用戶角色、用戶郵箱、 用戶狀態。
4.7.3數據庫表設計與創建
按照產品已經設計完成的業務邏輯模式,設計具體的數據庫對象表結構的文檔。 創造出物理數據模型,創建表格結構,編寫所需字段的屬性,設定主鍵與外鍵,并設 定各種表間的連接[62]。
首先,在Mysql創建名為ESTATE_INFO_MANAG_SYS的數據庫。
首頁信息展示表如圖4.10所示。主要記錄了首頁展示的相關數據信息,具體字段有: 數據名稱、數據值、數據日期、數據類型、相關描述。其中類型可以定義不同的類型 數據,比如柱狀圖、折線圖以便可以分類展示。
匪 home page show
IS ID /*唯一標識7 varchar(IOO)
IS DATA NAME /* 數據名稱 */ varchar(200)
li CURRENT VALUE /* 當前數據值 varchar(IOO)
IS DATE /*數據日期7 date
IS DATA TYPE /*數據類型:1展示頁面;2系統信息;3系統消息' int(11)
IS VALUE DESC /* 數據描述 */ varchar(200)
圖 4.10 首頁信息表
Fig. 4.10 Home Page Information Sheet
小區信息表如所示。其主要字段有小區編號、小區類型、小區省份、所在城市、區 域位置備注等信息。
H communityjnfo
IS ID /*唯一標識7 varchar(IOO)
11 COMMUNITY CODE /* 小區編號 */ varchar(200)
IS COMMUNITY NAME /* 小區名字 */varchar(200)
IS COMMUNITY TYPE /* 小區類型 7 varchar(IOO)
IS PROVINCE /* 省份 */ varchar(200)
11 CITY /* 城市 */ varchar(200)
IS AREA /* 區域 7 varchar(200)
IS SUB 1 AREA 廣 1 級區域 */ varchar(200)
IS SUB 2 AREA /* 2級區域 7 varchar(200)
IS STREET /* 街道 7 varchar(200)
IS REMARKS /* 備注 */ varchar(200)
IS DATA STATUS /* 數據狀態 */ varchar(200)
圖 4.11 小區信息表
Fig. 4.11 Community Information Sheet
住房信息表如圖 4.12 所示。主要字段有:住房編號、住房類型、住房省份、住房 所在城市、住房區域位置、樓層、朝向、備注等信息。
S apartment info
IS id /*唯一標識7 varchar(100)
IS APARTMENT CODE /* 住房編號 */ varchar(200)
IS APARTMENT TYPE /* 住房類型 */ varchar(100)
IS PROVINCE /* 彳擄省份 */ varchar(200)
IS CITY /*住房城市7 varchar(200)
IS AREA /*住房區域7 varchar(200)
IS SUB 1 AREA /*住房1級區域*/ varchar(200)
IS SUB 2 AREA /*住房2級區域*/ varchar(200)
IS STREET /* 街道 */ varchar(200)
IS SUBDIVISION NAME /* 小區名字 */ varchar(200)
IS DISTRICT NO /* 小區內標識 */ varchar(200)
IS FLOOR /* 樓層 */ varchar(200)
IS FACING /* 朝向 */ varchar(200)
IS REMARKS /* 備注 7 varchar(200)
IS APARTMENT STATUS /* 住房狀態 */varchar(200)
IS DATA STATUS /* 數據狀態 */ varchar(200)
圖4. 12住房信息表
Fig. 4.12 Apartment Information Sheet
其中 COMMUNITY_APARTMENT_REL 為小區信息表與住房信息表關系,如圖 4.13所示由小區住房關系表維護一對多的數據,其中COMMUNITY_CODE是小區編號 且具有唯一性,APARTMENT_CODE為住房編號。
K community_apartment_rel
IS ID /* 唯一標識 */ varchar(IOO)
11 COMMUNITY CODE 嚴小區編號 */varchar(200)
APARTMENT CODE /* 房屋編號 */ varchar(200)
IS DATA STATUS /* 數據狀態 7 varchar(200)
圖 4.13 小區住房關系表
Fig. 4.13 Community Apartment Relationship Sheet
住戶信息表如圖 4.14 所示。主要字段有:住戶信息編碼、住戶國籍、住戶證件類 型、證件編碼、住戶電話、住戶郵箱。
H household info
I 田 ID/* 唯一標識*/ varchar(IOO)
VS HOUSE HOLD CODE /"護信息編碼 J varchar(200)
IS COUNTRY /* 住戶國籍 */ varchar(100)
VS CERTIFICATE TYPE /* 住戶證件類型 */ varchar(200)
IS CERTIFICATE CODE /* 證件編碼 */ varchar(200)
IS HOLDER PHONE /* 住戶電話 7 varchar(200)
15 HOLDER MAIL /* 住戶郵箱 */ varchar(200)
圖 4.14 住戶信息表
Fig. 4.14 Household Information Sheet
其中 APARTMENT_HOUSEHOLD_REL 為住戶住房關系表,如圖 4.15 所示住戶與 住房 為多對多 的關系, 因為同一 住戶可能 在 同一小區有多 套住房。 其中 APARTMENT_CODE 為住房編號,HOUSE_HOLD_CODE 為住戶編號。
S apartment_household_rel
IS ID /* 唯一標識 */ varchar(100)
IS APARTMENT CODE /* 房屋編號 */ varchar(200)
IS HOUSE HOLD CODE /* 住戶編號 */varchar(200)
11 DATA STATUS /* 數據狀態 7 varchar(200)
圖 4.15 住戶住房關系表
Fig. 4.15 Apartment Household Relationship Sheet
維護工程信息表如圖 4.16 所示。其主要字段有:工程編碼、工程名稱、施工公司 名稱、工程總進度、工程當前進度、施工工期、施工開始日期、施工結束日期等。
務 project manage info
11 ID /* 唯一標識 7 varchar(100)
IS PROJECT CODE /* 工程編碼 */ varchar(200)
IS PROJECT NAME /* 工程名字 */ varchar(100)
IS PROJECT COMPANY /* 工程公司名字 */varchar(200)
IS PROJECT ALL STAGE /* 工程總進度 */
IS PROJECT STAGE /*工程當前進度*/
11 PROJECT TIME /* 施工工M月 7
IS PROJECT END DATE /* 工程結束日期 */ date
IS PROJECT START DATE /* 工程開始日期 */ date
IS PROJECT STATUS /* 小區名字 */
IS REMARKS /* 小區內標識 */ varchar(200)
圖 4.16 維護工程信息表
Fig. 4.16 Maintenance Project Information Sheet
其中 COMMUNITY_PROJECT_REL 為小區信息表與維護工程信息表之間的關系表, 如圖 4.17 所示由小區維護工程關系表維護一對多的數據,其中 COMMUNITY_CODE 是小區編號具有唯一,PROJECT_CODE為維護工程編號。
9 community_praect_rel
IS ID /* 唯一標識 */ varchar(100)
IS COMMUNITY CODE /* 小區編號 7 varchar(200)
IS PROJECT CODE /* 維護工程編號 varchar(200)
IS DATA STATUS /* 數據狀態 */ varchar(200)
圖 4.17 小區維護工程關系表
Fig. 4.17 Community Project Relationship Sheet
工程款項信息表如圖 4.18 所示。其主要字段有:款項編碼、總款項、已支付款項、 總分期、當前分期數。
菇 project finance_info
IS ID /* 唯一標識 */ varchar(IOO)
IS FINANCE CODE /* 款項編碼 */ varchar(200)
IS TOTAL COUNT /* 總款項 7 varchar(100)
IS PAID COUNT /* 已經支付款項 */varchar(200)
IS TOTAL PAY STAGE /* 款項總分期 */ int(11)
IS NOW PAID STAGE /* 當前第幾期 */ int(11)
圖 4.18 工程款項信息表
Fig. 4.18 Project Finance Relationship Sheet
維護工程與款項維護表 PROJECT_MANAGE_FINANCE_RE 如圖 4.19 所示,該表 為一對多關系, PROJECT_CODE 維護工程編碼具有唯一屬性, FINANCE_CODE 為工 程款項編碼。
S project manage_finance rel
11 ID /* 唯一標識 */ varchar(100)
IS PROJECT CODE /* 維護工程編號 */ varchar(200)
IS FINANCE CODE /* 工程款項編號 */varchar(200)
IS DATA STATUS /* 數據狀態 7 varchar(200)
圖 4.19 維護工程與款項維護表
Fig. 4.19 Project Finance Information Sheet
系統用戶信息表如圖4.20所示。其主要字段有:用戶ID、用戶姓名、用戶類型、 電話號碼、用戶角色、用戶郵箱、用戶狀態。
Sx
H user info
IS ID /*唯一標識*/ varchar(IOO)
11 USER CODE /* 用戶ID */ varchar(200)
IS USER NAME /* 中文名字 */ varchar(IOO)
li USER TYPE /*用戶類型:1普通用戶;2系統管理員1 int(11)
IS PASSWORD /*加密后的密碼*/ varchar(200)
IS PHONE CALL /*用戶電話號碼*/ varchar(200)
IS USER ROLE /*用戶角色(不參與業務)* varchar(200)
11 USER MAIL /*用戶郵箱地址*/ varchar(200)
11 USER STATUS /* 用戶狀態 */ int(11)
li CREATE DATE /* 創建時間 */ date
圖 4.20 系統用戶信息表
Fig. 4.20 System user information table
4.8本章小結
本章主要介紹基于分布式云服務的房地產信息管理系統的總體架構設計。首先對分 布式架構進行了相應說明,并對其各個重要的組件進行了介紹。隨后講解了云服務的 使用方式、屬性及其區別,確定本項目使用阿里云的 ECS 服務。再后介紹了應用框架 的設計,并站在需求的方面羅列出所需應用功能模塊。最后根據模塊實現數據庫設計, 建立了對應的數據庫表結構。
第5章 系統的詳細設計與實現
本文將重點闡述房地產系統中各個模塊的實現,通過顯示系統主界面與子頁面之 間的輸入/輸出操作,達到系統設計和應用時的高互動性與易操作性。通過業務的需要 分類與細化設計,將該體系包括了住房管理、住戶管理、維護工程管理和系統管理這 四大模塊。以及 SpringCloud 各項輔助服務模塊的實現與云服務器的搭建。
5.1分布式架構的搭建
項目使用SpringBoot框架進行搭建,SpringBoot作為最基礎的框架是基石,任何微 服務都要從搭建一個Spring Boot項目開始。
利用SpringBoot能夠很簡單的生成單獨的應用,并且可以順利地"運行"它們。這其 中的原因是 SpringBoot 集成了 Spring 項目中一些較復雜的設置,同時還內置了各種必 要的服務,例如Tomcat,所以開發人員只需要簡單配置,既可以直接運行這些應用。 總之,使用Spring的基本思路依然不會改變,SpringBoot主要思路是讓開發人員能夠更 簡便而快捷的構建一個Spring項目[63]。
5.1.1 創建微服務父子工程
首選我們要搭建Spring Cloud項目父工程。選擇Idea的New Project并且選擇Maven 項目。
分別輸入項目GroupId、ArtifactId、Version信息。如圖5.1所示。
圖 5.1 父工程信息
Fig. 5.1 Parent Project Information
新建項目完成后,添加pom.xml加入依賴。如圖5.2與圖5.3所示。
v!■■統 管理jar■包版本一〉
<properttes>
<maven? compile「? source>8</maven.compiler? source>
<maven.compiler.target>8</maven.compiler.target>
<project ?b ulld?sourceEncodi.ng>UTF-8</project .build .sourceEncodlng〉 <junit.version>4.12</j unit.version>
<lombok.verston>l.18 ?10</lombok.version>
vlog4j ?verston>1?2?17</log4j ?verston>
<mysql.version>5.1.47</mysql.version>
<druid? verston>l?1?16</druid? version〉
<mybatis.sprtng.boot.verston>1.3.@v/mybatis.spring.boot.version> </properttes>
<!-- 了模塊繼承之后,捉供作川:鎖定版本+/module不川寫groupld和version—a <dependencyManagement><!一定義規范,但不導入一>
<dependencies>
<dependency>
<groupld>org? apache? maven ? plugins</groupld> <artifactld>maven-project-info-repo「ts-pluginv/artifactld> <verston>3.0.0</version>
</dependency>
<!??spring boot 2?2?2-->
<dependency>
<groupld>org.springf ramework.boot</groupld> <arttfactld>sprtng-boot-dependenctes</arttfactld> <verston>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</depe nderi cy>
<!--spring cloud Hoxton?SR1-->
<dependency>
<groupld>org.springframework.cloud</groupld> <arttfactld>spring-cloud-dependenctes</artifactld> <verston>Hoxton.SRl</version>
<type>pom</type> <scope>import</scope>
</dependency>
<!—spring cloud 阿里巴巴一a
<dependency>
<groupld>com?alibaba?cloud</groupIdA <artifactld>spring?cloud?allbaba?dependencies</artifactld> <verston>2.1.0.RELEASE</verston>
<type>pom</type> <scope>import</scope>
</dependency>
圖5.2父工程依賴一
Fig. 5.2 Parent Project Dependency part 1
<!--mysql-->
<dependency>
<groupld>mysql</groupld>
<artifactld>mysql-connectotifactld〉
<verston>${mysql?verston}v/verslon>
<scope>「untime</scope>
</dependency>
<!-- druid??>
<dependency>
<groupld>com.alibaba</groupld>
<artifactld>druid</artifactld>
<version>${drutd.verston}</v€rsion>
</dependency> v!■-mybatls■-> <dependency>
<groupld>org.mybatis.spring.boot</groupld>
<arttfactld>mybatis-sprtng-boot-starter</arttfactld> <version>${mybatis ? spring.boot.version}</version> </dependency>
<!--juntt—>
<dependency>
<groupld>juntt</groupld>
<artifactld>junit</artifactld>
<verston>${junit ?verston}</version>
</dependency>
<!--Iog4j 一>
<dependency>
<groupld>log4j</groupld>
<arttfactld>log4j</artlfactld>
<verstonA${log4j ? verston}</version> </dependency>
</dependencles>
</dependencyManageme
<!—熱啟動插件一〉
<build>
<plugtns>
<plugtn>
<groupld>org.springframework.boot</groupld>
<artifactId>spring-boot-maven-plugtn</artifactld> <ve rs ion>2.5.6</ve rs ion>
<conftguration>
<fork>true</fork>
<addResources>true</addResources>
</conftguration>
</plugtn>
</plugtns>
圖 5.3 父工程依賴二
Fig. 5.3 Parent Project Dependency part 2
通過 Maven 工具刷新 Maven 項目,保證依賴包已經成功下載。
5.1.2搭建服務注冊中心 Eureka
新建Module子工程,如圖5. 4所示。Parent工程選擇上一部創建的父工程。
Edit File Templates...
Swing Ul Designer 0 EditorConfig File 弗I Resource Bundle oa XML Configuration File E Diagram G Google Guice
三 Data Source O DDL Data Source
Data Source from URL
fir Data Source from Path 莖 Data Source in Path
Driver and Data Source
Driver
HTTP Request
RESTful Web Service
RESTful Web Service Client
圖 5.4 新建子服務 Eurka 服務注冊中心
Fig. 5.4 Registry New Eurka service
新建完成后,引入Pom依賴。如圖5.5所示。
<dependencies>
<!--eureka-server -->
<dependency〉
<groupld>org.springframework.cloudv/groupIdA
<artifactld>spring-cloud-starter-netflix-eureka-serverv/artifactld>
</dependency>
<!一spring boot -->
<dependency>
<groupld>org.springframework.boot</groupld>
<artifactld>sprtng-boot-sta「te「-web</artifactld>
</dependency〉
V--熱部署--〉
<dependencyA
<groupld>org ? springframework.bootv/groupld>
<artifactld>sprt ng-boot-devtoolsv/ar ti.factld> </dependency>
</dependencies>
圖5. 5 Eureka依賴配置
Fig. 5.5 Eureka Dependency Configuration
新增 application.yml 配置。如圖 5.6 所示。
server:
port: 8888
spring:
applicatton:
name: springcloud-eureka-server
eureka:
instance:
hostname: localhost
citent:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka?instanee + hostname}:${server?port}/€u「eka/
圖 5.6 Eureka 的 application.yml 配置
Fig. 5.6 Eureka's application.yml configuration
在Java包下新建啟動類EstateInfoSysEurekaService,代碼如圖5. 7所示。
package main.java;
import o「g?springframework.boot?SprtngAppllcation;
import org.springframework.boot.autoeonfigure.SpringBocrtApplication;
import org.springframework.cloud.netfIix•已ureka.server?EnableEurekaServer;
(SSpringBootApplication
@EnableEurekaServer
public class EstatelnfoSysEurekaService {
public static void main(Strlng[] args) {
圖 5.7 新建啟動類 EstateInfoSysEurekaService
Fig. 5.7 Create a new startup class EstateInfoSysEurekaService
到此注冊中心已經搭建完畢,可以啟動測試。可見如圖 5.8 所示,本工程注冊中 心已經啟動完畢,端口號 8888。
圖 5.8 注冊中心控制臺打印
Fig. 5.8 Registration Center Console Printing
在瀏覽器輸入http://loca山ost:8888/后,可以進入注冊中心信息頁面。如圖5. 9所 示。
圖 5.9 注冊中心信息頁面
Fig. 5.9 Registration Center Information Page
至此Eureka已經配置并且啟動完畢。
5.1.3搭建網關服務 GateWay
與注冊中心步驟類似,首先創建 moudle 子項目,并且設置 maven 依賴包。如圖
5.10 與圖 5.11 所示。
<dependencie5>
vdependencyA
<groupld>org.sprtngframework.boot</groupld>
<artifactld>spring-boot-starter</artifactld>
</depende ncy:>
</—網關核心依賴—>
<dependency>
vgroupld>org? springframework.cloudv/groupld>
<arti.factld>spring-cloud-starte r?gatew6yv/6「tifactld〉 </dependency>
<!—自定義Redls工具包一>
<dependency>
<groupld>com.yxh,www</groupld>
vartl f actld>redi.s-spri ng-boot-starter</a rt ifac tld>
</dependency>
<!―授權中心實體依賴—>
<dependency>
<groupld>com.yxh.www</groupld>
<arttf ac tIdAautho「-5e「ver'-dofnaln</a「tifac tldA
</dependency>
— Eureka客戶端依賴 —>
<dependency>
<groupld>org .springframework ?cloud</groupld:>
<artlfactld>sp「ing-cloud-starter-netflix-eureka-client</artifactld> </dependency>
<!-- Nacos配置中心依賴-->
<dependency>
<groupld>com.alibaba? clouck/groupIdA
<artifactld>spring-cloud-starter-alibaba-nacos-conf[gv/artifactld〉 </dependency>
<!--統_工具包-->
<dependency>
vgroupld>com.yxh ?www</groupld> <arttfactld>comnion-util.</artifactlcl> </dependencyn
<!--模板框架―>
<dependency>
<groupld>org? projectlombokv/groupld〉
<arti.f actld>lombok</artifactld>
</dependency>
<!--阿里FastJson -->
<dependency>
<groupld>com.allbaba</groupld>
<arttfactld>fastj son</arttfactld>
</dependency>
圖 5.10 GateWay 網關服務依賴一
Fig. 5.10 GateWay Gateway Service Dependencies Part 1
v!— MyBattsPlus基礎依賴(常用工具)—a
<dependency>
<groupld>com? baomidou</groupld>
<art if actld>mybat is-plus-ex te nsiox/artifactld〉 </dependency>
</— 令牌桶Bucket4j限流依賴-->
<dependencyA
<groupld>com? github? vladimir-bukhtoyarovv/groupld>
<artifactld>bucket4j-core</arttfactld> </depende ncy;>
<!-- Spring fox Swagger2 --> <dependency>
<groupld>to? sprtngfox</groupld>
<artifactld>sprlngfox-swagger2</arttfactld> </dependency>
<!--<dependency>
<groupld>com.github.xiaoymin</groupld>
<artifactld>swagger-bootstrap-ui</artifactld> </dependency>―> v!― Swagger增強UI ―>
<dependency>
<groupld>com? github.xiaoymtn</groupld>
<artifactld>knlfe4j-spring-boot-starterv/artlfactId〉
<version>${knlfe4j-sprlng-boot-staverston}</version> </dependency>
<dependency>
<groupld>io.springfox</groupld>
<artifactld>sp「lngfox?swagger-ulv/artifactld> </dependency> <dependency〉
<groupld>org? springframework.bootv/groupIdA
<artifactldAsprlng-boot-starter-testv/artifactldA
<scope>teste/scope>
vexclusi oris〉
<exclusion>
<groupld>org.junit.vintagev/groupld> <arttfactld>junit-vintage-engine</artifactld> </exclustonA
</exclusions>
</dependency〉
</dependencies>
圖 5.11 GateWay 網關服務依賴二
Fig. 5.11 GateWay Gateway Service Dependencies Part 2
圖 5.12 展示了新增網關的 application 文件配置。
sprtng.profties.active=dev
#應用血
spring.application.name=gateway-se rver
######*網關配置mm
#小寫的Serviced)支持
spring.cloud.gateway?discovery.locatorAower-case-servlce-id=true
#開啟對注冊中心所有服務的請求代理轉發
spring.cloud.gateway.discovery.locator.enabled=true
#Eureka配置使用工P注冊
eureka.instance.prefer-lp-addres s=true
########## Nacos配置中心配置 ##############
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.namespace=${spring.profties.active}
spring.cloud.nacos.config.g r o u p=GATEWAY_SE RVER
spring.cloud.nacos.config * prefix=${sprlng.application.name}
spring.cloud.nacos.config.file-extenston=propertles
#日志級別
logging.Level.org.springframework.cloud.gateway=debug
logging.level.org.springframework.http.server.reactive=debug
logging.level.org.springframework.web.reactive=debug
logging.level.reactor.ipc.netty=debug
logging.level.com.alibaba.nacos.client=WARN
#Togn校驗忽略諸求
system.request.tgr» ore-token.urls=/author-server/smUser/authorSmUser’/author-server/smApp/authorSmApp
圖 5.12 網關 application.yml 配置
Fig. 5.12 Gateway configuration
啟動類配置如圖 5.13所示:
@EnableDtscoveryCllent
(QSpringBootApplicatlonC )
public class GatewaySerwerApplicatlon {
public static void mai.n( String [ ] args) {
SpringApplicatlon ? i~un( GatewaySe「ve「Application ? class, args );
圖5. 13網關啟動類
Fig. 5.13 Gateway startup class
至此,本項目 Gateway 網關的服務配置完成。
5.1.4搭建配置管理服務 Nacos
Nacos只需要在服務器下載、啟動、配置即可,不需要其他多余的代碼開發。
從官網下載穩定的包,放在服務器指定文件夾下。
運行指令如圖 5.14 所示。
unzip nacos-server-$version.zip
圖 5.14 解壓 Nacos 包命令
Fig. 5.14 Unpacking Nacos package commands
解壓 Nacos。
如下圖 5.15 所示,其中最后的命令 standalone 意思是單機運行,并非集群模式。
sh startup.sh 一川 standalone
圖 5.15 啟動 Nacos 命令
Fig. 5.1 System
如果操作系統版本是 Ubuntu 或者執行腳本彈出“符號找不到”錯誤,可嘗試如圖
5.16 所示命令。
bash startup.sh -m standalone
圖 5.16 Ubuntu 啟動 Nacos 命令
Fig. 5.16 Start Nacos command
完成服務啟動即可。
5.1.5編寫數據緩存與其工具類
雖然 Mysql 也有相應的緩存功能,但是條件較為苛刻,不太適合當前環境。本系
統使用Redis做Mybatis的緩存,該方案成熟,管理簡單。
同樣的新建 module 子模塊,然后如圖 5.17 所示增加 maven 依賴。
<!-- Redls依賴 --a
<depende ncy:>
vgro upld>org. sprlngf r amew or k. boot</g ro upld:>
<artifactld>sprIng-boot-starter-data-redts</artifactld> </dependency>
<!—配置文件自動處理器依賴—>
<dependency>
<groupld>org ? sprlngframework? boot</groupld>
var tifactld>sp r Ing-boot-autoconf i.g ur e-p rocwss or v/artlfactldA <optional>true</optional>
</dependency>
<dependency>
<groupld>com.alibaba ? cloud</groupld>
<artifac tl d>sp ring-cloud-star ter'-Bllbaba-nacos-conf i_gv/ar ti factld> <scope>provtded</scope>
</dependency>
<!-- 阿里的FastJson -->
<depende ncy:>
<groupld>com?alibabav/groupld>
<artlfactld>fastjsonv/artlfactld〉
<scope>provided</scope> </dependencyA
圖5. 17緩存依賴
Fig. 5.17 Cache dependencies
編寫Redis配置類,如圖5.18所示。
• • •
電 Bean
public RedisTemplate<String, Object> redi.sTemplate(RedisConnectlonFactory redisConnectionFactory) { //redts反序列化開啟fastJson反序列化的autoType不熬會發生錯誤
//ParserConfig,getGIobaIInstance().setAutoTypeSupport(true);
RedtsTemplate<String5 Object> template = new RedisTemplateof);
template.setConnectionFactory(redisConnectionFactory);
FastJsonRedtsSerial.tzer serializer = new FastJsonRedisSertaltzer(Object.class);
// vaIue值的序列化采用fastJsonRedisSertaI izer
template.setValueSerializerf serializer);
template. setHashValueSertal.tzer( serializer);
// k亡y的序列代采用StringRedisSeZaltzer
template.setKeySertalizer(new StrtngRedtsSertalizer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setConnectionFactory(redtsConnectionFactory);
template.afterPropert iesSet();
return template;
©Bean
public StringRedisTemplate stringRedtsTemplatefRedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
StringRedisTemplate template = new StringRedtsTemplatef); template.setConnectionFactory(redisConnectionFactory);
return template;
圖 5.18 Redis 配置類
Fig. 5.18 Redis Configuration Classes
編寫Redis處理對象的工具類,如圖5.19所示。方便后期開發。
public class RedisObjectUtil {
/**
★Object 數組轉List
*@param objects 對象數組
*(dpa ram <T> 泛型
★(^return List
*/
public static <T> Ltst<T> arrayObjectToList(Object[] objects)throws ClassCastExceptton{ return new ArrayList<T>(){{ for (Object t:objects){ if (null!=t) { add((T) t);
public static <T> List<T> listObjectToList(List<Object> objects)throws ClassCastException{
return new ArrayList<T>(){{
for (Object t:objects){
if (null!=t) {
add((T) t);
public static <T> Set<T> setObjectToSet(Set<Object> objects)throws ClassCastException{ return new HashSet<T>(){{
for (Object t:objects){
if (null!=t) { add((T) t);
圖 5.19 Redis 處理對象的工具類
Fig. 5.19 Redis tool classes for handling objects
編寫Redis基本的增刪改查操作類,方便后期維護。
操作類接口:
• • •
public interface BaseRedisServlce {
/**
★設置緩存有效時間0永久有效
*@param key key
*@param expire 有效時間單位-秒
*^return true:成功 false:失敗
*/
boolean setExpIre(St ring key, long expire)
/**
*獲取緩存剩余有效時間
*(dparam key Key
*(Qreturn -1代表未找到Key 0代表永久有效 */
long getExpIre(String key);
/**
*根據Key刪除緩存
*(dparam key key
*©return true 成功 false 失敗
*/
boolean remove(String key);
圖 5.20 Redis 操作接口類
Fig. 5.20 Redis Operations Interface Class
然后編寫相應的接口的操作類實現。如圖 5.21所示。
public class BaseRedisServicelmpl implements BaseRedisServtce {
^Autowired
protec ted RedisTemplate<5tring,0bject> redi.sTenipl.ate;
f**
*設置緩存有效時間0永久有效
*(dparam key key
*dparam expire 有效時間 単位-秒
*^return true:成功 fa I se:失敗
*/
^Override
public boolean setExpire(String key, long explre){
try {
redisTemplate.exptre(key, expire, TimeUnit.MILLISECONDS);
}catch (Exception e){
log.error("設置緩存失效時間失敗Key: 【{}】異常:{}",key,e.getMessage()) return false;
}
return true;
*獲取緩存剰余有效時間
*(dparam key Key
*©return -1代表未找到Key 0代表永久有效 */
©Override
public long getExptre(String key){
if (key!=null){
Long value=redisTemplate.getExpire(key); if (value!=null){
return value;
}else { log.warn( "Key: [{}]緩存未擊中...",key)
return -1;
,**
*根據Key刪除緩存
*(Sparam key key
*(^return true 成功 false 失敗
*/
(aOverride
public boolean remove(String key){ boolean result=false;
if (key!=null){
try { result=redisTemplate.delete(key);
}catch (Exception e){ log.error(HKey: [{}]緩存刪除失敗key,e.getMessage()) return false;
}
}
return resuIt;
}
圖 5.21 Redis 實現類
Fig. 5.21 Redis Implementation Classes
就此Redis的操作功能開發完成。
5.1.6分布式事務框架的整合
分布式事情架構Seata,是由阿里研發的一種用于微服務架構中的,效率高且易使 用的分布式事情架構。其完成分布式事務的方法也相當多,比較常用的方法包括了采 用XA協議層的2PC、3PC,采用業務層的TCC, AT模式以及廣泛應用于消息隊列與 消息表實現的最終一致性方法。
本框架采用AT模式進行事務管理。這是一個非入侵的分布式事務解決方案。用戶 可以只關注自己的業務功能,而不需要增加其他代碼邏輯專門維護事務,Seata可以自 動生成事務的兩個階段提交亦或者是回滾的操作。
下面開始在Linux系統上部署Seata服務。可以使用wget命令,如圖5.22所示, 下載Seata安裝包。
wget https://github.com/seata/seata/releases/download/vl.2.0/seata-servertar.gz
圖 5.22 下載 Seata 命令
Fig. 5.22 Download Seata command
下載完成后,對下載好的安裝包進行解壓操作。代碼如圖 5.23所示。
tar -zxvf seata-serveir-1 ?2?0?tar.gz
圖 5.23 解壓 Seata 安裝包
Fig. 5.23 Unzip the Seata installation package
通過cd命令進入Seata對應的配置文件目錄,并通過vim命令修改seata-server的 配置文件。如圖 5.24 所示。
cd home/tnstall/seata/conf vim file.conf
圖5.24進入目錄修改文件
Fig. 5.24 Go to the directory to modify the file
修改文件file.conf的內容如圖5.25所示。
## transaction log store, only used in seata-server store {
## store mode: fiZe, db
mode = "db"
## file store p廠operty
file {
## store location dir
dir = "sesstonStore"
#branch session size , if exceeded first try compress lockkey, stilI exceeded throws exceptions maxBranchSesslonSize = 16384
#globe session size , if exceeded throws exceptions
maxGlobalSessionSize = 512
#file buffer size , if exceeded allocate new buffer
fileWriteBufferCacheSize = 16384
#when recover batch read size
sessionReloadReadSize = 10®
#async, sync
flushDtskMode = async
## database store property
db {
## the implement of javax.sql.DataSource, such as DruidDataSourcefdruid)/BasicDataSource(dbcp) etc. datasource = "druid"
## mysql/oracle/postgresql/h2/oceanbase etc.
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
url 二"jdbc:mysql://xxxxxxxxxx:3306/seata"
user = "root"
password = "xxxxxxxx"
mlnConn = 5
maxConn = 30
globalTable = "global=table"
branchTable = "branch_table"
lockTable = "lock-table"
queryLimit = 100
maxWatt = 560©
}
圖 5.25 seata 的 file.conf 文件配置
Fig. 5.25 seata's file.conf file configuration
如圖 5.26 所示,繼續修改 registry.conf。
vim registry.toirif
圖 5.26 修改 registry.conf 文件配置命令
Fig. 5.26 Modify the registry.conf file configuration command
修改的 registry.conf 內容如圖 5.27 及圖 5.28 所示。
registry {
# file 、 nacos、eureka、redis-, zk、consul. etcd3. sofa type = "nacos"
nacos {
appliestion = "seata-server" serverAddr = "xxxxxxxx" namespace = "2aa0ad47-8dbl-44ed-8d58-176742e867ec" cluster = "default" username = "nacos" password = "nacos"
eureka {
serviceUrl = "http://localhost:8761/eureka" application = "default"
weight = T"
redis {
serverAddr = "localhost:6379"
db = 0
password =""
cluster = "default"
timeout = 0
zk {
cluster = "default"
serverAddr = "127.0.0.1:2181" sessionTimeout = 600© connectTimeout = 2000 use「name ="" password =""
consul {
cluster = "default"
serverAddr = "127.0.0.1:8500"
etcd3 {
cluster = "default" serverAddr = "http://localhost:2379"
圖 5.27 seata 的 registry.conf 文件配置一
Fig. 5.27 seata's registry.conf file configuration Part 1
sofa {
serverAddr = "xxxxxxx:95®3" application = "default" region = "DEFAULT.ZONE" datacenter = "DefaultDataCenter" cluster = "default"
group = "SEATA_GROUP" addressWattTime = "3000"
}
file {
name = "file?conf"
config {
# file、nacos、apo I to. z*、consuls etcd3
type = "nacos"
nacos {
serverAddr = "xxxxxxx"
namespace = "2aa0ad47-8dbl-44ed-8d58-176742e867ec" group = "SEATA-GROUP"
username = "nacos"
password = "nacos"
consul {
serverAddr = "127.0.0.1:8500"
apollo {
appld = "seata-server"
apolloMeta = "http://x.x.x.x:8801"
namespace = "application"
serverAddr = "127.0.0.1:2181"
sessionTtmeout = 6000
connectTimeout = 2000
username 二""
password =""
etcd3 {
serverAddr = "http://localhost:2379"
file {
name = "file.conf"
圖 5.28 seata 的 registry.conf 文件配置二
Fig. 5.28 seata's registry.conf file configuration Part 2
然后通過圖 5.29 方式初始化數據表。
The script used when s to reMode is 'db' --the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS
'xid'
'transact!on_Id'
'status'
'application_ld'
VARCHAR(128) NOT NULL, BIGINT,
TINYINT NOT NULL, VARCHAR(32),
'transaction_service_group' VARCHAR(32),
'transact!on_name'
'timeout'
'begin_ttme'
、application_data'
、gmt_create'
'gmt_modtfi已d'
PRIMARY KEY ('xid' ),
KEY 'idx_gmt_modified.
VARCHAR(128),
I NT,
BIGINT,
VARCHAR(2000)}
DATETIME,
DATETIME,
status' ('gmt_modified', 'status'),
KEY 'idxansaetion_id' ('transaetion_icT ) )ENGINE = InnoDB
DEFAULT CHARSET = utf8;
--the table to store BranchSession data create TABLE IF not EXISTS 'branch table'
BIGINT NOT NULL, VARCHAR( 128) NOT NULL, BIGINT,
'branch_id'
'xid'
'transaction_id' 'resource_group_id' VARCHAR(32),
'resource_td'
'branch_type'
'status'
'application_data'
'gmt=create'
'gmt.modified'
VARCHAR(256),
VARCHARf8),
TINYINT,
VARCHAR(64},
VARCHAR(2600),
DATETIME(6),
DATETIME(6},
PRIMARY KEY (' branch_i.d' ),
KEY 'idx_xtd' ('xid')
)ENGINE = InnoDB
DEFAULT CHARSET = utf8;
the table to store lock data
CREATE TABLE IF NOT EXISTS 'lock_table'
'row_key'
'xid'
'transaction_id'
vbranch_td'
'resource_tds
'table_name'
'Pk'
'gmt_create'
'gmt_modified' PRIMARY KEY ('
VARCHAR(128) NOT NULL,
VARCHAR(96),
BIGINT,
BIGINT NOT NULL,
VARCHAR(256),
VARCHARf32),
VARCHAR(36),
DATETIME,
DATETIME,
row_key'),
KEY 'tdx_branch_id' ('branch.id') )ENGINE = InnoDB
DEFAULT CHARSET = utf8;
圖 5.29 初始化 seata 數據表
Fig. 5.29 Initialize seata data sheet
初始化配置信息,如圖5.30所示,創建config.txt文件。
touch /home/install/seats/config?txt
圖 5.30 通過 touch 命令創建 config.txt 文件
Fig. 5.30 Use touch command to Create ‘config.txt' file
config.txt的文件內容如圖5.31與圖5.32所示。
transport ?type=TCP
transport ? server=NI0
transport ? heartbeat二true
transport ?enableClientBatchSendRequest=false
t r ansp ort ? thr eadFact ory ? bossTh r eadP ref i_x=Ne ttyBoss
transport ?threadFactory.workerThreadPreflx二NettyServerNIOWorker
transport ?threadFactory.serverExecutorThreadPrefIx-NettyServerBizHandler transport ?threadFactory,shareBossWorker=false
transport ?threadFactory.cllentSelecto「ThreadPrefix=NettyCllentSelector tr ansp ort ? threadFactory .clien tSelectorTh readSi_ze=l
tr ansp ort ? thr eadFact ory .cllentW orkerThr eadPref i.x=NettyClte ntWorke 門'hr ead transport ?threadFactory.bossThreadSize=l
tr ansp ort ? thr eadFactory .w or kerTh readSlze=defaii It
transport ? shutdown ?wait二3
# 修改成對應的服務組,如serv讓e.vgroupMapping.order_tx_group=default
#且應用端的事務組名稱必須為order_tx_group,否則分布式事務無法生效
service.vgroupMapping.my_test_tx_group二defanIt
service.enableDegrade=false
service ?di_sableGlobalT「mnsacti on=false
cite nt. rm. asy ncCommltBuffe「1_5譏=10@®。
client • 「ni? Iock? retrylnterval=10
cite nt. rm. lock ? ret ry Ti.mes=30
cite nt • nil. I ock ? retr yPolicyBra nchRollbackOnConf lie t=t「ue
client•rm.reportRetryCount=5
client.rm.tableMetaCheckEnable二false
client • nil. sqlParserType=druid
client.rm.reportSuccessEnBble=fBlse
citent.rm.sagaBranchRegtsterEnable二false
client.tm? commitRetryCount=5
client »tm? rollbackRetry5unt=5
圖 5.31 Sata 的 config.txt 內容一
Fig. 5.31 Sata's config.txt content Part 1
store.mode=ftie
store, f tie ? dir=f i_le_sto「e/data
5to「e.ftie?maxBranchSes5lonSize=16384
store.flie.maxGlobalSesslonSize=512
store.file? fileWriteBufferCacheSize=16384
store.ftie? flushDlskMode=async
store.ftie? sessionReloadR巳adStze=10®
store.db.dat aso ur ce=d rui_d
sto 「e ? db? dbType=mysql
store .db.dr iverClassName=coni .mysql ? jdbc ?D「i_ve「
store ?db.u「l二 jdbc :my5ql://192 ?168.4 ?28:33@6/seata?useUni_code二 true store ? db? user二root
store.db.password=123456
store.db.ni inCon n=5
store?db?maxConn=3®
5to「e?db? globalTable=global_table
sto「e?db? branchTable=branch_table
store?db? queryLimlt二10®
st oi^e ?db? I ockTable 二 lock _t able
store.db.maxWait=5000
server•recovery.committingRetryPeriod=10@©
server.recovery.asynCommittingRetryPeriod=1000
server? recovery.rollbackingReyPerlod二
server ? recovery ?tlmeoutRet「yPe「i_od=l@00
server ? maxCommitRet ryT imeout=-l
server.maxRollbackRetryT imeout二-1
server•rollbackRetryTimeoutUnlockEnable=false
client.undo?dataValtdation=true
clien t • und o. I ogSe「i_ali_za ti on=jacks on
server ? undo ?logSaveDays二7
server.undo.logDeletePertod=86400000
client ? undo ?logTable二undo_log
client.log?exceptlonRatw二10®
transport.serialization二seata
transport.compressor=none
met ri. cs.e nabled=false
metrics.regtstryType=compact
met「ics.exporterList=p「om巳theus
川己七廠 i_cs ? export erPromethmusPo rt=9898
圖 5.32 Sata 的 config.txt 內容二
Fig. 5.32 Sata's config.txt content Part 1
通過vim命令編輯seata的導入腳本nacos-config.sh。如圖5. 33所示。
• • •
vim /home/Inst all/nacos/bin/nacos-config. sh
圖 5.33 seata 導入腳本
Fig. 5.33 Seata import script
nacos-config.sh腳本內容如圖5.34及圖5.35所示。
#!/usr/bin/env bash
#Copyright 1999-2619 Seata. io Group.
#Licensed under the Apache License, Version 2.0 (the "License");
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at.
#http://www. apache, org/l icenses/LICENSE-2.0
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an "AS IS" BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#limitations under the License.
while getopts ":h;p;g:t:" opt
do
case $opt tn
h)
host斗OPTARG
P)''
port=$OPTARG
g)''
group=$OPTARG
tenant=$OPTARG
'echo " USAGE OPTION: $0 [-h host] [-p port] [-g group] [-t tenant]" exit 1
done
if [[ -z ${host} ]]; then
host=localhost
if [[ -z ${port} ]]; then
port=8848
if [[ -z ${group} ]]; then
group=,,SEATA_GROUP"
if [[ -z ${tenant} ]]; then
tenants"
圖 5.34 nacos-config.sh 腳本內容一
Fig. 5.34 nacos-config.sh script content Part 1
nacosAddr=$host:$port
conten tType="conten t-type:applit:a ■t'lon/json;charse"t=UTF-8"
echo "set nacosAddr=$nacosAddr"
echo "set group=$group"
fallCount=0
tempLog=$(mktemp -u)
function addConfig() {
curl -X POST -H "${1}" "http://$2/nacos/vl/cs/configs?datald=$3&group=$group&content=$4&tenant=$tenant >"${tempLog}" 2>/dev/nuII
if [[ -z $(cat "${tempLog}") ]]; then
echo " Please check the cluster status." extt 1
if [[ $(cat "${tempLog}") "true" 11; then
echo "Set $3=$4 successfully "
else
echo "Set $3=$4 failure "
((fatlCount++ ))
count=0
for line in $(cat $(dirname "|PWD")/config.txt | sed s/[[:space:]]//g); do
((count++ )}
key=${line%%=*}
value=${Hne#*=7
addConftg "${contentType}" "${nacosAddr}" "${key}" "${value}"
done
echo "================================="
echo " Complete initialization parameters, total-count:$count , failure-count:$failCount
if [[ ${fallCount} -eq 0 ]]; then
echo " Intt nacos config finished, please start seata-server." else
echo " intt nacos config fail."
ft
圖 5.35 nacos-config.sh 腳本內容二
Fig. 5.35 nacos-config.sh script content Part 2
如圖 5.36 所示,給腳本賦予執行權
chmod +x /home/Inst all/mac os/bin/nacos-config ?5h
圖 5.36 nacos 腳本賦權
Fig. 5.36 nacos Script Empowerment
如圖 5.37 所示,執行腳本。
• • •
sh /home/install/nacos/bin/nacos-conf ig ? sh
圖 5.37 執行 nacos 腳本命令
Fig. 5.37 Execute the nacos script command
如圖 5.38 所示,啟動命令
nohup sh /home/install/seata/btn/seata-se『甘Ef.sh >log.out 2>1 &
圖 5.38 啟動 seata 服務命令
Fig. 5.38 Start seata service command
至此分布式事務框架seata服務的搭建工作得以完成。
5.2應用服務的實現
5.2.1 首頁信息頁面實現
首頁信息主要是展示門戶信息,關于本系統消息、房地產信息、數據統計等匯總 信息展示平臺。并且在右上角有登錄按鈕,可以跳轉到登錄頁面。
所以,首頁可以分為兩個部分。在首頁可以看到門戶的自定義的展示頁面、系統 信息、系統消息、消息通知、指標圖等信息。
在系統開發過程中,門戶展示信息接口如圖 5.39 所示。
首更更面展示接口
public interfa匚已 HomePageServcie { ff展示英篋慮性裟口
List<HomePageShowDto> newsShow()-
"展示年乘統信息接口
Lis t<HomePa geSh owOt o> systemInfoShow(); 口展示乘統淆息逋猟椎送
List<HomePageShowDto> tnformattonShow() f?展示各類屢標推送
List<Object> graphShow();
圖5.39首頁頁面展示接口
Fig. 5.39 Home page display interface
在頁面右上角可以點擊用戶登錄,跳入登錄頁面。
在登陸頁面,當用戶輸入用戶名時系統會提示該用戶名是否可以使用。如果無法 使用需要注冊,會彈出注冊提示。如果賬號存在,用戶可以繼續輸入密碼進行登錄操 作。如果多次登錄未成功,會提示找回密碼。用戶最終密碼輸入正確,那么系統也會 提示登錄成功。登錄流程見圖 5.40。
圖 5.40 登錄流程圖
Fig. 5.40 Login flow chart
以上登錄流程需要通過以下接口進行實現,具體代碼如圖 5.41所示。
"用戶登錄功能樓口
public Interface UserLogirServtee {
"遺過用戶冬驗征是否注無
Boolean isUserEx1st(String userCode)-
"逋過用戶、廡戶這息找回用戶
SmUser findUser(5inUser userBean, SmAccount accountBean};
"用戶登最
Boolean userLoginfString usertode , String passwordl;
"恩戶創建
Boolean creatUse「{String usertode , String password);
圖5.41登錄流程接口
Fig. 5.41 Login process interface
登錄頁面如圖 5.42 所示。
圖 5.42 系統登錄頁面
Fig. 5.42 System Login Page
在登陸成功后如圖 5.43 所示,展示系統相關匯總信息。本系統可以將現有的住房、 住戶、維護工程、工程款項等數據進行篩選、處理、計算實現需要的頁面展示,同時 在首頁有折線圖、柱狀圖、排名等功能展示。
圖 5.43 首頁信息展示
Fig. 5.43 Homepage Information Display
第一部分指標趨勢圖可以展示重要指標的歷史趨勢圖,該圖可以了解近期指標的 發展近況,幫助工作人員分析數據完善工作。用戶可以選擇日期、地區以及關鍵字等 篩選條件進行精確查找。 當前展示的信息有住房信息新增量、新增量以及當前區域范 圍的新增排名。
第二部分指標看板為主要指標展示,并且繪制對應環比曲線圖。用戶可以通過區 域、時間進行篩選對應的數據。當前展示的信息有住房空置率、住房出租量、自住出 租比等數據。
第三部分指標排名,各個指標在不同小區之間的排名。用戶可以通過日期、指標 名稱進行篩選。當前展示的信息有工程開銷排名、新增住戶排名等。
5.2.2住房信息管理模塊 住房信息管理模塊,可以分為兩大功能。其一,是對本身的住房及相關信息的檢 索、記錄、更改、撤銷等操作。其中查詢支持多條件、多維度篩選。 提高用戶的篩選 效率以及精確性。
創建住房信息對象如圖 5.44代碼所示。
"住房信息
public class Apartmentlnfo {
"住房編號
private String apartmentcode;
"住房類型
prtvate String apartmentType;
"住房省檢
private String province;
打住房城審
private String city;
打住房區域
prtvate String area;
"住房下級區域
private String sublArea;
"住房帀下級區域
private String sub2Area;
"住房街道
private String street;
"小區名稱
private String subdivisionName;
"小區內標識 private String districtNO;
〃樓層
private String floor;
"房屋戟向
private String facing;
"備注
private String remarks;
?f住房狀態
private Integer apartmentStatus;
"數據狀態
private Integer dataStatus;
圖 5.44 住房信息類
Fig. 5.44 Housing information category
在錄入的時候需要填入以上信息,方便存儲、統計、篩選。住房信息系統的檢 索、記錄、調整、撤銷等功能也需要上述房屋信息。
編寫住房信息相關功能如圖 5.45 接口。
"房屋信息養口
public interface ApartmentlnfoServlce {
〃新增房屋信息
Integer addApartmentInfo(Apartmentlnfo apartmentlnfo); "更新房屋信息
Integer updateApartmentlnfo(Apartmentinfo apartmentlnfo); //通過:條件查詢房屋
Integer searchApartment(ApartmentInfo apartmentinfo); 〃通過apart®血刪除對應房屋
Integer delete(Strtng apartCode);
圖5.45房屋信息接口
Fig. 5.45 Housing Information Interface
如果是需要增加或者修改信息,工作人員需要輸入盡可能全面的 ApartmentInfo 的 信息,以方便時候進行統計查詢篩選。
其二是住房信息管理模塊與其他模塊的關聯查看。可以通過住房查看其有關聯的 住戶信息以及其工程管理信息。要實現上述功能,需要通過 apartCode 進行關聯查詢, 需要實現的接口如圖 5.46 所示。
〃房屋關聯信息査詢
public interface ApartlnfoAssociatService {
//通過住房的相關信息査詢到關聯的工程信息
List<ProjectManageInfo> getProjectByApart(Apartmentinfo apartmentinfo); //通過住房的相關信息査詢到關聯的住戶信息
List<HouseholdInfo> getHousehol.dByApart(ApartmentInfo apartmentinfo);
圖5.46房屋關聯信息查詢接口
Fig. 5.46 Housing related information query interface
因為同一個住房信息可能會擁有多條住戶信息或者多條工程相關信息。所以這里 返回的類型為List。這樣,工作人員可以通過上述接口獲得非常全面的數據信息,以方 便后期調研、維護、分析。
最終,住房信息列表展示如圖 5.47所示。
5.2.3住戶信息管理模塊
住戶信息模塊主要是存放房屋業主的個人信息,主要功能有增加住宅信息內容、 修改住宅信息內容、清除住宅信息內容、查詢篩選住戶信息以及通過住戶信息查詢對 應的住房信息。通過住戶信息可以了維護住戶財產安全、方便后期普查以及房屋維護。
創建住戶信息對象代碼如圖 5.48所示。
• • •
〃住戶信息
public class Householdinfo {
//住戶信息編碼 privat已 String houseHoldCode;
〃住戶國籍
privat已 String country;
//住戶證件類型
privat已 String certif已;
〃證件編碼
privat已 String certiflcateCod已;
〃住戶聯系電話 privat已 String holderPhone;
〃住戶郵箱
privat已 String holderMail;
圖5.48住戶信息類
Fig. 5.48 Household information
住戶信息相關功能與接口代碼如圖 5.49 所示。
//住戶信息服務
public interface HouseholdlnfoService {
//新增住戶信息
Integer addHouseholdlnfofHouseholdinfo householdinfo);
//更新住戶信息
Integer updateHouseholdInfo(Householdinfo householdinfo);
//通過條件住戶信息
List<HouseholdInfo> searchHouseholdlnfo(Householdinfo householdinfo)
//通過houseHo I dCode刪除對應住戶信息
Integer deleteHouseholdInfo(String houseHoldCode);
圖5.49住戶信息服務接口
Fig. 5.49 Household Information Service Interface
通過檢索條件可能查出多條符合的住戶信息,所以這里的searchHouseholdlnfo的返 回值類型為List< Householdinfo>可以實現各個條件的組合查詢以及模糊查詢。
住戶頁面效果如圖 5.50所示。
5.2.4維護工程管理模塊
該模塊主要功能有維護工程進度管理和款項管理模塊。維護工程進度管理模塊可 以幫助對工程進行管理以及控制。款項管理模塊可以幫助管理員計算維護工程的應付 款,其可以根據工程進度分批次給付,從而做到賬目的狀態可查、數目可查、流程可 查。幫助管理人員對其工程進度進行核查。
工程管理服務需要的工程類代碼如圖 5.51所示。
〃工程管理模塊
public class ProjectManageinfo {
〃王程編碼
private String projectcode;
"工程命名
private String projectName;
〃工程公司
privat亡 5tring projectcompany; "王程總進度
privat亡 Integer projectAllStege
//工程當前進度
private Integer projectStmge;
〃施王工期
private Integer projectTlm已;
〃工程開始日期
private Date projectEndDate;
//工程結束日期
privat亡 Date projectstartDdte;
〃工程狀態
privat亡 Integer projectStmtus;
"工程備注
private String remarks;
圖5.51工程管理模塊類
Fig. 5.51 Project management module class
其中該模塊有錄入、修改、刪除、查詢等功能。方便管理員對其進行檢索查詢。 了解目前工程狀態。
工程展示列表如圖 5.52 所示。
圖 5.52 工程列表
Fig. 5.52 Project List
工程管理服務主要功能接口如圖 5.53所示。
//工程管理應用服務
public interface ProjectManageService {
//新增工程信息
Integer addProjectManageInfo(ProjectManageInfo householdInfo);
//更新工程信息*
Integer updateProjectManageinfo(ProjectManagelnfo householdlnfo);
//通過條件篩選工程信息
List<ProjectManageInfo> searchProjectManagelnfo(ProjectManageInfo householdInfo)
//通過proj ect Code刪除對應工程信息
Integer deleteProjectManageInfo(String projectCode);
圖5.53工程管理應用服務接口
Fig. 5.53 Engineering Management Application Service Interface
除了上述編輯功能,在工程管理服務中還可以通過工程管理查看當前工程進度款
項給付情況,以及查詢是哪個住戶小區的工程。具體功能接口代碼如圖 5.54所示。
〃工程管理關聯應用服務
public interface ProjectAssociatServixe {
〃通過當前工程査詢對應所屬住房
List<ApartmentInfo> getApartByProject(ProjectManageinfo projectManagelnfo);
//通過當前工程査詢對應款項支付情況
List<ProjectFinancelnfo〉getFinanceByProject(ProjectManagelnfo projectManagelnfo);
圖5.54工程管理關聯接口
Fig. 5.54 Project Management Linkage Interface
同時在工程管理項目組,可以針對不同工程設置不同的工程款項管理方式。首先 我們需要建立工程款項管理對象,如圖 5.55所示設置其屬性。
〃工程款項
public class ProjectFinancelnfo {
〃款項編碼
private String financeCode;
"總款項
privat亡 String totalCount;
"已經支付款項
private String paidCount;
//款項總分期
privat亡 tng totalPayStage;
〃當前支付款項第幾期
private String nowPatdStage;
圖5. 55工程款項類
Fig. 5.55 Engineering
我們可以新增、修改、刪除、查詢工程款項內容,從而幫助管理員實時、快速、 方便的管理相關工程。相關接口如圖 5.56所示。
〃工程款項應用接口
public interface ProjectFinanceServixe {
〃新增工程款項信息
Integer addProjectFi.nance(ProjectFinancelnfo projectFinancelnfo);
//更新工程款項信息
Integer updateProjectFinance(ProjectFinancelnfo projectFinancelnfo);
//通過條件篩選工程款項信息
List<ProjectFinanceInfo> searchProjectFinance(ProjectFinanceInfo projectFinanceinfo)
〃通過f InanceCode刪除對應工程款項信息
Integer deleteProjectFinance(String financeCode);
圖5.56工程款項應用接口
Fig. 5.56 Engineering Application Interface
最終款項列表展示如圖5.57所示。
款頂列表
溜: S3中 • K3SS®: B模皇
I »5®5W5] ^w4>anai SWF I
B100000000001 xxxfeffi工翟 J 0.5 2 2022-01 -10
B100000000001 woes工翟 2 1 3 2022-01-10 刪徐
B10000000D001 工翟 3 i 2022-01 -10 TM
B100000000001 woes工翟 3.55 1 3 2022-01-10 刪徐
B100000000001 xxxfeffi工翟 3 4 2022-01 -10 t«
B100000000001 3 1 5 2022-01 -10 Tift
B10000000D001 工翟 3 6 2022-01 -10 TH
B100000000001 woes工翟 3 1 S 2022-01-10 刪徐
6100000000001 xxx®S工翟 3 - 2 2022-01-10
B100000000001 XXX曲工程 3 1 2 2022-01-10 刪徐
B100000000001 xxxfeffiiie 3 1 2 2022-01 -10 Ti*
B10000000D001 工程 3 JU w J 2022-01 -10 下錨
圖 5.57 款項列表
Fig. 5.57 List of items
5.2.5系統管理模塊
可以通過系統管理模塊的權限分配功能對不同用戶獨立分配不同的權限。同時也 能通過該模塊管理相關數據,如:備份、用戶日志下載以及系統初始化等操作。
備份功能可以設置備份時間,比如每天都定時備份。這樣即使系統被破壞,或者 被誤操作也能及時恢復,將損失降至最低。
用戶日志主要是對用戶登錄系統的時間、地點以及登陸后做的操作進行記錄,通 過操作日志可以查看檢測用戶的操作情況,從而檢測其操作是否符合規范,控制系統 風險。
系統初始化是對指定應用服務重啟,并對數據以及緩存進行初始化。此操作有數 據丟失風險,需謹慎使用。
該模塊同時也擁有管理權限可配置化,可以更改用戶的狀態對帳號進行鎖定。要 實現權限功能需要編寫用戶表,該表主要是記錄用戶數據,登錄信息、用戶狀態等工 作。具體實現類如圖 5.58所示。
public class Userlnfo 已xtends Model<UserInfo> {
〃用戶編碼 private String userCode;
〃用戶名 private String userName;
〃用戶名
private String userR已
〃手機號碼
private String userPhone;
"登錄密碼
private String LoginPass;
"用戶角色 private String userRole;
"舟戶頭橡
private String userPhoto;
//用戶郵箱 private String userMail;
〃用戶狀態 private String userStmtus;
//創建時間 private LocalDateTime createTime;
}
圖 5.58 系統管理類
Fig. 5.58 System Management Class
用戶服務功能主要有判定是否注冊、通過用戶賬戶信息找回用戶、用戶登錄、用 戶創建等。已經在首頁說明。
在系統管理模塊還有用戶操作日志、數據備份、初始化等功能。數據備份功能、 操作日志下載以及系統初始化恢復功能接口如圖 5.59所示。
〃系統功能接口
public interface SystemService {
"數據備份
void backUpData(String ftlePath
〃日志下載
void logDownload(String filePath);
〃系統挾復
void sysRecovery(Strlng psw);
圖5.59系統功能接口
Fig. 5.59 System Function Interface
調用數據備份接口時候,需要傳入要備份文件的地址,以便后期管理與維護。同理, 日志下載也需要指定文件地址。
在系統恢復時候,為了防止其他人員隨意恢復,造成系統核心業務數據丟失,以及 影響他人使用。所以該功能需要設置特殊權限人員的密碼。一般用戶不具備使用該功 能權限。
5.3在云服務器上的部署
5.3.1 云服務器的配置
國內幾個專業的云服務提供商操作方式大致都是相似的,該項目使用阿里云服務。 所以下面的操作內容以阿里云為參考。
首先需要登錄阿里云網頁,登錄賬號后,進入選擇選購 ECS 實例頁面,按照參照 要求完成ECS服務的配置選購。配置的具體要求可以參見開發環境內容。
隨后進行連接ECS實例。
(1)回到并進入例子列表界面,以查找與本章對應的示范實例 EcsQuickStart。
(2)在右側菜單操作列表,找到并且單擊遠程連接。
(3) 這時候遠程連接與命令對話框會立即彈出,可以從彈出的對話框中可以選擇 遠程連接并登錄。
(4) 這時會彈出VNC密碼對話框,在彈出的對話框中單擊重置VNC密碼。
(5) 隨后按照要求完成密碼修改,最終在 VNC 密碼框中輸入修改后的密碼,然 后點擊確定按鈕。
( 6) 最終完成登錄憑證設置。
編輯完畢后,單擊進入實例,并在彈出的驗證窗口中輸入用戶名root,密碼輸 入所設定的密碼,點擊確認按鈕。隨后進入實例操作界面。
通過以上操作可以成功進入實例,隨后章節會介紹在實例中所需要做的運行環 境工作。
5.3.2 安裝代碼運行環境
因為實例服務器是連接了互聯網,且已經預安裝好 yum 命令功能,所以可以方便 的使用 yum 命令進行快速、自動化安裝。
( 1 ) 通 過如圖 5.60 所示 命令檢查是否已安裝 JDK 。
rpm -qa | grep java
圖5.60查看JDK命令
Fig. 5.60 View JDK commands
如果已安裝其他版本JDK需要刪除,如圖5.61所示。
rpm -e -nodeps [跟資匕來名字]
圖5.61刪除JDK命令
Fig. 5.61 Delete JDK command
(2)通過上面檢查后,再通過yum命令查看安裝列表是否有對應版本的JDK包, 命令如圖 5.62 所示。
yum list java-1.8*
圖5.62查看yum列表命令
Fig. 5.62 View yum list commands
(3)確認有Jdkl.8安裝包后,再通過如圖5.63所示yum命令安裝JDK。
yum install java-1.8.0-openjdk* -y
圖 5.63 下載 java 包
Fig. 5.63 Download java package
(4) 安裝完成后,需要通過 JDK 查詢版本信息的命令確認其是否在當前系統安 裝成功。安裝成功后系統會配置環境變量。所以可以通過輸入如圖 5.64 所示命令查看 JDK版本號。如果輸入命令后有JDK相關信息,證明已經安裝成功。
java -version
圖 5.64 查看 java 版本
Fig. 5.64 View java version
5.3.3數據庫的安裝
本項目數據庫使用Mysql的5.7版本。下面安裝也將使用該版本作為介紹。
(1)通過圖5. 65命令,查看是否已經安裝其他版本的Mysql。
rpm -qa|grep mysql
圖 5.65 查看是否已安裝 Mysql 命令
Fig. 5.65 Check if the Mysql command is installed
查看Mysql版本的同時還需要通過圖5. 66命令查看是否有MariaDB安裝包。
rpm -qa|grep mariadb
圖 5.66 查看 MariaDB 安裝包命令
Fig. 5.66 View MariaDB installation package commands
如果在輸入了查詢命令后,系統有輸出有上面兩個包的信息,則需要對其進行刪 除。刪除命令如圖 5.67 所示。
rpm -e -nodeps [±T命令輸岀名字]
圖 5.67 刪除包命令
Fig. 5.67 Delete package command
(2)通過圖5. 68命令,檢查Mysql相關依賴是否安裝。
rpm -qa|grep libaio
rpm -qa|grep n已t-tools
圖 5.68 檢查 Mysql 依賴命令
Fig. 5.68 Check Mysql dependency command
如果相關依賴還沒有安裝,則需要通過圖 5.69 命令安裝依賴。
yum -y install libaio net-tools
圖5.69 Mysql依賴安裝命令
Fig. 5.69 Mysql dependency installation commands
(3)安裝完依賴后,通過圖5. 70命令跳轉目錄到設定的Mysql安裝目錄
• • •
cd /xxx/xxx
圖5. 70進入目錄命令
Fig. 5.70 Access directory command
(4)通過圖5. 71命令下載Mysql安裝包
wget https://dev.mysq!.com/get/Downloads/MySQL-5.7/mysql-5.7.26-1tnux-gltbc2.12-x86_64>tar.gz
圖5.71下載Mysql命令
Fig. 5.71 Download Mysql commands
下載完成后使用圖 5.72 命令解壓安裝包。
tar -xvf mysql-5.7.26-ltnux-glibc2.12-x86_64.tar.gz
圖 5.72 解壓 Mysql 包命令
Fig. 5.72 Unpacking Mysql package commands
將解壓的包通過圖5. 73命令移動到local目錄。
• • •
mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/
圖5. 73移動Mysql包命令
Fig. 5.73 Move Mysql Package Command
將移動后的包改名字,命令如圖 5.74 所示。
mv mysql-5.7.26-linux-glibc2.12-x86_64/ mysql-5.7.26
圖 5.74 將 Mysql 包改名字
Fig. 5.74 Change the name of the Mysql package
通過如圖 5.75 命令創建管理數據庫的組和用戶
groupadd mysql useradd -r -g inysql mysql
圖5.75創建管理數據庫的組和用戶
Fig. 5.75 Create groups and users to manage the database
通過如圖 5.76 命令,給數據庫賦權。
chown mysql:mysql -R /data/mysql
圖5. 76 給Mysql賦權
Fig. 5.76 Empowering Mysql
最后修改 my.conf 的配置,通過圖 5.77 命令進入文件編輯頁面。
vim /etc/my.cnf
圖 5.77 修改 my.cnf 配置
Fig. 5.77 Modify my.cnf configuration
編輯該配置如圖 5.78 所示內容。
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql-5.7,26
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/da ta/mysql/mysql. .err
ptd-file=/data/mysql/mysql.pid
★character config
character_set_server=utf8mb4
symboltc-links=®
初始化Mysql
cd /usr/locml/mysqL-5.7.26/bin/ ./mysqld --defauUts-ftle=/etc/my.cnf --basedir=/usr/local/mysql-5.7.26/ - datadir=/data/mysql/ --user=mysql --initializ已
圖5.78數據庫配置信息
Fig. 5.78 Database configuration information
通過圖5. 79命令,查看并且記錄初始化Mysql的密碼。
vim /data/mysql/mysql.err
圖5. 79查看數據庫初始化密碼
Fig. 5.79 View database initialization password
最后運行圖 5.80 啟動命令,啟動數據庫服務。
service mysqld start
圖5.80數據庫啟動命令
Fig. 5.80 Database start command
通過圖 5.81 命令查看數據庫是否啟動。
ps -ef|grep mysql
圖 5.81 查看數據庫信息命令
Fig. 5.81 View database information command
可以通過圖 5.82 命令,更改初始化的密碼。
cd /usr/local/mysql-5.7.26/btn niysql -u root -p
圖5.82更改數據庫初始化密碼
Fig. 5.82 Change the database initialization password
輸入數據庫初始密碼,進入服務端后。通過如圖 5.83 所示命令修改配置最后刷新。
SET PASSWORD = PASSWORD('改變的密碼’);
ALTER USER 1 root'@1 localhost1 PASSWORD EXPIRE NEVER; flush privileges;
圖5.83修改數據庫密碼
Fig. 5.83 Change database password
通過上述流程后,當前Mysql數據庫的服務端已完整安裝并部署完成。
5.3.4數據緩存服務的安裝
本項目使用 Redis 服務主要是用來做緩存,提高系統效率,降低數據庫負載。下面 部署Reis以6.0.8為例。因為Redis具有開箱即用這一特性,所以不同版本部署方式基 本一致。
與Mysql 一致,通過cd命令跳轉至安裝目錄后,輸入如圖5. 84命令下載Redis安 裝包。
wget http://download.redis.io/redis-s
圖5.84下載Redis安裝包命令
Fig. 5.84 Download the Redis installer command
下載完成后使用圖 5.85 命令,解壓該安裝包。
• • •
tar xsf redis-6.0.8ar.gz
圖5. 85解壓Redis安裝包命令
Fig. 5.85 Unpack the Redis installer command
如果下載的是其他版本,可以將解壓命令的安裝包名字修改為正確的安裝包的名 字執行解壓。
如圖5. 86所示,通過cd命令進入到Redis目錄。
cd redis-6.®.8
圖5. 86通過cd命令進入Redis目錄
Fig. 5.86 Access the Redis directory via the ‘cd' command
通過圖 5.87 命令執行安裝操作。
make
圖5.87執行安裝命令
Fig. 5.87 Execute the installation command
等待上述安裝完成后,通過圖 5.88 所示命令進入配置目錄,進行屬性的配置。
cd src
vi redis.conf
圖5. 88 redis配置修改命令
Fig. 5.88 Redis configuration modification commands
使用如圖5. 89所示,進行Redis的參數配置。
#默認端口 6379
port 6379
#綁定Ip,如果是內網可以直接綁定127.0.0.1,或者忽略,©.©?©.©是外網 btnd ©.0.0.0
#守護進程啟動
daemonize yes
#超時
ttfneout 300
loglevel notice
爭分區
databases 16
save 900 1
save 300 10
save 60 1000©
rdbcompression yes
dbfilename dump.rdb
#密碼
requi.repass xxxx
圖5.89 Redis配置信息
Fig. 5.89 Redis Configuration Information
按ESC鍵后輸入:wq退出編輯。
如圖5. 90命令所示,進入Redis的啟動目錄,然后啟動Redis服務。
cd …/src ./redis-server
圖5.90進入目錄并啟動Redis
Fig. 5.90 Go to the directory and start Redis
等待Redis啟動成功,至此緩存服務的安裝及啟動完成。
5.3.5網絡服務器的安裝
Nginx 既是一種網絡服務器,也可用于作負載平衡和反向代理的使用,我們這里主 要是用來做反向代理。目前官網最新版本為 1.21,下面我們就以該版本為例子進行 Nginx 服務的安裝。其他版本安裝方式基本一致。
首先依然通過cd命令進入到安裝包下載目錄,如圖5. 91命令所示進行Nginx安 裝包的下載。
• • •
wget https://nginx.org/download/nginx-1.21.5.tar.gz
圖5.91 Nginx安裝包下載命令
Fig. 5.91 Nginx installation package download command
等待下載完成后運行圖 5.92 命令進行解壓。
tar -zxvf ngi.tar.gz
圖5. 92解壓Nginx安裝包命令
Fig. 5.92 Unpack the Nginx installer command
等待解壓完成后,運行 configure 文件進行初始化的設置。 然后再通過如圖5. 93命令進入Nginx的目錄。
cd ./nginx-1.21.5
圖5. 93進入Nginx文件命令
Fig. 5.93 Access the Nginx file command
通過如圖5. 94命令,運行./configure文件。
./configur已
圖 5.94 運行 configure 命令
Fig. 5.94 Run the configure command
若運行后彈出如下內容:the HTTP rewrite module requires the PCRE library。因為
Nginx 的配置信息可以讀取、解析正則表達式,使用該功能需要安裝 PCRE 來解析正則 表達式。安裝命令如圖 5.95 所示。
• • •
yum install -y per已 pcre-devel
圖 5.95 安裝 PCRE 命令
Fig. 5.95 Install PCRE commands
若彈出信息如下:Invalid C++ compiler or C++ compiler flags.則需要安裝gcc編譯環
境來使Nginx具有可編譯的功能。安裝命令如圖5. 96所示。
yum inst日ll -y gcc gcc-c++
圖 5.96 安裝 gcc 命令
Fig. 5.96 Install gcc command
若提示如下錯誤信息:the HTTP gzip module requires the zlib libraryo則需要安裝如 圖5.97所示命令安裝zlib依賴包。
yum install -y 疋lib zltb-devel
圖 5.97 安裝 zlib 命令
Fig. 5.97 Install zlib command
如果以上需要的依賴均順利安裝完成后需要再次運行./configure進行初始化。若順 利初始化完成后繼續如圖 5.98 命令進行編譯操作。
make
圖 5.98 編譯 Nginx
Fig. 5.98 Compiling Nginx
下一步命令如圖 5.99 所示繼續執行安裝操作。
make install
圖 5.99 安裝 Nginx 命令
Fig. 5.99 Install Nginx commands 順利完成后通過圖 5.100 命令進入 nginx 安裝目錄。
• • •
cd /usr/local/nginx
圖 5.100 進入 Nginx 安裝目錄
Fig. 5.100 Go to the Nginx installation directory
最后執行運行Nginx命令,如圖5. 101所示。
./sbin/ngtnx
圖 5.101 運行 Nginx 命令
Fig. 5.101 Run the Nginx command
執行運行命令后,需要通過圖5.102命令查看Nginx是否運行成功。
• • •
ps -ef | grep nginx
圖5. 102 查看Nginx是否啟動
Fig. 5.102 See if Nginx is up
如有內容提示證明已經成功啟動 Nginx。
可以使用瀏覽器進行訪問服務器。若出現如圖5.103提示,證明Nginx已經成功 安裝并且順利運行。
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com.
Thank you for using nginx.
圖5. 103 Nginx頁面提示
Fig. 5.103 Nginx page prompts
5.3.6系統服務框架的啟動 考慮到項目前期以演示、宣傳、溝通為主。初期用戶不會太多,也不會像 B2C 那 樣,用戶不會有爆炸式的增長階段,服務節點只需要保證功能正常即可。同時項目前 期也會與一線人員有很多溝通、調研等情況,所以產品迭代較快。為方便迭代、調試、 維護,各個服務框架采用直接使用腳本啟動JAR包形式。
編輯文本內容如所示。將腳本保存為xxxx.sh文件格式,并將文件傳入JAR包對應 目錄。
直接調用腳本啟動各個框架即可。
5.3.7應用服務的啟動 應用服務的啟動方式與服務框架類似,系統初期暫時只考慮單節點的形式,依然
采用腳本啟動JAR包的形式。待使用人員數量變多,單節點無法支撐后,增加新的服 務節點。
5.4本章小結
本節首先搭建了分布式框架的主要組件如:注冊中心、網關、緩存、配置中心、事
務等服務。隨后實現了本系統的應用功能部分:首頁信息、住房信息、住戶信息、維 護工程管理、系統管理等模塊。本章最后介紹了如何在云服務器安裝第三方服務,以 及部署系統到云服務端。
第6章 系統測試
系統測試階段是在開發流程中的一個十分關鍵的階段。其目的首先是發現程序執 行過程中的所有錯誤,然后是發覺程序中出現之前所未能發覺的錯誤,最后是發覺程 序中出現的所有錯誤以及可能的問題。通過測試,在最短的時間里,用最少的人力發 現問題,是一個成功測試的標志。順利通過軟件測試后可保系統運作的正確性和穩定 性。
6.1系統測試
軟件工程的主要任務是研發和制造先進、高性能的應用軟件,這也正是為何測試 才是發現軟件工程問題并及時改善的最主要渠道。
軟件測試中的單元測試以及綜合性測試是其生命周期中的兩個重要的過程。第一 過程是單元測試,是由代碼開發者對已編譯的代碼自行測試,所以編碼和單元測試在 軟件開發的同一過程中。當完成了編碼以及單元測試,需要對軟件系統進行全面測試, 一般由專門的軟件測試人員進行。這部分的主要目的,與軟件產品生命周期的其他重 要組成部分是有差別的。這是通過對完整的軟件系統進行測試,以最大限度地調試在 系統中可能發生的錯誤,從而在測試后給使用者提供更高標準的軟件產品。
此外,大型軟件系統的試驗也常常分階段地完成:單位試驗、系統試驗、集成測試、 容量檢測,以及驗收檢測。系統調試就是找出并修改在試驗期間出現的有誤的步驟。 為了糾正錯誤,首先是找出問題所在處,而這一步又是整個流程中最為艱難的步驟, 需要仔細思考和判斷。測量與調試可以被認為是測試階段中密不可分的步驟,通常是 交替完成的。
(1) 單元測試:主要檢測軟件系統中的基本數據處理能力。
(2) 系統測試:把零散的單元綜合成整體來進行整合式的檢測。
(3) 集成測試:檢測運行控制系統中是否是綜合運用了軟件的整個組成部分,并 具備如同其它軟件的同時工作的能力。
(4) 驗收測試:通過測試工程的整個流程,來確保整個系統的設計和功能是符合 用戶預期的。
為確保所開發的軟件系統為相關客戶管理提供良好的服務,用戶自己應進行相應的 測試,如果測試結果顯示狀態良好,就可以完成軟件系統的接口功能、數據錄入、刪 除等功能,再加上實施一些更高級的操作,進行數據庫備份和恢復等。
6.1.1 系統測試環境
系統所測試的環境,必須與系統運行的實際環境相符。由于本系統為B/S結構,主 流的操作系統都能運行市面上的大多數瀏覽器。所以,這里將在多操作系統、多瀏覽 器進行測試,以便測試系統的兼容性問題。測試環境如表 6.1所示。由于國內大部分瀏 覽器內核都為Chrome,所以這里不再增加國內瀏覽器。
表 6.1 測試軟件環境表
Tab. 6.1 Test software environment table
測試環境類型 版本
操作系統 Windows7、 Windows10
瀏覽器 IE10、 Edge、 Chrome
6.1.2 系統功能測試
本文測試了房地產信息管理系統的各個模塊(主要是用戶登錄、首頁信息、住房 信息模塊、住戶信息模塊、維護工程模塊、系統管理模塊)。測試的目的主要是確保 所有的功能都能正確實現,并確保軟件能按照用戶的需求來使用。
(1) 首頁展示模塊測試
該模塊主要功能是展示本系統消息、房地產信息、數據統計、各類圖表等匯總信息,
具體測試功能結果如表 6.2所示。
表 6.2 首頁展示模塊測試
Tab. 6.2 Home Display Test Module
編號 測試功能名稱 測試內容 是否通過
1 系統消息 該功能是否正確展示數據信息 是
2 房地產信息 該功能是否可以正確展示數據信息 是
3 數據統計 該功能是否可以正確展示數據信息 是
4 圖表展示 該功能是否可以正確展示數據信息 是
(2) 用戶登錄功能測試 該模塊主要功能是驗證登錄,保證系統數據的安全。同時需要看登錄是否會有超時 的情況。測試內容如表 6.3所示。
表 6.3 用戶登錄模塊
Tab. 6.3 User Login Module
編號 測試功能名稱 測試內容 是否通過
1 用戶正確輸入密碼 輸入信息,點擊確認后是否登錄成功 是
2 用戶輸入錯誤密碼 輸入信息,點擊確認后是否提示密碼錯誤 是
3 用戶輸入不存在的用
戶 輸入信息,點擊確認后是否提示用戶不存在 是
4 用戶什么都不輸入 是否告知需要輸入內容 是
當用戶密碼輸入錯誤時,系統彈出密碼輸入錯誤提示窗口,告知用戶密碼輸入錯誤, 如圖 6.1所示。
密碼錯誤。
確認
圖 6.1 密碼輸入錯誤提示
Fig. 6.1 Password input error prompt
當輸入的用戶名不存在時,提示如圖 6.2 所示。
用戶不存在Q
確認
圖 6.2 用戶不存在提示
Fig. 6.2 User does not exist prompt
當用戶什么都不輸入時,提示如圖 6.3 所示。
請輸入登錄信息。
確認
圖 6.3 輸入登錄信息提示
Fig. 6.3 Enter login information prompt
(3) 住房信息模塊測試 該模塊主要功能是對住房信息的管理,對住房信息進行新增、修改等操作。需要測 試新增住房信息后是否成功,修改住房信息后查看修改結果是否正確展示,刪除住房 信息后是否不會再展示。測試內容如表 6.4所示。
表 6.4 住房信息模塊
Tab. 6.4 Housing Information Module
編號 測試功能名稱 測試內容 是否通過
1 新增住房信息 輸入信息,點擊確認后是否提示成功 是
2 查看住房信息 步驟1完成后,查看是否有新增內容 是
3 修改住房信息 輸入修改內容后,點擊確認后是否提示成功 是
4 查看住房信息 步驟3完成后,查看是否修改成功 是
5 刪除住房信息 使用刪除某條住房信息后,是否提示刪除成功 是
6 查看住房信息 步驟5完成后,查看是對應信息是否刪除 是
用戶新增房屋信息,錄入新增房屋信息如圖 6.4所示。
新建住房信息
取消 確認
圖 6.4 新增房屋信息
Fig. 6.4 Add housing information
點擊確認后,在住房列表展示新增的信息如圖 6.5 所示。
1皿名亦 小區內 房屋朝冏 瞬屋如 1
圖 6.5 新增成功住房信息
Fig. 6.5 Add successful housing information
用戶修改住房信息,如圖 6.6 所示。
修改住房信息
確認
圖 6.6 修改住房信息
Fig. 6.6 Change of housing information
點擊確認后,住房列表展示修改后的住房信息,如圖 6.7 所示。
XX小區 201-02 正北 23 正券
圖6.7修改成功住房信息
Fig. 6.7 Modified housing successfully
(4) 住戶信息模塊測試 該模塊主要功能是對住戶信息的管理,對住戶信息進行新增、修改等操作。需要測 試新增住戶信息后是否成功,修改住戶信息后查看修改結果是否正確展示,刪除住戶 信息后是否不會再展示。測試內容如表 6.5所示。
表 6.5 住戶信息模塊
Tab. 6.5 Household Information Module
編號 測試功能名稱 測試內容 是否通過
1 新增住戶信息 輸入信息,點擊確認后是否提示成功 是
2 查看住戶信息 步驟1完成后,查看是否有新增內容 是
3 修改住戶信息 輸入修改內容后,點擊確認后是否提示成功 是
4 查看住戶信息 步驟3完成后,查看是否修改成功 是
5 刪除住戶信息 使用刪除某條住戶信息后,是否提示刪除成功 是
6 查看住戶信息 步驟5完成后,查看是對應信息是否刪除 是
用戶新增住戶信息,如圖 6.8 所示。
新增住戶信息
取啟 確認
圖 6.8 新增住戶信息
Fig. 6.8 Add household information
當點擊確認后,住戶列表會展示新增的住戶信息,如圖 6.9所示。
501-01 王xx 昌住 135xx»ooc iEft
圖6.9新增成功住戶信息
Fig. 6.9 Adding Successful Household Information
用戶選擇修改某條住戶信息,彈出修改框如圖 6.10 所示。
修改住戶信息
圖 6.10 修改住戶信息
Fig. 6.10 Change of household information
當點擊確認后,修改后的信息會展示在住戶信息列表,如圖 6.11 所示。
501-02 服x 自住 135xx»8c 正靜
圖6.11修改成功住戶信息
Fig. 6.11 Modify successful resident information
(5) 維護工程模塊測試 該模塊是對房地產維護工程與工程款項管理的相關信息進行管理,對信息進行新增、 修改等操作,并確認是否成功。
維護工程模塊測試內容如表 6.6 所示。
表 6.6 維護工程模塊
Tab. 6.6 Maintenance Engineering Module
編號 測試功能名稱 測試內容 是否通過
1 新增維護工程信息 輸入信息,點擊確認后是否提示成功 是
2 查看維護工程信息 步驟1完成后,查看是否有新增內容 是
3 修改維護工程信息 輸入修改內容后,點擊確認后是否提示成功 是
4 查看維護工程信息 步驟3完成后,查看是否修改成功 是
5 刪除維護工程信息 使用刪除某條信息后,是否提示刪除成功 是
6 查看維護工程信息 步驟5完成后,查看是對應信息是否刪除 是
當用戶新增維護工程信息時,錄入新增信息如圖 6.12所示。
新增維護工程信息
確認
圖 6.12 新增維護工程信息
Fig. 6.12 Add maintenance project information
點擊確認后,維護工程列表增加相關信息,如所示。
圖 6.13 新增維工程成功列表
Fig. 6.13 New Dimension Project Success List
當用戶需要修改維護工程時,修改列表如圖 6.14所示。
修改維護工程信息
確認
圖 6.14 修改維護工程信息
Fig. 6.14 Modify maintenance project information
當點擊確認,修改成功后維護工程列表如圖 6.15所示。
圖 6.15 修改維護工程成功列表
Fig. 6.15 Modify maintenance project success list
工程款項管理測試內容如表 6.7 所示。
表 6.7 工程款項模塊
Tab. 6.7 Project payment module
編號 測試功能名稱 測試內容 是否通過
1 新增工程款項信息 輸入信息,點擊確認后是否提示成功 是
2 查看工程款項信息 步驟1完成后,查看是否有新增內容 是
3 修改工程款項信息 輸入修改內容后,點擊確認后是否提示成功 是
4 查看工程款項信息 步驟3完成后,查看是否修改成功 是
5 刪除工程款項信息 使用刪除某條信息后,是否提示刪除成功 是
6 查看工程款項信息 步驟5完成后,查看是對應信息是否刪除 是
當用戶新增工程款項時,工程款項新增內容如圖 6.16 所示。
新增工程款項信息
I取消 I 確認
圖6.16新增工程款項信息
Fig. 6.16 Add project payment information
用戶點擊確認后,工程款項列表展示出新增的工程款項信息,如圖 6.17 所示。
當用戶選擇修改工程款項信息,修改內容如圖 6.18所示。
確認
圖 6.18 修改工程款項信息
Fig. 6.18 Add project money success list
用戶點擊確認后,如圖 6.19 所示,工程款項列表展示修改后的工程款項信息。
B100000000001 >oojg«lg 2 1 3
圖6.19修改工程款項成功列表
Fig. 6.19 Add project money success list
(6) 系統管理模塊測試 系統管理模塊主要功能有數據庫備份、用戶日志下載以及系統初始化等。如表 6.8 所示,對其功能進行測試。
表 6.8 系統管理模塊
Tab. 6.8 System Management Module
編號 測試功能名稱 測試內容 是否通過
1 備份功能 執行功能后,是否成功備份數據庫數 是
2 用戶日志下載 執行功能后,是否成功下載用戶日志 是
3 系統初始化 執行功能后,系統是否如期重啟,并初始化 是
4 數據庫恢復 選擇要恢復的數據庫內容,是否恢復成功 是
6.2案例對比測試
本系統與其他類似房地產信息管理系統進行了部分模擬狀況的對比測試。測試結 果如下所示。
表 6.9 案例狀況對比
Tab. 6.9 Comparison of simulated conditions
編號 模擬案例狀況 對比系統 本系統
1 部署服務 按照長久計劃的服務器性能進 行購買、部署、測試、上線, 前期投入大,花費時間長。 前期測試可購買最低配置服務,
后期更具具體訪問量對服務器性 能進行調整,前期投入低,采用
IaaS 模式,必要硬件軟件都有, 花費時間短
2 服務器宕機 系統癱瘓,無法訪問,排查原
因后重新啟動 單個節點宕機不影響訪問,排查 原因后重新啟動或者通過云服務 功能自動重啟
3 數據處理需求增加 購買新服務器并且進行安裝、 部署、測試、上線 通過云服務功能增加實例
6.3測試總結
各個功能模塊在本試驗中均已通過相應測試,可以得出整個系統的設計和實現是 滿足房地產信息管理系統目標的。符合需求分析以及設計的要求,功能效果符合軟件 初期設定的開發目標。為房地管理信息化提供了很好的參考。
6.4本章小結
系統測試作為軟件工程里面的必需功能。是驗證軟件系統的性能實現情況、可用 性、可維護性等的重要條件。各個功能模塊在本次測試中都做了相應的測試。并且, 在測試過程發現每一個模塊功能都能實現其預期的功能以及展示效果,最終的功能效 果符合軟件初期設定的開發目標。
第7章 結論
本論文從分布式云服務的房地產信息管理系統這一方面著手,重點對需求、應用、 系統架構進行詳細的分析,通過系統框架以及房地產信息管理應用所需要的功能綜合 考慮實際需求。
在技術上,考慮了開發復雜度、安全性、適用性等各種因素。針對系統每天都會 有大量的信息數據進行存儲并展示,系統需要迅速而準確的從海量的大數據中獲取需 要的數據,并且各個模塊也能協同合作,綜合使用。本系統采用分布式架構,可以動 態增加服務節點以增加服務的總體處理能力,同時如果一個節點掛掉,也不會影響服 務的整體使用,達到了高可用的目的。而近期類似的單體系統,如果需要增強性能, 只能通過增強服務器的硬件,這樣價格也會更高,同時由于是單體架構,一個服務掛 掉,那么整個系統都將癱瘓。與此同時,本系統的應用服務托管在了成熟的商業云端, 有著行業領先的服務,相比于部署在自建的物理機房,這種方式不僅更加的安全、維 護更方便以及性能更強,同時價格也非常的便宜也更環保。
在設計的應用業務方面,本管理系統所開發的應用程序都會考慮到自動化和實用 性的原則,以滿足政府單位機構、相關公司、社區物業等管理房地產信息的各項需求。 根據管理的實際需要,所有數據可以存儲在云服務上,如果有特殊要求也可以存儲在 本地要求的服務器。無論是存儲在本地或者是云端,相關管理人員可以快速地訪問數 據庫,整個數據管理流程具有安全性、穩定性和可維護性。
本房地產信息管理系統的功能頁面主要有首頁、住房信息管理、住戶信息管理、 維護工程管理以及系統管理這五個部分。房地產信息的集中化的功能主要是通過對應 用相關功能的分類來解決的,這樣可以使管理方式更具有針對性,從而提升管理效率。 頁面各自的功能如下:
(1) 首頁信息頁面主要是展示本系統消息、房地產信息、數據統計等。
(2) 住房信息管理、住戶信息管理、維護工程管理可以對住戶信息進行增加、修 改、刪除、查詢等操作。
(3) 系統管理模塊主要是由系統日志、數據備份、災后恢復功能組成。其中,日 志下載、數據備份是為了提高系統安全性、防災能力,當系統在某個原因被破壞時, 可以將影響降低到最小。系統恢復功能也是抵抗災難的重要功能,能夠提升系統恢復 能力,使系統遭受的損失降至最低。
本文從分布式云服務的房地產管理信息系統的基礎理論及相關技術、系統需求、 系統總體設計、系統詳細設計及實現、系統測試等方面著手,對各個環節進行了詳細 的介紹。本項目最終達到了所預期的目標,是具有可行性的,可以幫助人員解決房地 產信息管理的相關問題。后期隨著使用人數的增多以及更詳細的調研,將會增加更多 實用性的功能。
致謝
此時此刻,回顧三年來充實、忙碌而又快樂的學習時光,感慨頗多。這一段難忘 的學習歷程對于我的成長和磨礪是深刻而豐富的。這種成長和磨礪,來自老師的不倦 教誨,來自學友的激情爭論,來自家人的鼎力支持,同樣來自自己靜心求學的那份充 實與快樂。在畢業論文完成之際,我要衷心感謝所有給予我幫助和關心的人。
首先,要感謝我的導師王玲老師。王老師在繁忙的教學、科研工作之余,對我的 碩士論文選題、框架結構、資料收集、行文表述、乃至格式修改都傾注了大量的心血。 從王老師身上,我深切領略到傳業授道解惑這一教師職責的深刻含義。沒有她的精心 指導和辛勤付出就沒有這篇論文的產生。在三年的研究生學習生活中,您對學生專業 的點撥和生活無微不至的關懷,學生都將銘刻于心。您嚴謹的治學態度、勤奮的工作 作風、務實的工作方法以及開明的處事風格都是學生今后奮斗的目標。在此向王老師 表示最誠摯的敬意和感謝!并祝愿導師身體健康,工作順利,生活幸福!
其次,我同時要借此機會向所有在我求學過程中給予我鼓勵、關懷、提攜、幫助 而不能在此提及的眾多同學、朋友和親人致以深深的謝意。我把深深的祝福和誠摯的 謝意送給所有關愛我和支持我的人。在論文撰寫過程中,學習和引用了學界大量的研 究成果,在此向這些成果的作者表示衷心的感謝。
參 考 文 獻
[1]陸利強.地理信息系統在房地產信息管理中的應用J].低碳世界,2017(18):147.D0I:10.16844/ j.cnki.cn10-1007/tk.2017.18.095.
[2]宋為豪.試析地理信息系統在房地產信息管理中的應用[J].智能城市,2018,4(10):53-54.D0I:l 0.19301/j.cnki.zncs.2018.10.034.
[3]湯新龍.地理信息系統在房地產信息管理中的應用研究[J].電子技術與軟件工程,2013(14):63.
[4]石麗萍,李楊,王繼輝.地理信息系統在房地產信息管理中的運用[J].中國管理信息化,2014,17 (08):104-105.
[5]李清奇.淺析基于大數據技術的婁底市房地產信息系統J].中小企業管理與科技(下旬刊),2020 (10):156-157.
[6]高林.多媒體房地產管理信息系統的規劃與設計[J].居舍,2020(06):76+83.
[7]孫穎,周新淳.基于虛擬現實技術的購房信息管理系統設計J].電子制作,2019(06):57-58.DOI: 10.16589/j.cnki.cn11-3571/tn.2019.06.023.
[8]王文清,陳凌.CALIS數字圖書館云服務平臺模型J].大學圖書館學報,2009,27(04):13-18+32.
[9]Trippi R R. A decision support system for real estate investment portfolio managem ent[J]. Information & Management, 1989, 16(1): 47-54.
[10]Calderbank V J. TITAN: an information management system for faster retrieval from massive databases using signatures[J]. Program, 1990.
[11]Peterson K. Development of spatial decision support systems for residential real e state[J]. Journal of Housing Research, 1998, 9(1): 135-156.
[12]Rossini P. Using expert systems and artificial intelligence for real estate foreca sting[C]//Sixth Annual Pacific-Rim Real Estate Society Conference, Sydney, Austral ia. 2000: 24-27.
[13]Mittal A, Sharma B, Ranjan P. Real Estate Management System based on Blockchain[C] //2020 IEEE 7th Uttar Pradesh Section International Conference on Electrical, Elec tronics and Computer Engineering (UPCON). IEEE, 2020: 1-6.
[14]Pandey S, Gupta K K, Barker A, et al. Minimizing cost when using globally distribu ted cloud services: A case study in analysis of intrusion detection workflow appli cation[J]. Cloud Computing and Distributed Systems Laboratory, The University of M elbourne, Australia, Melbourne, Australia, Tech. Rep, 2009.
[15]Agarwal S, Dunagan J, Jain N, et al. Volley: Automated data placement for geo-dist ributed cloud services[C]//NSDI. 2010.
[16]Jiang D, Wang Y, Lv Z, et al. An energy-efficient networking approach in cloud ser vices for IIoT networks[J]. IEEE Journal on Selected Areas in Communications, 202 0, 38(5): 928-941.
[17]南京市房地產信息管理系統[J].工業控制計算機,1988(06) :27.
[18]郭義,蔡龍.基于XENIX的房地產信息管理系統[J].計算機研究與發展,1990(01):13-16.
[19]楊嘉偉.上海房地產信息網啟動[J].中國房地信息,1998(11):18.
[20]林濤.地(州)級國土資源管理信息系統的建立與實現方法研究[D].昆明理工大學,2005.
[21]劉枬,軒朵,陳蘊.大數據下房地產信息服務的挑戰及對策研究[J].建筑經濟,2017,38(02):77-8 1.DOI:10.14181/j.cnki.1002-851x.201702077.
[22]李新苗.上海電信推出首個國內電信級云服務 試行兩月已發展兩萬用戶[J].通信世界,2009(3 8):4.
[23]王威.面向云計算的海量數據檢索技術研究與應用[D].電子科技大學,2013.
[24]葉秋紅,鄒江波.基于云服務的電信項目綠色監管服務系統研究[J].電信科學,2013,29(05):100 -106.
[25]李俊江.基于Kubernetes的機器學習云平臺設計與實現[D].南京郵電大學,2021.DOI :10. 2725 1/d.cnki.gnjdc.2021.000830.
[26]陳桂香.基于web的房地產信息管理系統的設計與實現[D].南昌大學,2009.
[27]李國林.基于J2EE的房地產信息管理系統設計與實現[D].西安電子科技大學,2011.
[28]林典利.基于J2EE的房地產信息管理系統的設計與實現[D].中國海洋大學,2015.
[29] 夏冰.房地產企業ERP系統中物料需求計劃設計及優化研究[D].云南大學2012,3-10
[30]袁勇.房地產ERP信息管理系統的設計與實現[D].電子科技大學,2014.
[31]田薈鈺,吳倩,劉育杉,等.淺析基于大數據技術的房地產信息系統J].中國新通信,2019.
[32]李劍波,汪永琳,李小華.基于管理的房地產信息系統設計[J].計算機技術與發展,2006(02):84- 86.
[33]唐根年,虞曉芬,亓琳.城市房地產信息系統的開發與應用研究[J].中國房地產,2001(01):52-53.
[34]榮憲波.淺議房地產管理信息化建設[J].中小企業管理與科技(下旬刊),2010(01):34.
[35]馮莉.未來房地產信息系統安全建設問題的思考[J].內江科技,2010, 31(07):44+57.
[36]程煒,楊宗凱,樂春暉.基于Web Service的一種分布式體系結構[J].計算機應用研究,2002(03): 105-107+111.
[37]周永圣,侯峰裕,孫雯,楊磊,張小貝.基于 SpringCloud 微服務架構的進銷存管理系統的設計與 實現[J].工業控制計算機,2018,31(11):129-130+133.
[38]BENATALLAH B, DUMAS M, SHENG Q Z, et al.De-clarative composition and peer-to-peer provisioning of dynam-ic Web services[C]//Proceedings of IEEEInternational Con-fer ence on Data Engineering.Washington, D.C., USA:IEEE, 2002:297-308.
[39]Godse M, Mulik S. An approach for selecting software-as-a-service (SaaS) product[C]//2009 IEEE International Conference on Cloud Computing. IEEE, 2009: 155-158.
[40]Wang L, Zhan J, Shi W, et al. In cloud, can scientific communities benefit from the economies of s cale?[J]. IEEE Transactions on Parallel and Distributed Systems, 2011,23(2): 296-303.
[41]張偉匡,劉敏榕.漫步“云”端,需謹慎前行一一云計算面臨的挑戰探究[J].圖書情報工作網刊, 2011(06):37-42.
[42]支艷強,謝文閣,王麗麗.基于JDK的Java集成開發環境的設計與實現[J].大眾科技,2011(09): 9-11.
[43]閻宏.Java與模式[M].北京:電子工業出版社,2002
[44]Rischpater R. Beginning Java ME Platform[M]. Apress, 2008.
[45]王威.MySQL數據庫源代碼分析及存儲引擎的設計[D].南京郵電大學,2012.
[46]劉鑫.MySQL和PostgreSQL的對比選擇[J].沈陽工程學院學報(自然科學版),2011,7(02):171-1 73+177.DOI:10.13888/j.cnki.jsie(ns).2011.02.014.
[47]劉媛,張偉,王知學.基于B/S和C/S架構的嵌入式遠程監控系統[J].儀表技術與傳感器,2008(1 0):39-41.
[48]王英合.基于WEB的學生信息管理系統設計與實現[D].中國海洋大學,2006.
[49]Mcheick H, Qi Y. Dependency of components in MVC distributed architecture[C]//2011 24th Cana dian Conference on Electrical and Computer Engineering (CCECE). IEEE, 2011: 000691-000694.
[50]周永圣,侯峰裕,孫雯,楊磊,張小貝.基于 SpringCloud 微服務架構的進銷存管理系統的設計與 實現[J].工業控制計算機,2018,31(11):129-130+133.
[51]馬雄.基于微服務架構的系統設計與開發[D].南京郵電大學,2017.
[52]Mockus A, Fielding R T, Herbsleb J. A case study of open source software development: the Apa che server[C]//Proceedings of the 22nd international conference on Software engineering. 2000: 2 63-272.
[53]Nedelcu C. Nginx HTTP Server[M]. Packt Publishing, 2013.
[54]Carlson J. Redis in actio n[M]. Sim on and Schuster, 2013.
[55]方意,朱永強,宮學慶.微服務架構下的分布式事務處理[J].計算機應用與軟件,2019,36(01):15 2-158.
[56]胡喜明.基于響應式的高性能遠程過程調用框架的設計與實現[D].杭州電子科技大學,2021. DO I:10.27075/d.cnki.ghzdc.2021.000585.
[57]陳天,樊勇兵,賴培源,李巧玲.混合云技術架構及應用研究[J].電信科學,2014, 30(S2):89-97.
[58]Moreno-Vozmedia no R, Mon tero R S, Llore nte I M. Iaas cloud architecture: From virtualized datac enters to federated cloud infrastructures[J]. Computer, 2012, 45(12): 65-72.
[59]徐鵬,陳思,蘇森.互聯網應用PaaS平臺體系結構[J].北京郵電大學學報,2012, 35(01):120-124.
[60]Kavis M J. Architect ing the cloud: desig n decisi ons for cloud comput ing service models (SaaS, Pa aS, and laaS)[M]. John Wiley & Sons, 2014.
[61]Ka ndukuri B R, Rakshit A. Cloud security issues[C]//2009 IEEE In ternatio nal Co nference on Servi ces Computi ng. IEEE, 2009: 517-520.
[62]陳文宇.面向對象的關系數據庫設計[J].電子科技大學學報,2002(01):53-56+75.
[63]吳曉龍.基于微服務架構的在線學習系統設計與實現[D].山東師范大學,2019.DOI:10.27280/d. cnki.gsdsu.2019.000011.