微服務(wù)架構(gòu)設(shè)計方案_第1頁
微服務(wù)架構(gòu)設(shè)計方案_第2頁
微服務(wù)架構(gòu)設(shè)計方案_第3頁
微服務(wù)架構(gòu)設(shè)計方案_第4頁
微服務(wù)架構(gòu)設(shè)計方案_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

微服務(wù)架構(gòu)設(shè)計方案微服務(wù)架構(gòu)技術(shù)設(shè)計方案序言本文是一份微服務(wù)架構(gòu)技術(shù)設(shè)計方案,旨在為讀者提供有關(guān)微服務(wù)的選用、架構(gòu)設(shè)計、思維設(shè)計、系統(tǒng)架構(gòu)設(shè)計、總體設(shè)計和服務(wù)拆分原則等方面的詳細(xì)信息。微服務(wù)的選用微服務(wù)是一種面向服務(wù)的架構(gòu)風(fēng)格,它將應(yīng)用程序設(shè)計為由多個小型自治服務(wù)組成的集合。這些服務(wù)可以獨立部署、升級和擴(kuò)展,從而提高了應(yīng)用程序的可靠性、可維護(hù)性和可擴(kuò)展性。在選擇微服務(wù)架構(gòu)時,需要考慮以下因素:業(yè)務(wù)需求、技術(shù)架構(gòu)、團(tuán)隊能力和運維成本等。架構(gòu)設(shè)計微服務(wù)架構(gòu)需要考慮以下幾個方面的設(shè)計:服務(wù)拆分、服務(wù)通信、數(shù)據(jù)管理、部署和監(jiān)控。服務(wù)拆分是將應(yīng)用程序拆分成多個小型自治服務(wù)的過程,需要根據(jù)業(yè)務(wù)需求和技術(shù)架構(gòu)進(jìn)行拆分。服務(wù)通信需要考慮使用何種通信協(xié)議和通信方式。數(shù)據(jù)管理需要考慮如何處理數(shù)據(jù)的一致性和可靠性。部署需要考慮如何自動化部署和管理服務(wù)。監(jiān)控需要考慮如何監(jiān)控服務(wù)的性能和可用性。思維設(shè)計微服務(wù)架構(gòu)需要考慮以下幾個方面的思維設(shè)計:服務(wù)自治、服務(wù)可替換、服務(wù)可重用、服務(wù)可組合和服務(wù)可測試。服務(wù)自治是指每個服務(wù)都有自己的生命周期和管理方式。服務(wù)可替換是指可以隨時替換服務(wù),而不影響整個應(yīng)用程序。服務(wù)可重用是指可以將服務(wù)用于多個應(yīng)用程序。服務(wù)可組合是指可以將多個服務(wù)組合成一個更大的服務(wù)。服務(wù)可測試是指可以對服務(wù)進(jìn)行單元測試和集成測試。系統(tǒng)架構(gòu)設(shè)計微服務(wù)架構(gòu)需要考慮以下幾個方面的系統(tǒng)架構(gòu)設(shè)計:服務(wù)網(wǎng)關(guān)、服務(wù)注冊和發(fā)現(xiàn)、配置管理和安全管理。服務(wù)網(wǎng)關(guān)是指將所有服務(wù)的入口點集中到一個網(wǎng)關(guān)上,從而簡化客戶端的調(diào)用過程。服務(wù)注冊和發(fā)現(xiàn)是指將所有服務(wù)的信息注冊到一個中心化的服務(wù)注冊表中,并通過服務(wù)發(fā)現(xiàn)機(jī)制來查找服務(wù)。配置管理是指管理所有服務(wù)的配置信息。安全管理是指保護(hù)服務(wù)的安全性,包括身份驗證和授權(quán)等方面??傮w設(shè)計微服務(wù)架構(gòu)需要考慮以下幾個方面的總體設(shè)計:應(yīng)用程序拆分、服務(wù)治理、監(jiān)控和日志管理。應(yīng)用程序拆分是將應(yīng)用程序拆分成多個小型自治服務(wù)的過程。服務(wù)治理是指管理和協(xié)調(diào)所有服務(wù)的運行和交互。監(jiān)控是指對服務(wù)進(jìn)行實時監(jiān)控和性能分析。日志管理是指對服務(wù)的日志進(jìn)行收集和分析。服務(wù)拆分原則服務(wù)拆分需要根據(jù)業(yè)務(wù)需求和技術(shù)架構(gòu)進(jìn)行拆分,同時需要遵循以下原則:單一職責(zé)原則、松耦合原則、高內(nèi)聚原則、自治原則和可測試原則。單一職責(zé)原則是指每個服務(wù)只負(fù)責(zé)一個業(yè)務(wù)功能。松耦合原則是指服務(wù)之間的依賴關(guān)系應(yīng)該盡量少。高內(nèi)聚原則是指每個服務(wù)應(yīng)該盡可能地包含自己的業(yè)務(wù)邏輯。自治原則是指每個服務(wù)都應(yīng)該有自己的生命周期和管理方式??蓽y試原則是指每個服務(wù)都應(yīng)該可以進(jìn)行單元測試和集成測試。結(jié)論本文介紹了微服務(wù)架構(gòu)技術(shù)設(shè)計方案的各個方面,包括微服務(wù)的選用、架構(gòu)設(shè)計、思維設(shè)計、系統(tǒng)架構(gòu)設(shè)計、總體設(shè)計和服務(wù)拆分原則等。通過遵循這些方案,可以構(gòu)建出高可靠性、高可維護(hù)性和高可擴(kuò)展性的應(yīng)用程序。服務(wù)規(guī)劃在進(jìn)行服務(wù)規(guī)劃時,需要考慮到服務(wù)的目標(biāo)、范圍和功能。同時,還需要對服務(wù)的可靠性、可用性和可擴(kuò)展性進(jìn)行評估。在確定了服務(wù)規(guī)劃后,需要對服務(wù)進(jìn)行詳細(xì)的設(shè)計和實現(xiàn)。開發(fā)策略在進(jìn)行開發(fā)時,需要遵循一定的開發(fā)策略。比如,采用敏捷開發(fā)模式,不斷迭代和優(yōu)化服務(wù)。同時,也需要考慮到團(tuán)隊協(xié)作和代碼管理等方面的問題。數(shù)據(jù)庫設(shè)計原則在進(jìn)行數(shù)據(jù)庫設(shè)計時,需要遵循一些基本原則。比如,采用標(biāo)準(zhǔn)化的數(shù)據(jù)結(jié)構(gòu)和命名規(guī)范,保證數(shù)據(jù)的一致性和完整性。同時,也需要考慮到數(shù)據(jù)的安全性和備份等方面的問題。負(fù)載均衡在進(jìn)行負(fù)載均衡時,需要考慮到服務(wù)的實際情況和需求。比如,采用硬件負(fù)載均衡器或軟件負(fù)載均衡器,根據(jù)服務(wù)的流量和負(fù)載情況進(jìn)行動態(tài)調(diào)整。同時,也需要考慮到高可用性和容錯性等方面的問題。性能策略在進(jìn)行性能優(yōu)化時,需要采用一些有效的策略。比如,采用緩存技術(shù)、異步處理和并發(fā)控制等手段,提高服務(wù)的響應(yīng)速度和吞吐量。同時,也需要考慮到資源的合理利用和優(yōu)化等方面的問題。設(shè)計階段在進(jìn)行設(shè)計階段時,需要對服務(wù)的需求、功能和架構(gòu)進(jìn)行詳細(xì)的分析和設(shè)計。同時,也需要考慮到服務(wù)的可擴(kuò)展性和可維護(hù)性等方面的問題。在設(shè)計階段完成后,需要進(jìn)行詳細(xì)的開發(fā)計劃和實施方案的制定。開發(fā)階段在進(jìn)行開發(fā)階段時,需要嚴(yán)格按照設(shè)計方案進(jìn)行實施。同時,也需要進(jìn)行代碼管理和版本控制等方面的工作。在開發(fā)階段完成后,需要進(jìn)行詳細(xì)的測試和性能優(yōu)化等方面的工作。服務(wù)調(diào)用在微服務(wù)架構(gòu)中,服務(wù)之間的調(diào)用是非常重要的。服務(wù)之間的調(diào)用方式主要有AIP網(wǎng)關(guān)調(diào)用、同步調(diào)用、異步調(diào)用等多種方式。AIP網(wǎng)關(guān)調(diào)用是指通過AIP網(wǎng)關(guān)來進(jìn)行服務(wù)調(diào)用。AIP網(wǎng)關(guān)可以進(jìn)行流量控制、安全認(rèn)證、負(fù)載均衡等多種功能,可以保證服務(wù)的穩(wěn)定性和安全性。同步調(diào)用是指服務(wù)之間的調(diào)用是同步的,即調(diào)用方需要等待被調(diào)用方返回結(jié)果后才能繼續(xù)執(zhí)行。同步調(diào)用的優(yōu)點是調(diào)用簡單,但是在高并發(fā)的情況下容易出現(xiàn)阻塞。異步調(diào)用是指服務(wù)之間的調(diào)用是異步的,即調(diào)用方不需要等待被調(diào)用方返回結(jié)果就可以繼續(xù)執(zhí)行。異步調(diào)用的優(yōu)點是可以提高并發(fā)性能,但是需要考慮異步調(diào)用的結(jié)果如何通知調(diào)用方。服務(wù)間調(diào)用的權(quán)限驗證是指在服務(wù)之間進(jìn)行調(diào)用時需要進(jìn)行權(quán)限驗證,保證只有有權(quán)限的服務(wù)才能進(jìn)行調(diào)用,從而保證系統(tǒng)的安全性。服務(wù)編排是指將多個服務(wù)組合在一起形成一個完整的業(yè)務(wù)流程,從而實現(xiàn)更復(fù)雜的業(yè)務(wù)需求。服務(wù)編排可以通過編排工具來實現(xiàn),也可以通過編寫代碼來實現(xiàn)。服務(wù)的熔斷處理是指在服務(wù)出現(xiàn)故障或者異常的情況下,通過熔斷機(jī)制來保證系統(tǒng)的穩(wěn)定性。熔斷處理可以通過設(shè)置超時時間、錯誤率等參數(shù)來實現(xiàn)。統(tǒng)一日志管理是指將系統(tǒng)中的日志進(jìn)行統(tǒng)一管理,從而方便開發(fā)人員進(jìn)行問題排查和系統(tǒng)優(yōu)化。統(tǒng)一日志管理可以通過使用ELK等日志管理工具來實現(xiàn)。4.4統(tǒng)一監(jiān)控管理在微服務(wù)架構(gòu)中,服務(wù)數(shù)量龐大,因此需要進(jìn)行統(tǒng)一的監(jiān)控管理。這可以通過使用監(jiān)控工具來實現(xiàn),例如Prometheus和Grafana等。這些工具可以幫助開發(fā)人員實時監(jiān)控服務(wù)的運行狀況,并及時發(fā)現(xiàn)并解決問題。4.5統(tǒng)一配置管理在微服務(wù)架構(gòu)中,配置管理也是一個重要的問題。由于服務(wù)數(shù)量眾多,因此需要一個統(tǒng)一的配置管理系統(tǒng)來管理服務(wù)的配置。這可以通過使用配置中心來實現(xiàn),例如SpringCloudConfig和Consul等。這些工具可以幫助開發(fā)人員集中管理服務(wù)的配置,并且可以實現(xiàn)動態(tài)配置更新。4.6分布式緩存在微服務(wù)架構(gòu)中,由于服務(wù)之間的調(diào)用會產(chǎn)生大量的網(wǎng)絡(luò)流量,因此需要使用緩存來減少網(wǎng)絡(luò)流量,提高系統(tǒng)性能。分布式緩存可以通過將數(shù)據(jù)存儲在緩存中,避免重復(fù)的計算和查詢,并且可以提高系統(tǒng)的響應(yīng)速度。常用的分布式緩存工具包括Redis和Memcached等。4.7REST資源響應(yīng)結(jié)構(gòu)在微服務(wù)架構(gòu)中,RESTfulAPI是常用的服務(wù)間通信方式。為了保證API的可用性和可擴(kuò)展性,需要定義一種統(tǒng)一的資源響應(yīng)結(jié)構(gòu)。這可以通過使用HAL或JSONAPI等規(guī)范來實現(xiàn)。這些規(guī)范可以幫助開發(fā)人員定義API的響應(yīng)結(jié)構(gòu),并且可以實現(xiàn)版本控制和文檔自動生成等功能。6.測試在微服務(wù)架構(gòu)中,由于服務(wù)數(shù)量龐大,因此需要進(jìn)行充分的測試來保證系統(tǒng)的穩(wěn)定性和可靠性。測試可以分為單元測試、集成測試和端到端測試等不同的層次。常用的測試工具包括JUnit、Mockito和Selenium等。7.持續(xù)集成和持續(xù)部署在微服務(wù)架構(gòu)中,由于服務(wù)數(shù)量眾多,因此需要使用自動化工具來管理服務(wù)的構(gòu)建、測試和部署等過程。持續(xù)集成和持續(xù)部署可以通過使用工具鏈來實現(xiàn),例如Jenkins和TravisCI等。這些工具可以幫助開發(fā)人員自動化管理服務(wù)的構(gòu)建、測試和部署等過程,并且可以實現(xiàn)快速迭代和持續(xù)交付。1.選擇微服務(wù)架構(gòu)微服務(wù)架構(gòu)是一種分布式架構(gòu)風(fēng)格,適用于服務(wù)數(shù)量龐大、業(yè)務(wù)復(fù)雜的系統(tǒng)。選擇微服務(wù)架構(gòu)需要考慮到系統(tǒng)的業(yè)務(wù)特點、團(tuán)隊的技術(shù)水平和組織架構(gòu)等因素。同時,需要注意微服務(wù)架構(gòu)帶來的復(fù)雜性和管理難度,需要采用適當(dāng)?shù)墓ぞ吆头椒▉砉芾砦⒎?wù)架構(gòu)。微服務(wù)架構(gòu)是一種應(yīng)用程序的架構(gòu)風(fēng)格,它由多個小服務(wù)組成。每個服務(wù)都在獨立的進(jìn)程中運行,并使用輕量級交互。通常,這些服務(wù)是HTTP資源API。這些服務(wù)具備獨立的業(yè)務(wù)能力,并可以通過自動化部署方式獨立部署。這種風(fēng)格最大程度地減少了集中管理,并且可以使用多種不同的編程語言和數(shù)據(jù)存儲技術(shù)。對于微服務(wù)架構(gòu)系統(tǒng),由于其服務(wù)粒度小,模塊化清晰,因此首先要做的是對系統(tǒng)整體進(jìn)行功能、服務(wù)規(guī)劃。在交付過程中,從工程實踐出發(fā),組織好代碼結(jié)構(gòu)、配置、測試、部署、運維、監(jiān)控的整個過程,從而有效體現(xiàn)微服務(wù)的獨立性與可部署性。為了與高速公路建設(shè)投資總公司的現(xiàn)有信息系統(tǒng)架構(gòu)無縫連接,本系統(tǒng)采用微服務(wù)技術(shù)架構(gòu)來實現(xiàn)。2.架構(gòu)設(shè)計2.1.思維設(shè)計微服務(wù)架構(gòu)設(shè)計的根本目的是實現(xiàn)價值交付,系統(tǒng)遵循DevOps的開發(fā)理念。實現(xiàn)微服務(wù)技術(shù)架構(gòu),系統(tǒng)在技術(shù)上的要求以及相關(guān)配套服務(wù)的實現(xiàn),主要包括如下:一、技術(shù)上要求:1.前后端分離,web前端通過Http/Https協(xié)議調(diào)用微服務(wù)的API網(wǎng)關(guān),由API網(wǎng)關(guān)再經(jīng)過路由服務(wù)調(diào)用相應(yīng)的微服務(wù)。2.不同微服務(wù)之間通過REST方式互相調(diào)用。3.微服務(wù)之間通過消息中間件實現(xiàn)消息交互機(jī)制。二、配套服務(wù)與功能實現(xiàn):1.需要進(jìn)行相應(yīng)的自動化服務(wù)實現(xiàn),包括自動化構(gòu)建、自動化安裝部署、自動化測試、自動化平臺發(fā)布(Docker實現(xiàn))。2.管理服務(wù),對于微服務(wù)架構(gòu),必須配套相應(yīng)的監(jiān)控與管理服務(wù)、日志管理服務(wù)等。3.協(xié)作服務(wù),運用DevOps思想提升開發(fā)、測試、運維的高效溝通與協(xié)作,實現(xiàn)開發(fā)與運維的一體化。2.2.系統(tǒng)架構(gòu)設(shè)計我們將整個系統(tǒng)根據(jù)業(yè)務(wù)拆分成若干個子系統(tǒng)或微服務(wù)。每個子系統(tǒng)可以部署多個應(yīng)用,多個應(yīng)用之間使用負(fù)載均衡。需要一個服務(wù)注冊中心Eureka,所有的服務(wù)都在注冊中心注冊,負(fù)載均衡也是通過在注冊中心注冊的服務(wù)來使用一定策略來實現(xiàn)。Eureka可部署多個,進(jìn)行高可用保證。所有的客戶端都通過同一個網(wǎng)關(guān)地址訪問后臺的服務(wù),通過路由配置ZUUL網(wǎng)關(guān)來判斷一個URL請求由哪個服務(wù)處理。請求轉(zhuǎn)發(fā)到服務(wù)上的時候使用負(fù)載均衡Ribbon。服務(wù)之間采用feign進(jìn)行調(diào)用。使用斷路器hystrix,及時處理服務(wù)調(diào)用時的超時和錯誤,防止由于其中一個服務(wù)的問題而導(dǎo)致整體系統(tǒng)的癱瘓。需要將產(chǎn)品功能拆分為較小的微服務(wù),以便更好地管理和維護(hù)。2、單一職責(zé):每個微服務(wù)應(yīng)該只負(fù)責(zé)一個特定的功能,避免功能耦合。3、可獨立部署:每個微服務(wù)應(yīng)該可以獨立部署,避免對其他微服務(wù)產(chǎn)生影響。4、可擴(kuò)展性:每個微服務(wù)應(yīng)該可以根據(jù)需要進(jìn)行水平擴(kuò)展,以滿足不同的負(fù)載需求。5、易于測試:每個微服務(wù)應(yīng)該可以單獨進(jìn)行測試,以便更好地發(fā)現(xiàn)和解決問題。6、可重用性:每個微服務(wù)應(yīng)該可以被其他服務(wù)重復(fù)使用,以提高開發(fā)效率和代碼復(fù)用率。7、高內(nèi)聚低耦合:每個微服務(wù)應(yīng)該具有高內(nèi)聚性,避免功能重復(fù)和冗余,同時保持低耦合性,避免對其他服務(wù)產(chǎn)生影響。根據(jù)業(yè)務(wù)功能劃分服務(wù)粒度,總的原則是保持服務(wù)內(nèi)部高內(nèi)聚,服務(wù)之間低耦合。這有助于提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。每個服務(wù)只承擔(dān)一個責(zé)任,即單一職責(zé)原則。這樣可以確保服務(wù)的功能清晰,易于維護(hù)和測試。每個服務(wù)相互隔離,且不互相影響,這是隔離性原則。這有助于避免服務(wù)之間的沖突和故障,提高系統(tǒng)的可靠性。基礎(chǔ)服務(wù)是一些基礎(chǔ)組件,與具體的業(yè)務(wù)無關(guān),例如短信服務(wù)和郵件服務(wù)。這些服務(wù)最容易劃分為微服務(wù),也是我們第一優(yōu)先級分離出來的服務(wù),這是業(yè)務(wù)無關(guān)優(yōu)先原則。為實現(xiàn)負(fù)載均衡,允許相同的服務(wù)在多個節(jié)點注冊相同的服務(wù)名,不同的端口。為避免消費者調(diào)用服務(wù)時產(chǎn)生混亂,需要進(jìn)行服務(wù)名的統(tǒng)一規(guī)劃。規(guī)劃期統(tǒng)一制定每個服務(wù)提供者的服務(wù)名或者模塊標(biāo)示,并采用命名規(guī)則:ModuleName_ServiceName,且所有字符小寫,不同單詞之間以下劃線分隔。新增服務(wù)名時,需要提出申請,審批通過后方可使用。不同的微服務(wù)需進(jìn)行物理隔離。編譯策略是代碼編譯時,各個微服務(wù)獨立編譯、打包,杜絕直接的依賴;工程構(gòu)建是代碼開發(fā)時,各微服務(wù)創(chuàng)建獨立的工程,工程之間不能產(chǎn)生直接依賴;持續(xù)集成是每個微服務(wù)獨立執(zhí)行持續(xù)集成。每個微服務(wù)都有自己獨立的數(shù)據(jù)庫,這會導(dǎo)致后臺管理的聯(lián)合查詢非常困難。目前通用有四種處理方案:嚴(yán)格按照微服務(wù)的劃分來做,將業(yè)務(wù)高度相關(guān)的表放到一個庫中,將業(yè)務(wù)關(guān)系不是很緊密的表嚴(yán)格按照微服務(wù)模式來拆分,MySQL+MHA高可用架構(gòu)、MySQL分布式Proxy水平擴(kuò)展架構(gòu)、MySQL緩存高并發(fā)讀架構(gòu)、MySQL小文件系統(tǒng)大字段存取架構(gòu)、MySQLInforbright/Greenplum統(tǒng)計分析架構(gòu)。數(shù)據(jù)庫按照微服務(wù)的要求進(jìn)行切分,以滿足業(yè)務(wù)高并發(fā)需求。同時,為了實現(xiàn)實時或準(zhǔn)實時數(shù)據(jù)同步,我們將各微服務(wù)數(shù)據(jù)庫數(shù)據(jù)同步到NoSQL數(shù)據(jù)庫中,并在同步的過程中進(jìn)行數(shù)據(jù)清洗。推薦使用MongoDB、HBase等NoSQL數(shù)據(jù)庫來滿足后臺業(yè)務(wù)系統(tǒng)的使用。為了滿足系統(tǒng)的實際需求,我們采用了軟負(fù)載均衡(SoftLoadBalancing)或者客戶端負(fù)載均衡的方案,而不再采用一般的增加負(fù)載均衡服務(wù)器的方式進(jìn)行負(fù)載均衡,如F5、Nginx、LVS等。在SpringCloud中,我們可以配合Eureka的服務(wù)注冊功能,使用Ribbon子項目來實現(xiàn)REST客戶端的負(fù)載均衡。使用Ribbon進(jìn)行負(fù)載均衡,其工作原理可以概括為以下四個步驟:首先,Ribbon根據(jù)其所在Zone優(yōu)先選擇一個負(fù)載較少的EurekaServer;然后,定期從EurekaServer更新并過濾服務(wù)實例列表;接著,根據(jù)指定的負(fù)載均衡策略,從可用的服務(wù)器列表中選擇一個服務(wù)實例的地址;最后,通過RestClient進(jìn)行服務(wù)調(diào)用。Ribbon本身提供了多種負(fù)載均衡策略,如輪詢策略、隨機(jī)選擇策略、最大可用策略和帶有加權(quán)的輪詢策略等。我們可以根據(jù)實際情況來選擇適合的負(fù)載均衡策略。例如,RoundRobinRule是默認(rèn)的輪詢策略,而RandomRule是隨機(jī)選擇策略。另外,BestAvailableRule是最大可用策略,即先過濾出故障服務(wù)器后,選擇一個當(dāng)前并發(fā)請求數(shù)最小的;而WeightedResponseTimeRule是帶有加權(quán)的輪詢策略,對各個服務(wù)器響應(yīng)時間進(jìn)行加權(quán)處理,然后采用輪詢的方式來獲取相應(yīng)的服務(wù)器。AvailabilityFilteringRule是一種可用過濾策略,它先過濾出故障的或并發(fā)請求大于閾值的一部分服務(wù)實例,然后再以線性輪詢的方式從過濾后的實例清單中選出一個。而ZoneAvoidanceRule是一種區(qū)域感知策略,它先使用主過濾條件(區(qū)域負(fù)載器,選擇最優(yōu)區(qū)域)對所有實例過濾并返回過濾后的實例清單,依次使用次過濾條件列表中的過濾條件對主過濾條件的結(jié)果進(jìn)行過濾,判斷最小過濾數(shù)(默認(rèn)1)和最小過濾百分比(默認(rèn)),最后對滿足條件的服務(wù)器則使用RoundRobinRule(輪詢方式)選擇一個服務(wù)器實例。在性能策略方面,需要進(jìn)行網(wǎng)絡(luò)優(yōu)化和配置優(yōu)化。網(wǎng)絡(luò)優(yōu)化方面,可以優(yōu)化組網(wǎng)結(jié)構(gòu),提升網(wǎng)絡(luò)間通訊性能。配置優(yōu)化方面,可以優(yōu)化SpringCloud組件集以及其他組件的配置信息,使得性能最大化。在開發(fā)階段,所有服務(wù)通過Zuul網(wǎng)關(guān)進(jìn)行調(diào)用,不允許直接調(diào)用微服務(wù)提供者。Zuul可能會成為系統(tǒng)瓶頸,復(fù)雜時可考慮為Zuul進(jìn)行主備或負(fù)載均衡處理。采用HTTPREST方式進(jìn)行調(diào)用,針對業(yè)務(wù)需求可以進(jìn)行負(fù)載均衡,負(fù)載均衡的調(diào)用方式有兩種:FeignClient和RestTemplate。系統(tǒng)使用FeignClient方式進(jìn)行服務(wù)調(diào)用。無論是哪種方式,都是通過REST接口調(diào)用服務(wù)的http接口,參數(shù)和結(jié)果默認(rèn)都是通過Jackson序列化和反序列化。因為SpringMVC的RestController定義的接口,返回的數(shù)據(jù)都是通過Jackson序列化成JSON數(shù)據(jù)。系統(tǒng)采用RabbitMQ消息中間件來實現(xiàn)異步調(diào)用。RabbitMQ即一個消息隊列,主要用于實現(xiàn)應(yīng)用程序的異步和解耦,同時也能起到消息緩沖和消息分發(fā)的作用。系統(tǒng)中的API接口都需要某種授權(quán)才能訪問,登錄成功后,會設(shè)置cookie或headertoken等。然后客戶端接下來的請求就會帶著這些驗證信息,從Zuul網(wǎng)關(guān)傳到相應(yīng)的服務(wù)上進(jìn)行驗證。最后,服務(wù)編排是指將多個服務(wù)組合在一起,形成一個整體應(yīng)用。服務(wù)編排可以通過DockerCompose來實現(xiàn)。DockerCompose是一個用于定義和運行多個Docker容器的工具。主要的作用是減少項目中微服務(wù)之間的相互依賴。這可以通過服務(wù)編排來實現(xiàn),即在一個核心的業(yè)務(wù)處理項目中,負(fù)責(zé)與各個微服務(wù)進(jìn)行交互。例如,之前是a調(diào)用b,b調(diào)用c,c調(diào)用d,現(xiàn)在可以將這些操作統(tǒng)一在一個核心項目W中進(jìn)行處理,W服務(wù)使用a時會調(diào)用b,使用b時會調(diào)用c。這種設(shè)計可以理解為面向?qū)ο蟮乃枷?,通過減少方法之間的嵌套調(diào)用,采用一個方法來串聯(lián)業(yè)務(wù)流程。例如,方法W實現(xiàn)了一個完整的業(yè)務(wù)處理,可以通過以下方式實現(xiàn):functionw(){1.調(diào)用方法a;2.調(diào)用方法b;3.調(diào)用方法c;}4.2.服務(wù)熔斷處理在微服務(wù)之間進(jìn)行調(diào)用時,由于各種原因可能會導(dǎo)致遠(yuǎn)程服務(wù)不可用或過載等異常,這時需要一種機(jī)制來進(jìn)行保護(hù)處理。系統(tǒng)可以通過Netflix的Hystrix組件實現(xiàn)熔斷和降級處理來解決這個問題。斷路器是一種設(shè)施,可以在遠(yuǎn)程服務(wù)不可用時自動熔斷(打開開關(guān)),并在遠(yuǎn)程服務(wù)恢復(fù)時自動恢復(fù)(閉合開關(guān))。Netflix的Hystrix組件提供了斷路器、資源隔離和自我修復(fù)功能。4.3.統(tǒng)一日志管理不同的微服務(wù)部署在不同的節(jié)點上,登錄每個節(jié)點查看日志比較麻煩。同時,需要關(guān)聯(lián)多個微服務(wù)日志聯(lián)合查看分析的情況也會更加麻煩。隨著節(jié)點數(shù)量的增加,如果沒有適當(dāng)?shù)墓芾頇C(jī)制和工具,定位和發(fā)現(xiàn)問題的復(fù)雜性將會指數(shù)級增長。因此,需要進(jìn)行統(tǒng)一的日志管理。實現(xiàn)方法如下:1.建立統(tǒng)一的日志管理規(guī)范;2.開發(fā)并使用統(tǒng)一的日志組件,為所有微服務(wù)提供統(tǒng)一的日志服務(wù),由slf4j封裝;3.在每個服務(wù)節(jié)點上部署日志采集Agent組件,由此Agent進(jìn)行日志的采集與轉(zhuǎn)發(fā);4.建立統(tǒng)一的日志中心,所有日志寫入日志中心。4.4.統(tǒng)一監(jiān)控管理使用Hystrix組件進(jìn)行服務(wù)的監(jiān)控,使用Nagios進(jìn)行服務(wù)器等資源的監(jiān)控。具體實現(xiàn)如下:1.Hystrix,監(jiān)控和斷路器。只需在服務(wù)接口上添加Hystrix標(biāo)簽即可實現(xiàn)對該接口的監(jiān)控和斷路器功能。2.HystrixDashboard,監(jiān)控面板。提供一個界面,可以監(jiān)控各個服務(wù)上的服務(wù)調(diào)用所消耗的時間等。3.Turbine,監(jiān)控聚合。使用Hystrix監(jiān)控時,需要打開每個服務(wù)實例的監(jiān)控信息來查看。而Turbine可以將所有服務(wù)實例的監(jiān)控信息聚合到一個地方統(tǒng)一查看,這樣就不需要挨個打開頁面查看。4.5統(tǒng)一配置管理為了實現(xiàn)各微服務(wù)的統(tǒng)一參數(shù)配置以及版本管理,我們采用了SpringCloudConfig配置中心。SpringCloudConfig就是通常意義上的配置中心,它可以把應(yīng)用原本放在本地文件的配置抽取出來放在中心服務(wù)器,從而提供更好的管理和發(fā)布能力。SpringCloudConfig分為服務(wù)端和客戶端,服務(wù)端負(fù)責(zé)將存儲在git中的配置文件發(fā)布成REST接口,客戶端可以從服務(wù)端REST接口獲取配置。但是客戶端并不能主動感知到配置的變化,從而主動去獲取新的配置。為了解決這個問題,我們采用了消息總線的方案:1.Git倉庫、ConfigServer、以及微服務(wù)“ServiceA”、“ServiceB”的實例中都引入了SpringCloudBus,所以他們都連接到了RabbitMQ的消息總線上。2.從Git倉庫中配置的修改到發(fā)起/bus/refresh的POST

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論