分布式論壇系統解決方案的設計

2021-10-09 07:31張娜白金峰
軟件工程 2021年10期
關鍵詞:微服務分布式

張娜 白金峰

摘? 要:當今互聯網應用與服務的主要問題就是如何支撐龐大的用戶請求數量及并行處理海量數據。本文在詳細調研了目前論壇系統處理高并發請求和海量數據的解決方案后,針對論壇系統的用戶和服務特性,設計了一套分布式論壇系統的解決方案。該系統基于Spring Cloud(用于構建微服務開發的框架集合)微服務架構,為提升用戶體驗,采用了前后端分離的B/S(瀏覽器/服務器)模式;極大地提升了處理并發請求的能力,并且方便管理員對系統和內容進行管理;拓展性強,可用性高,運行穩定,使用簡單,能夠滿足論壇用戶和管理者的需求。

關鍵詞:分布式;Spring Cloud;微服務;論壇系統

中圖分類號:TP391? ? ?文獻標識碼:A

Design of Distributed Forum System Solution

ZHANG Na, BAI Jinfeng

(Dalian Neusoft University of Information, Dalian 116023, China)

zhangna@neusoft.edu.cn; baijinfeng1202@126.com

Abstract: Nowadays, a main problem of Internet applications and services is how to support the huge number of user requests and to process the massive data at the same time. After a detailed investigation of solutions to handling high concurrent requests and massive data for the current forum system, this paper proposes to design a set of distributed forum system solutions according to users and service characteristics of the forum system. The system is based on the Spring Cloud (a framework collection for microservice development) Microservice Architecture. In order to improve user experience, a B/S (browser/server) model that separates the front and back ends is adopted. The system greatly improves the ability of processing concurrent requests, and facilitates administrators to manage the system and contents. With its strong expansibility, high availability, stable operation and user-friendliness, the system can meet the needs of forum users and administrators.

Keywords: distributed; Spring Cloud; microservice; forum system

1? ?引言(Introduction)

隨著當今計算機技術的快速發展,互聯網應用與服務最主要的問題就是如何處理海量的數據和支撐數以百萬計的用戶。目前分布式計算系統十分火爆,各種各樣的分布式架構也層出不窮,但解決云計算工程中實際具體問題的論文和研究成果依然較少。

本文提出的分布式論壇系統主要解決兩大問題:一是分布式技術;二是論壇系統的功能可用性。眾所周知,目前Web服務架構中比較火的技術就是微服務+分布式部署結構[1],通過該結構可以明顯地改善系統的性能和可用性,所以本論文的重點研究方向之一就是如何架設微服務+分布式系統,以及解決分布式系統中容易遇到的問題。除此之外,分布式系統的功能開發方式與傳統結構系統的功能開發方式不同,開發者還需要了解如何將服務進行拆分,通過模塊的方式實現系統的功能并且保證系統功能可用性。分布式論壇系統適用于用戶量較大、每秒請求并發量較高和數據量較大的場景,它不僅可以優化用戶體驗,還可以減輕單一服務實例的負載。

2? ?系統需求(System requirements)

論壇分為用戶端和管理員端。如圖1所示為用戶端,用戶在未登錄之前可以瀏覽板塊、帖子,回復和瀏覽其他用戶主頁;若用戶沒有賬號可以進行注冊;用戶登錄后除可以進行未登錄之前的操作外,還可以收藏帖子、發表新帖或者回復帖子、點贊、關注用戶、修改個人信息和簽到等。

管理員端功能用例如圖2所示,管理員登錄系統后,可以查看當前用戶端的信息,同時還可以對板塊、帖子、回復進行管理,對用戶進行封禁和重置密碼等操作;管理員還可以向系統中添加新的管理員賬戶來幫助自己管理系統,同時可以看到自己和其他管理員的操作記錄,若想要收回其他管理員的權限,則可以停用某個管理員賬戶,同時也支持永久收回賬戶(刪除賬戶)。

同時,系統還有一些非用戶性功能,例如定期收集在線用戶數量,收集每日訪問量、每日新帖發表量等,如圖3所示。

3? ?系統設計(System design)

3.1? ?技術路線

