999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Spring Cloud的微服務架構的應用與實現

2021-04-03 23:46:40葛萌李闖男歐陽宏基
現代信息科技 2021年19期

葛萌 李闖男 歐陽宏基

摘? 要:傳統單體架構存在著開發技術單一、系統耦合度高、錯誤隔離性差、可收縮性差等缺點。微服務架構以分而治之、可收縮性強、模塊獨立開發、迭代周期短等優點逐漸成為新一代軟件開發架構用來彌補單體架構的缺陷。介紹了微服務架構的基本概念,以Spring Cloud微服務框架為基礎,利用Java語言、中間件技術和MySQL數據庫設計并實現了一個教師教學評價系統。論述了微服務架構實現的關鍵步驟和系統核心模塊的實現過程,為微服務架構在應用中的實現提供了一定的借鑒。

關鍵詞:微服務架構;Spring Cloud;中間件技術;教學評價系統

中圖分類號:TP311? ? ? ? ? ? ? ? ? 文獻標識碼:A文章編號:2096-4706(2021)19-0023-04

Application and Implementation of Microservice Architecture Based on Spring Cloud

GE Meng, LI Chuangnan, OUYANG Hongji

(School of Computer Science, Xianyang Normal University, Xianyang 712000, China)

Abstract: The traditional monomer architecture has some disadvantages, such as single development technology, high system coupling, poor error isolation, poor scalability and so on. Microservice architecture has gradually become a new generation of software development architecture to make up for the defects of monomer architecture with the advantages of divide and rule, strong contractibility, independent module development and short iteration cycle. This paper introduces the basic concept of microservice architecture, designs and implements a teacher teaching evaluation system based on Spring Cloud microservice framework, Java language, middleware technology and MySQL database. It discusses the key steps of implementation of microservice architecture and the implementation process of system core modules, which provides a certain reference for the implementation of microservice architecture in application.

Keywords: microservice architecture; Spring Cloud; middleware technology; teaching evaluation system

0? 引? 言

傳統的單體應用系統架構會隨著軟件規模和業務的擴大變得復雜且不易于擴展和維護,微服務架構的出現很好地解決了這個問題[1]。微服務架構是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間相互協調、互相配合,為用戶提供最終價值。每個服務運行在其獨立的進程中,服務和服務之間采用輕量級的通信機制相互溝通。每個服務都圍繞著具體的業務進行構建,并且能夠被獨立的部署到生產環境、類生產環境等[2]。

本文以Spring Cloud為微服務架構的實現框架[3],以教師教學評價為業務背景,綜合應用Maven管理工具、Mycat中間件、SSM框架[4]、Docker容器等技術,實現了微服務開發的基本流程,詳細描述了核心模塊的實現過程,Spring Clound框架的應用與實現提供了一定的參考。

1? 微服務架構相關技術概述

1.1? Spring Boot框架

Spring Boot是一個Java EE一站式開發框架,可以簡單、快速、零配置的創建基于Spring的項目[5]。Spring Boot提供了大量配置包,能夠自動識別查找依賴管理中提供的jar包并進行配置。同時內置了Servlet容器,服務器上無須安裝額外的軟件,只要具備Java Runtime環境即可運行。還內置了健康檢查、度量指標,可方便接入既有運維監控系統,也可使用自身提供的Spring Boot Admin服務監控。

1.2? Spring Cloud框架

Spring Cloud是一款基于Java語言、采用Spring Boot開發的微服務框架。它提供了服務治理、分布式配置、分布式任務、服務跟蹤、消息總線、服務負載均衡、服務熔斷降級等一系列問題的解決方案[6]。其中包括的核心組件有:(1)Spring Cloud Consul Config是一個分布式配置中心,為注冊在同一Consul集群下的微服務下發配置。(2)Spring Cloud Consul Discovery將微服務注冊到Consul中。(3)Spring Cloud OpenFeign聲明式RestClient,通過接口方式調用其他微服務,封裝了RestTemplate和負載均衡。(4)Spring Cloud LoadBalancer為微服務調用提供負載均衡。(5)Spring Cloud Hystrix斷路器避免將單個服務的故障擴散到整個服務集群中。(6)Spring Data用于簡化Spring應用對數據的訪問,包括關系型數據庫、非關系數據庫、Map-Reduce 框架和云數據服務等。

1.3? Mycat數據庫中間件

Mycat是一個開源的、面對大中型應用的數據庫中間件[7]。使用Mycat的分庫分表技術,可將大量記錄分散到不同的MySQL數據庫儲存。Mycat負責維護具體的表信息。還可以通過讀寫分離技術來分散讀寫請求,在高并發場景下降低單一MySQL服務器的訪問壓力。

1.4? OpenResty網關負載均衡

