• 
    

    
    

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

      ?

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

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

      葛萌 李闖男 歐陽宏基

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

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

      中圖分類號: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? 引? 言

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

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

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

      1.1? Spring Boot框架

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

      1.2? Spring Cloud框架

      Spring Cloud是一款基于Java語言、采用Spring Boot開發(fā)的微服務框架。它提供了服務治理、分布式配置、分布式任務、服務跟蹤、消息總線、服務負載均衡、服務熔斷降級等一系列問題的解決方案[6]。其中包括的核心組件有:(1)Spring Cloud Consul Config是一個分布式配置中心,為注冊在同一Consul集群下的微服務下發(fā)配置。(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負責維護具體的表信息。還可以通過讀寫分離技術來分散讀寫請求,在高并發(fā)場景下降低單一MySQL服務器的訪問壓力。

      1.4? OpenResty網關負載均衡

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

      2? ?教學評價系統(tǒng)架構與服務

      2.1? 系統(tǒng)架構

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

      2.2? 服務劃分

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

      3? 微服務在教學評價系統(tǒng)中的實現

      3.1? Maven工程

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

      3.2? 管理服務

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

      3.3? 服務治理

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

      3.4? API網關

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

      3.5? OpenResty網關負載均衡

      通過OpenResty內置的lua語言、lua-resty-redis、lua-cJSON和lua-resty-balancer模塊,結合Redis來動態(tài)配置網關。首先在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時表示只有一個網關,這時候就無須再進行負載均衡直接轉發(fā)便可以。大于1時,采用輪詢算法將每個請求分別轉發(fā)到不同的網關上。

      3.6? 服務調用

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

      3.7? 服務熔斷

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

      3.8? 公共模塊

      公共模塊封裝了15個業(yè)務微服務的實體類、響應請求的包裝類、身份認證工具類,每個微服務都可以從該模塊中調用自己需要的類。不同的微服務之間會通過調用其他的微服務來獲取對象。定義CommonResponse類負責系統(tǒng)多數對外響應,需要考慮普適性、可重用性。該類提供了5種響應狀態(tài):代碼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? 身份認證服務

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

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

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

      3.10? 評價服務

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

      4? 結? 論

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

      參考文獻:

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

      [2] 馮志勇,徐硯偉,薛霄,等.微服務技術發(fā)展的現狀與展望 [J].計算機研究與發(fā)展,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的精準幫扶系統(tǒng)研究與實現 [J].河南科技,2021,40(27):12-14.

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

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

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

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

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

      [10] 劉家雨,王永生,劉愛東.基于JSON的防空武器系統(tǒng)應用適配器 [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—),女,漢族,陜西咸陽人,講師,碩士,研究方向:軟件工程、企業(yè)級JavaEE應用開發(fā);李闖男(1999—),男,漢族,陜西咸陽人,本科在讀,研究方向:軟件工程;歐陽宏基(1982—),男,漢族,陜西寶雞人,副教授,碩士,研究方向:軟件工程、軟件設計與體系結構。

      凤翔县| 新蔡县| 英山县| 开远市| 新野县| 青川县| 莱西市| 玛曲县| 卫辉市| 宣城市| 建德市| 平远县| 长岭县| 登封市| 灵川县| 千阳县| 吉林省| 奎屯市| 体育| 思南县| 崇明县| 潮安县| 韶山市| 高阳县| 北票市| 刚察县| 阳谷县| 望谟县| 陵川县| 湘阴县| 蕲春县| 永川市| 新平| 馆陶县| 庐江县| 德昌县| 本溪市| 武隆县| 十堰市| 衡阳市| 惠安县|