系統采用基于B/S架構的前后端分離技術,前后端的通信使用HTTP協議,數據格式使用JSON。前端使用開放框架Vue.js,通過Vue.js將頁面分為若干個組件,組件之間可以通信,當有數據變化時,只更新相應的組件。后端框架使用Spring Boot,通過此框架可以迅速搭建應用環境和進行開發,提升開發效率。

Spring Cloud[2]是一個包含了分布式系統全部解決方案的技術棧,包括分布式的注冊中心、服務熔斷監控、服務降級、路由網關、服務間調用等。Spring Cloud通過Spring Boot技術來實現,所以在分布式系統的集成上選用Spring Boot架設微服務組件,使用Spring Cloud技術來進行集成是非常合適的。Cloud Config用來進行配置管理,通過Cloud Config可以將每個微服務組件的配置集中管理起來,避免配置過于分散,方便管理和修改。

RabbitMQ[3]是一款消息隊列中間件,該中間件可以將服務進行解耦,并且可以使兩個微服務異步完成一個任務。系統使用Redis作為緩存服務器,使用MyBatis作為數據庫訪問層,通過MyCat進行負載均衡分發,使數據庫連接請求均勻地分發到每個數據庫上面。

3.2? ?系統架構

(1)整體架構

系統整體結構如圖4所示。前端Web服務器使用Nginx進行內容分發。后端使用微服務分布式集群[4]的方式:Gateway為后端應用的入口,負責將請求分發給相應的微服務模塊;Eureka中注冊了集群中全部實例信息,方便實例間進行調用;CONFIG為集群提供配置服務,管理著集群中每一個應用的配置信息;Dash Board用來收集集群的健康信息,繪制集群負載曲線圖,方便運維人員實時關注集群的運行狀態;Spring Boot Admin負責管理集群中每一個微服務模塊的資源用量,如內存消耗、線程池大小、連接數量等;集群內的微服務模塊使用內置的Tomcat作為容器,使用Feign和RabbitMQ進行服務間的調用與重試。數據方面,系統使用MySQL集群提供數據庫服務,MySQL集群通過主從復制的方式和分庫的方式提高系統的可用性和數據吞吐量;同時系統還采用Redis集群作為緩存服務器,對于一些變化較少而訪問量較大的數據進行緩存處理,從而減輕數據庫的壓力,提升系統運行效率。

(2)節點集群

多服務節點的分布式模式如圖5所示。系統中某一微服務的節點可以為多個,它們對外部顯示仍為一個服務,系統進行調用時會自動進行負載均衡,選取節點中負載最小的實例進行調用,這樣搭建的集群系統吞吐量高,可以承受大量的并發請求,并且系統可用性也大大提高:即使系統中某一實例的節點宕機,其他節點仍能提供服務,當Eureka檢測到服務宕機后,就會將其從注冊中心中剔除,防止調用失敗。

(3)緩存架構

緩存是提高系統吞吐量和減輕數據庫壓力的重要措施,本系統為了保證緩存的可用性采用了Redis Cluster的Redis集群模式[5],選取了四個Redis節點,兩個主節點,兩個從節點,當需要加入緩存時,通過哈希算法對KEY進行計算,然后存到對應的緩存容器中。當Redis Cluster中某一個主節點由于某種原因宕機時,其后備的從節點會迅速升級為主節點并繼續提供服務,如圖6所示。

3.3? ?數據庫設計

通過分析系統業務需求,系統的數據庫設計如圖7所示。

3.4? ?對象設計

本系統后端使用三層架構進行設計,Controller負責攔截請求路徑,請求數據與響應數據的綁定,驗證數據合法性,調用Service進行業務處理;Service主要負責業務邏輯,對請求數據進行處理,將處理后的結果返回給Controller或者存入數據庫;Dao層是實體數據訪問層,主要負責對持久化數據的增刪改查。在此基礎上,還加入了微服務之間進行訪問的Client、消息中間件RabbitMQ和緩存中間件Redis,Client主要用來與其他微服務進行通信,傳輸和獲取業務數據;Rabbit用來在多個服務之間傳遞消息和進行失敗業務的重試;Redis用來對熱點數據進行緩存和分布式session管理。

3.5? ?控制流程設計

(1)前端控制流程