OpenResty是一款基于Nginx與Lua的高性能Web平臺,其內部集成了大量優秀的Lua庫、第三方模塊以及其依賴項,用于方便地搭建能夠處理高并發、高擴展性的動態Web應用、Web服務和動態網關[8]。當擴展微服務時,Nginx的配置文件并不能同步的發生變化[9],需要借助OpenResty中不同流程的指令加上Lua語言來實現動態配置,通過非阻塞的API來完成無感知的負載配置變更。

2? ?教學評價系統架構與服務

2.1? 系統架構

教學評價系統的架構如圖1所示,其中包括15個業務微服務、網關微服務、網關負載均衡、服務監控、服務治理中心、Mycat數據庫中間件。其中15個業務微服務、服務監控和網關微服務都需要注冊到Consul中。Consul和服務監控都會對微服務進行健康檢查,將不可用的服務實例逐出實例列表。服務監控檢查到服務狀態發生變化會在監控頁面發出通知、并向預設的通知方式中發送模板信息。

2.2? 服務劃分

整個教師教學評價系統按功能模塊進行服務劃分,各服務的名稱和含義如表1所示。

3? 微服務在教學評價系統中的實現

3.1? Maven工程

系統所有模塊均由Maven進行管理。創建一個Maven工程打包類型設為POM,作為所有模塊的父工程。該工程用來約束全部微服務的Spring Boot版本、Spring Cloud版本。首先在該工程中引入Spring Boot的父工程作為Jar包依賴版本約束,然后再引入Spring Cloud依賴管理,最后再引入各個服務所需的依賴。

3.2? 管理服務

管理服務是邏輯上劃分的一組服務,主要負責維護整個系統的基礎數據。該服務連接Mycat數據庫中間件,為管理服務、身份認證服務、評價服務提供服務。以上服務在對數據修改后傳遞到這個服務保存數據。教師服務、數據字典服務、評價規則服務、指標服務、學生服務、課程服務、學年服務。這些服務的工程結構是相似的,采用經典的三層架構來實現:利用Spring MVC實現控制層,利用Spring實現業務層,利用MyBatis實現持久層,利用Spring實現3層的整合。

3.3? 服務治理

Consul提供服務發現與配置,每個服務里都配置了Consul的地址。微服務啟動后會自動向Consul注冊,提供自己的服務名、IP地址、端口號、上下文路徑、健康檢查地址等信息。啟動Consul后,可通過8500端口查看UI界面,服務健康監控如圖2所示。

3.4? API網關

Spring Cloud Gateway是高性能網關,它提供了微服務請求統一入口。該微服務可以將指定URL或者匹配到URL的請求轉發到指定的微服務中去,同時當轉發的微服務有多個實例時,自動對這些實例使用負載均衡算法轉發請求。指定的URL規則配置在bootstrap.yml文件中,如圖3所示。Routs表示路由的配置列表開始,id代表這條路由的名字,uri屬性配置轉發地址,可以使用服務名代替,lb://代表自動使用負載均衡。predicates代表轉發規則,配置為指定的路徑。filters屬性代表過濾器,此處配置為熔斷。當轉發的微服務不可用時,轉發到熔斷地址fallback,相關代碼如圖3所示。

3.5? OpenResty網關負載均衡

通過OpenResty內置的lua語言、lua-resty-redis、lua-cJSON和lua-resty-balancer模塊,結合Redis來動態配置網關。首先在init_by_lua_file中指定運行腳本init.lua,在init.lua中初始化cJSON、balancer模塊作為全局變量。同時初始全局變量請求計數器vtimes為-1,當前服務列表下標currentserver為1。默認的網關地址serverlist初始為config.lua中配置的默認網關地址。在access_by_lua_file中指定運行腳本access.lua,在access.lua中判斷請求計數器vtimes是否小于0,如果為真就重新賦值請求計數器并從Redis中獲取數據。成功獲得到數據就更新當前服務器列表。vtimes初始化為-1就要求在第一次請求時刷新配置。在balancer_by_lua_file中指定運行腳本balancer.lua,在balancer.lua首先判斷當前serverList的大小,當列表大小等于1時表示只有一個網關,這時候就無須再進行負載均衡直接轉發便可以。大于1時,采用輪詢算法將每個請求分別轉發到不同的網關上。

3.6? 服務調用

本系統微服務之間使用HTTP+JSON來實現通信。HTTP是通信的協議,JSON是通信時的數據格式[10],使用OpenFeign來隱藏遠程調用的實現細節。首先在需要調用微服務的pom.xml中增加OpenFeign依賴,然后創建一個接口,添加@FeignClient注解。其中value的值是要調用的服務名,path是調用服務的上下文路徑,fallback是調用失敗時調用該接口的實現類。在調用時直接將注入到調用對象中,調用findAllDepartments()方法即可。

