• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      分布式論壇系統(tǒng)解決方案的設(shè)計

      2021-10-09 07:31:41張娜白金峰
      軟件工程 2021年10期
      關(guān)鍵詞:微服務(wù)分布式

      張娜 白金峰

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

      關(guān)鍵詞:分布式;Spring Cloud;微服務(wù);論壇系統(tǒng)

      中圖分類號:TP391? ? ?文獻(xiàn)標(biāo)識碼: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)

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

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

      2? ?系統(tǒng)需求(System requirements)

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

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

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

      3? ?系統(tǒng)設(shè)計(System design)

      3.1? ?技術(shù)路線

      系統(tǒng)采用基于B/S架構(gòu)的前后端分離技術(shù),前后端的通信使用HTTP協(xié)議,數(shù)據(jù)格式使用JSON。前端使用開放框架Vue.js,通過Vue.js將頁面分為若干個組件,組件之間可以通信,當(dāng)有數(shù)據(jù)變化時,只更新相應(yīng)的組件。后端框架使用Spring Boot,通過此框架可以迅速搭建應(yīng)用環(huán)境和進(jìn)行開發(fā),提升開發(fā)效率。

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

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

      3.2? ?系統(tǒng)架構(gòu)

      (1)整體架構(gòu)

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

      (2)節(jié)點集群

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

      (3)緩存架構(gòu)

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

      3.3? ?數(shù)據(jù)庫設(shè)計

      通過分析系統(tǒng)業(yè)務(wù)需求,系統(tǒng)的數(shù)據(jù)庫設(shè)計如圖7所示。

      3.4? ?對象設(shè)計

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

      3.5? ?控制流程設(shè)計

      (1)前端控制流程

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

      (2)后端控制流程

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

      3.6? ?異常處理設(shè)計

      一個健壯的系統(tǒng)應(yīng)該對業(yè)務(wù)邏輯異?;蛘咂渌恍┏R姷漠惓S兄蓱?yīng)對的處理方式。本系統(tǒng)將系統(tǒng)內(nèi)異常分為應(yīng)用程序異常、業(yè)務(wù)處理異常、未授權(quán)異常、資源未找到異常、遠(yuǎn)程調(diào)用權(quán)限不足異常、參數(shù)異常、遠(yuǎn)程服務(wù)異常共七種可預(yù)見異常。

      4? ?系統(tǒng)實現(xiàn)(System implementation)

      4.1? ?核心功能實現(xiàn)

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

      4.2? ?分布式功能實現(xiàn)

      (1)配置集中管理

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

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

      系統(tǒng)的代碼和jar包依賴由maven進(jìn)行管理,故可以通過maven命令進(jìn)行編譯和打包處理。

      (3)自動化集群啟動

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

      (4)系統(tǒng)健康監(jiān)視

      為了保證系統(tǒng)健康運行,項目中加入了集群監(jiān)視功能,主要監(jiān)視內(nèi)容為接口負(fù)載情況、微服務(wù)健康狀態(tài)、數(shù)據(jù)庫連接數(shù)、微服務(wù)線程池運行線程數(shù)、內(nèi)存使用率等關(guān)鍵指標(biāo)。

      5? ?系統(tǒng)測試(System test)

      5.1? ?功能與非功能測試

      系統(tǒng)使用迭代模式進(jìn)行開發(fā),在模塊開發(fā)過程中進(jìn)行了業(yè)務(wù)測試、單元測試,在模塊間整合時進(jìn)行了集成測試和點對點測試,最后在整個系統(tǒng)完成后又進(jìn)行了全面的功能測試,同時對系統(tǒng)性能進(jìn)行了壓力測試。

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

      性能測試采用分布式集群方式進(jìn)行,業(yè)務(wù)節(jié)點均為兩個節(jié)點,非業(yè)務(wù)節(jié)點均為一個節(jié)點。集群測試測試了單一節(jié)點模式下服務(wù)宕機(jī)后的服務(wù)情況和分布式模式下節(jié)點宕機(jī)后的服務(wù)情況。

      5.2? ?測試結(jié)果

      系統(tǒng)共計設(shè)計了功能性測試用例37 個,成功執(zhí)行37 個;設(shè)計了非功能性測試11 個,成功執(zhí)行11 個;設(shè)計了性能測試共10 項,在兩個服務(wù)節(jié)點的狀態(tài)下,服務(wù)成功率達(dá)99%,系統(tǒng)資源占用基本穩(wěn)定,沒有內(nèi)存泄露和CPU占用率過高的情況;設(shè)計集群測試用例2 個,成功執(zhí)行2 個。

      6? ?結(jié)論(Conclusion)

      本文提出的分布式論壇系統(tǒng)與傳統(tǒng)結(jié)構(gòu)的論壇系統(tǒng)相比,能承載更高的用戶量,系統(tǒng)可用性也大大提高,不會因為某一個點出現(xiàn)問題而導(dǎo)致整個系統(tǒng)不可訪問。本系統(tǒng)還具備強(qiáng)穩(wěn)定性、高容災(zāi)性、基于云配置、完善的異常捕獲與處理、數(shù)據(jù)更安全、界面更簡潔等優(yōu)勢。

      參考文獻(xiàn)(References)

      [1] 李春陽,劉迪,崔蔚,等.基于微服務(wù)架構(gòu)的統(tǒng)一應(yīng)用開發(fā)平臺[J].計算機(jī)系統(tǒng)應(yīng)用,2017,26(4):43-48.

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

      [3] 徐震,焦文彬.RabbitMQ小消息確認(rèn)機(jī)制優(yōu)化[J].計算機(jī)系統(tǒng)應(yīng)用,2018,27(3):252-257.

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

      [5] 張杰,劉凱,周立軍.采用Redis高并發(fā)應(yīng)用系統(tǒng)設(shè)計與實現(xiàn)方法[J].計算機(jī)與數(shù)字工程,2020,48(5):1222-1226.

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

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

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

      作者簡介:

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

      白金峰(1997-),男,本科生.研究領(lǐng)域:分布式系統(tǒng)開發(fā).

      猜你喜歡
      微服務(wù)分布式
      分布式光伏熱錢洶涌
      能源(2017年10期)2017-12-20 05:54:07
      分布式光伏:爆發(fā)還是徘徊
      能源(2017年5期)2017-07-06 09:25:54
      微信公眾平臺在醫(yī)院圖書館的應(yīng)用現(xiàn)狀調(diào)查
      基于微信企業(yè)號的校園移動服務(wù)
      微服務(wù)視角下高職圖書館數(shù)字資源使用分析
      中文信息(2016年10期)2016-12-12 10:09:57
      從單一模式系統(tǒng)架構(gòu)往微服務(wù)架構(gòu)遷移轉(zhuǎn)化技術(shù)研究
      基于DDS的分布式三維協(xié)同仿真研究
      西門子 分布式I/O Simatic ET 200AL
      上林县| 桐城市| 丰都县| 肥乡县| 聂荣县| 南陵县| 凤山县| 镇坪县| 建阳市| 天柱县| 栾城县| 分宜县| 湘潭县| 达州市| 塔河县| 盐源县| 通榆县| 惠东县| 惠来县| 广安市| 若尔盖县| 公主岭市| 宣汉县| 西安市| 浮山县| 福建省| 绩溪县| 吉木萨尔县| 眉山市| 稻城县| 三都| 塔城市| 延川县| 梨树县| 淮滨县| 岳普湖县| 成安县| 安康市| 泽普县| 军事| 秭归县|