用戶在頁面上點擊按鈕或切換頁面時會觸發相應的事件,在State中對應的Action就會產生動作,將請求數據包裝好,通過Ajax發送HTTP請求。請求到達Nginx服務器,由Nginx進行反向代理[6],通過負載均衡算法發送給后端服務器網關,后端服務器處理請求。當后端服務器處理完畢后,將請求通過網關返回給Nginx,Nginx再將HTTP響應返回給Ajax,Ajax將響應體分解,取出需要的部分返回給Action,最后Action將數據綁定到指定組件上。

(2)后端控制流程

當Gateway接收到請求后,會對請求進行校驗,包括請求頭校驗、數據合法性校驗、用戶權限校驗等,對不符合標準的請求不予放行,最后Gateway會將過濾后的請求通過路由的方式分發到每一個微服務上,微服務對請求進行處理[7],通過消息中間件RabbitMQ進行消息分發和失敗任務重試。部分請求可能需要緩存的支持,它們可以從緩存集群Redis Cluster中獲取數據和更新緩存。如果需要對持久化數據進行增刪改查操作,微服務可以通過MyCat進行路由分發,到MySQL集群中相應的數據庫中操作數據。當微服務將業務邏輯處理完畢后,將響應消息響應給網關,網關會對響應中的敏感數據進行加密,然后返回給調用方。

3.6? ?異常處理設計

一個健壯的系統應該對業務邏輯異常或者其他一些常見的異常有著可應對的處理方式。本系統將系統內異常分為應用程序異常、業務處理異常、未授權異常、資源未找到異常、遠程調用權限不足異常、參數異常、遠程服務異常共七種可預見異常。

4? ?系統實現(System implementation)

4.1? ?核心功能實現

系統的核心功能[8]依據系統設計方案,采用所選技術路線完全可以實現,由于本文的重點在于分布式論壇系統解決方案的設計,因此不再給出具體編碼內容和實現截圖。

4.2? ?分布式功能實現

(1)配置集中管理

由于系統采用分布式結構,如果每個服務的配置文件都由自己攜帶,配置文件過于分散,不利于管理和修改。為了解決這些問題,系統將所有配置文件集中在一起,使用Git進行版本控制,便于修改和管理。當每一個微服務模塊啟動時,通過指定的應用名稱和配置文件名稱,從配置服務器直接拉取其所需的配置即可。

(2)代碼自動編譯、打包

系統的代碼和jar包依賴由maven進行管理,故可以通過maven命令進行編譯和打包處理。

(3)自動化集群啟動

集群支持自動化啟動,通過腳本命令直接啟動服務,啟動時僅需要指定配置文件即可。

(4)系統健康監視

為了保證系統健康運行,項目中加入了集群監視功能,主要監視內容為接口負載情況、微服務健康狀態、數據庫連接數、微服務線程池運行線程數、內存使用率等關鍵指標。

5? ?系統測試(System test)

5.1? ?功能與非功能測試

系統使用迭代模式進行開發,在模塊開發過程中進行了業務測試、單元測試,在模塊間整合時進行了集成測試和點對點測試,最后在整個系統完成后又進行了全面的功能測試,同時對系統性能進行了壓力測試。

發帖功能主要測試系統對用戶做出操作是否能給予正確的響應和提示;點贊功能主要測試用戶點贊記錄是否并發操作冪等性;關注用戶功能主要的測試點是并發冪等性和關注、取消關注順序問題;刪除帖子功能的主要測試點為當管理員刪除帖子后,帖子的評論、用戶收藏、評論通知等信息是否會同步刪除。

性能測試采用分布式集群方式進行,業務節點均為兩個節點,非業務節點均為一個節點。集群測試測試了單一節點模式下服務宕機后的服務情況和分布式模式下節點宕機后的服務情況。

5.2? ?測試結果

系統共計設計了功能性測試用例37 個,成功執行37 個;設計了非功能性測試11 個,成功執行11 個;設計了性能測試共10 項,在兩個服務節點的狀態下,服務成功率達99%,系統資源占用基本穩定,沒有內存泄露和CPU占用率過高的情況;設計集群測試用例2 個,成功執行2 個。

6? ?結論(Conclusion)

本文提出的分布式論壇系統與傳統結構的論壇系統相比,能承載更高的用戶量,系統可用性也大大提高,不會因為某一個點出現問題而導致整個系統不可訪問。本系統還具備強穩定性、高容災性、基于云配置、完善的異常捕獲與處理、數據更安全、界面更簡潔等優勢。

參考文獻(References)