3.7? 服務熔斷

本系統的服務熔斷主要應用在網關轉發和微服務間調用上,在這兩點上添加熔斷可以確保系統的穩定運行。網關的熔斷配置在過濾器上的fallbackuri,當網關轉發時發現此服務無實例可用或者應答超時,將直接轉發到fallbackuri配置的地址上。因為微服務間調用使用了OpenFeign,其內部已經封裝熔斷。在Feign接口上配置fallback選項為接口指定一個實現類,在調用失敗后會使用這個類的方法作為此接口的默認實現方法。

3.8? 公共模塊

公共模塊封裝了15個業務微服務的實體類、響應請求的包裝類、身份認證工具類,每個微服務都可以從該模塊中調用自己需要的類。不同的微服務之間會通過調用其他的微服務來獲取對象。定義CommonResponse類負責系統多數對外響應,需要考慮普適性、可重用性。該類提供了5種響應狀態:代碼code、操作結果消息message、實例數據對象data、實例數據對象集合table和請求號requestId。包含的方法包括:ok()/ok(String message)、error()/error(String message)、auth(String message)、bad()、busy()、data(Model data)和table(List table)。

3.9? 身份認證服務

認證服務涉及賬戶的登錄、注銷、維護登錄用戶信息、每個角色能訪問的指標、修改密碼、系統訪問憑證下發等功能。所有的用戶在訪問任何服務時都必須在請求中攜帶身份認證服務下發的訪問憑證。用戶的登錄、注銷、獲取的用戶信息等都需要將請求路由給該服務完成。由于HTTP是無狀態協議,本系統采用前后端分離技術開發,不能像傳統的應用一樣在瀏覽器端設置一個Cookie來維護會話信息。通過使用訪問憑證的方式,后端不需要維護會話只需要憑證,前端也只需要保存憑證。前端將訪問憑證保存在瀏覽器里,在請求后端時帶了此憑證完成身份校驗。所有的服務在操作時都必定會先驗證用戶賬戶的合法性,都會請求身份認證服務檢查憑證。每次請求都驗證會大大降低性能,在請求量大時會可能直接導致身份認證服務宕機。因為外部所有的請求都會通過網關,所以在Spring Cloud Gateway上做請求的憑證檢查。統一放行無憑證但正在請求身份認證的請求,攔截到其他服務的請求并檢查憑證。憑證有效放行請求,憑證無效不放行并返回憑證無效信息。

身份認證服務依賴于管理服務中的學生服務和教師服務,身份認證服務只維護被發送過訪問憑證的用戶信息,并不維護數據庫中的用戶信息。身份認證服務將接收的賬戶密碼根據請求的接口轉發到學生服務或者是教師服務。學生服務或教師服務在收到賬戶和密碼后會在數據庫中查詢比對用戶信息。查詢成功后返回給身份認證服務用戶信息,認證服務將根據用戶信息簽發憑證,同時將用戶信息緩存到Redis中,設置過期時間為1小時。用戶注銷時刪除Redis中緩存的用戶信息。

系統的憑證基于JSON Web Tokens(JWT)[11]設計,JWT非常適合無狀態的HTTP協議。當用戶登錄成功后將獲得的用戶信息中的學工號加入JWT的sub字段、角色ID加入JWT的role字端、過期時間為當前系統時間加一個小時,返回給用戶。用戶的下次請求會在HTTP頭部的Authorization字段添加下發的憑證,網關會負責檢查憑證。

3.10? 評價服務

評價服務分為學生評價服務和教學督導評價服務,包含的功能如圖4所示。之所以拆分為兩個,是因為在實際業務中學生的人數遠遠大于教學督導的人數。那么學生評價服務接受的請求量也遠遠大于教學督導評價服務所接受的請求量,將兩個服務分離能更有效地在請求量增大時進行動態擴容處理。

4? 結? 論

Spring Cloud框架提供了微服務架構應用的“一站式”解決方案,簡化了微服務架構在應用系統的使用過程。首先介紹了Spring Cloud框架及其包括的核心組件,然后結合教學評價系統闡述了Spring Cloud框架的具體使用過程,重點描述了服務治理、API網關、負載均衡、服務調用、服務熔斷、業務服務等模塊的實現過程。為Spring Cloud框架的使用提供了一定的借鑒。

參考文獻:

[1] 倪小璐,王旭英,邊俊凱,等.微服務軟件架構設計模式及其應用 [J].杭州師范大學學報(自然科學版),2021,20(4):442-448.

[2] 馮志勇,徐硯偉,薛霄,等.微服務技術發展的現狀與展望 [J].計算機研究與發展,2020,57(5):1103-1122.

[3] SUN X,CHEN H N,WANG Q Y,et al. Research and Design of Online Training Platform based on Spring Cloud Distributed System Structure and Computer Big Data [J/OL].Journal of Physics:Conference Series,2021,1952:1-7.[2021-09-03].https://iopscience.iop.org/article/10.1088/1742-6596/1952/4/042087.

[4] 王偉,常慶麗,吳朝霞.基于Springboot+Vue的精準幫扶系統研究與實現 [J].河南科技,2021,40(27):12-14.

[5] 朱瑞,曾勁濤,龍滿生.基于SSM框架的創業資訊發布系統的設計與實現 [J].井岡山大學學報(自然科學版),2021,42(1):54-60.

[6] 歐陽宏基,楊鐸.基于微服務架構的學位論文寫作輔助平臺 [J].計算機與現代化,2019(10):34-39.

[7] 張瑩,鄭學智.基于Mycat的大數據存儲研究 [J].電子設計工程,2020,28(5):1-6.

[8] 溫馨,樊婧雯,王富強.基于OpenResty平臺的API網關系統的設計與實現 [J].信息化研究,2020,46(3):62-68.

[9] 許諾.大數據下基于Nginx負載均衡的教務系統優化設計 [J].信息技術與信息化,2021(6):191-193.

[10] 劉家雨,王永生,劉愛東.基于JSON的防空武器系統應用適配器 [J].兵工自動化,2021,40(7):1-4.

[11] SPIGA D,PRA S D,SALOMONI D,et al. Dynamic integration of distributed,Cloud-based HPC and HTC resources using JSON Web Tokens and the INDIGO IAM Service [J].EPJ Web of Conferences,2020,245:1-9.[2021-09-03].https://doi.org/10.1051/epjconf/202024507020.

作者簡介:葛萌(1980—),女,漢族,陜西咸陽人,講師,碩士,研究方向:軟件工程、企業級JavaEE應用開發;李闖男(1999—),男,漢族,陜西咸陽人,本科在讀,研究方向:軟件工程;歐陽宏基(1982—),男,漢族,陜西寶雞人,副教授,碩士,研究方向:軟件工程、軟件設計與體系結構。

主站蜘蛛池模板: 亚洲第一中文字幕| 久久黄色毛片| 中文无码伦av中文字幕| 国产91丝袜在线观看| 精品国产免费观看| 欧美午夜在线播放| 19国产精品麻豆免费观看| 国产精品欧美日本韩免费一区二区三区不卡| 亚洲综合18p| 精品人妻AV区| 强奷白丝美女在线观看| 波多野结衣一区二区三区AV| 亚洲天堂啪啪| 无码国产伊人| 精品国产成人a在线观看| 成人在线亚洲| 香蕉久人久人青草青草| 亚洲aaa视频| 综合色在线| 亚洲热线99精品视频| 国产原创自拍不卡第一页| 波多野结衣无码视频在线观看| 国产亚洲精品97在线观看| 在线观看网站国产| 麻豆精品在线| 久996视频精品免费观看| 免费人成网站在线高清| 亚洲无线一二三四区男男| 波多野结衣一二三| 国产尤物在线播放| 久久一本精品久久久ー99| 国产91丝袜在线播放动漫| 亚洲日本在线免费观看| 美女一级免费毛片| 欧美中文字幕无线码视频| 91在线一9|永久视频在线| 亚洲国产成人麻豆精品| 国产精品香蕉在线| 三级视频中文字幕| 综合五月天网| 欧美激情视频一区| 国产精品亚洲αv天堂无码| 中文字幕永久视频| 日本不卡在线| av天堂最新版在线| 少妇精品久久久一区二区三区| 国产精品视频3p| 午夜啪啪福利| 91视频精品| 国产www网站| 日韩人妻精品一区| 亚洲三级片在线看| 在线观看亚洲人成网站| 日韩精品免费在线视频| 亚洲AⅤ无码日韩AV无码网站| 亚洲午夜天堂| 国产精品3p视频| 亚洲成a∧人片在线观看无码| 国产成人av一区二区三区| 麻豆精选在线| 一本大道无码日韩精品影视 | 中文字幕人妻av一区二区| 久久国产精品娇妻素人| a级毛片在线免费| 亚洲久悠悠色悠在线播放| 国产欧美视频在线| 玩两个丰满老熟女久久网| 九九热免费在线视频| 国产精品理论片| 久久黄色影院| 亚洲区视频在线观看| 亚洲日本中文字幕天堂网| 亚洲精品天堂自在久久77| 国产av一码二码三码无码| igao国产精品| 香蕉伊思人视频| 欧美成在线视频| 亚洲最大综合网| 国产精品露脸视频| 欧美伦理一区| 91福利国产成人精品导航| 亚洲精品另类|