[1] 李春陽,劉迪,崔蔚,等.基于微服務架構的統一應用開發平臺[J].計算機系統應用,2017,26(4):43-48.

[2] 王方旭.基于Spring Cloud和Docker的微服務架構設計[J].中國信息化,2018(3):53-55.

[3] 徐震,焦文彬.RabbitMQ小消息確認機制優化[J].計算機系統應用,2018,27(3):252-257.

[4] 陳樂,余粟,王盟.基于分布式集群的高可用日志分析系統的設計[J].中國電子科學研究院學報,2020,15(5):420-426.

[5] 張杰,劉凱,周立軍.采用Redis高并發應用系統設計與實現方法[J].計算機與數字工程,2020,48(5):1222-1226.

[6] 戴偉,馬明棟,王得玉.基于Nginx的負載均衡技術研究與優化[J].計算機技術與發展,2019,29(3):77-80.

[7] STEFANO T. Architect blockchain applications as microservices[J]. MSDN Magazine, 2018, 33(9):24-30.

[8] 高云峰.對基于Java的BBS論壇系統的設計與實現分析[J].電子技術與軟件工程,2018(04):202.

作者簡介:

張? ?娜(1978-),女,碩士,教授.研究領域:Java Web前后端開發.

白金峰(1997-),男,本科生.研究領域:分布式系統開發.

猜你喜歡
微服務分布式
基于Paxos的分布式一致性算法的實現與優化
基于移動互聯網的渡口渡船管理服務探討
移動圖書館智慧微服務APPs研究與實踐
探究圖書館微服務的知識產權保護
中文天堂最新版在线www-bt天堂网www天堂-电影天堂 宅男电影
许家印为恒大注入超70亿续命资金 速度与激情9 嘉南传 国际人士热议中共十九届六中全会 千与千寻 星际穿越 两个女人 男子写80页PPT拯救爱情却离婚 许家印为恒大注入超70亿续命资金 大连一密接者擅自点外卖聚餐被调查 许家印为恒大注入超70亿续命资金 中国共产党第三个历史决议全文发布 两个女人 我和我的家乡 男子体检血中抽出2升油浆 安娜贝尔 意大利错失直接晋级世界杯资格 国足战澳大利亚大名单:4归化在列 花木兰 林丹世界排名被正式移除 长津湖 意大利错失直接晋级世界杯资格 意大利错失直接晋级世界杯资格 大连现超级传播者26人在同一传播链 蜘蛛侠:英雄归来 俄方回应卫星碎片危及国际空间站 安娜贝尔 两个女人 24岁救人牺牲消防员获批为烈士 突围 怒火·重案 国足战澳大利亚大名单:4归化在列 大连一密接者擅自点外卖聚餐被调查 意大利错失直接晋级世界杯资格 加拿大一枝黄花到底是什么? 花木兰 你好李焕英 斛珠夫人 周冠宇成为中国首位F1车手 房价上涨城市创七年新低 拐点来了? 周冠宇成为中国首位F1车手 加拿大一枝黄花到底是什么? 男子体检血中抽出2升油浆 扬名立万 中国共产党第三个历史决议全文发布 长津湖 加拿大一枝黄花到底是什么? 逆局 峰爆 林丹世界排名被正式移除 北京冬奥火炬宣传片获金花环奖 24岁救人牺牲消防员获批为烈士 大连现超级传播者26人在同一传播链 长津湖 大连现超级传播者26人在同一传播链 速度与激情9 灵媒 国际人士热议中共十九届六中全会 中美元首会谈重点内容 大连一密接者擅自点外卖聚餐被调查 浦发银行回应近3亿存款莫名被质押 加拿大一枝黄花到底是什么? 扫黑风暴 十九届六中全会公报发布 #耿直真香哥黑化卖惨# 国际人士热议中共十九届六中全会 安娜贝尔 我和我的家乡 24岁救人牺牲消防员获批为烈士 国际人士热议中共十九届六中全会 灵媒
德兴市| 莆田市| 江达县| 施甸县| 宜章县| 英吉沙县| 渑池县| 娱乐| 正定县| 外汇| 乐亭县| 绥滨县| 鄯善县| 龙泉市| 沙湾县| 文安县| 江陵县| 个旧市| 平塘县| 蕲春县| 石屏县| 新兴县| 和龙市| 黔江区|