一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

實施微服務架構(gòu):用于構(gòu)建下一代云應用程序

星星科技指導員 ? 來源:volansys ? 作者:Chandani Patel,Nupu ? 2022-12-08 16:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:Chandani Patel,Nupur Patel

“微服務”是軟件架構(gòu)領域最流行的流行語之一。雖然我們的第一篇文章討論了微服務的基本原理和優(yōu)勢,但在本文中,我們將解釋企業(yè)如何利用關(guān)鍵架構(gòu)原則在實際用例中實現(xiàn)微服務。

如何從設計基于微服務的解決方案體系結(jié)構(gòu)開始

基于微服務的解決方案架構(gòu)并不總是最適合所有用例,使用一刀切的方法有幾個缺點。在設計基于微服務的解決方案體系結(jié)構(gòu)之前,企業(yè)解決方案架構(gòu)師必須解決以下問題。

微服務架構(gòu)是否適合該解決方案?

應該如何定義微服務架構(gòu)?

在為應用程序的第一個版本構(gòu)建微服務架構(gòu)時,我們建議采用“整體式”方法。這意味著您以簡單的方式構(gòu)建應用程序,以首先驗證您的想法。然后,應用此博客中包含的原則,將初始整體式架構(gòu)擴展并演變?yōu)榛谖⒎盏慕鉀Q方案體系結(jié)構(gòu)。創(chuàng)建架構(gòu)純微服務,不能為業(yè)務提供價值,這是沒有價值的。整體架構(gòu)模式將幫助您了解有關(guān)大型復雜系統(tǒng)的幾個問題和限制(微服務架構(gòu)可能會發(fā)生這種情況)。

1. 將應用程序分解為服務

微服務架構(gòu)是一組松散耦合的服務,將應用程序分解為服務在微服務架構(gòu)實現(xiàn)、部署和 CI/CD 中起著關(guān)鍵作用。

解決方案架構(gòu)師可以根據(jù)需求和解決方案定義分解方法,沒有“最佳”分解方法,但有常見的方法,可以幫助您在下面提到的幾種服務中分解解決方案。要應用分解,您需要了解每個組件的需求和角色、多個組件之間的權(quán)重/鏈接以及整個解決方案的每個組件的更多因素。

分解策略:

按模塊/業(yè)務能力分解:此方法建議為每個模塊或功能定義每個組件,即消息傳遞,日志記錄,設備通信,用戶管理。這有助于您將整個功能/模塊分配給單獨的團隊,其中各個團隊將負責模塊/功能

按域分解: 此方法建議定義要部署解決方案的區(qū)域,并進一步定義該區(qū)域的服務。定義與域驅(qū)動設計 (DDD) 子域?qū)姆?。DDD 將應用程序的問題空間(業(yè)務)稱為域。一個域由多個子域組成。每個子域?qū)跇I(yè)務的不同部分。例如用戶管理、設備管理、設備通信

分解時要考慮的事項:

查找每項服務的邊界,并使其與業(yè)務功能保持一致

專注于定義微服務的范圍,而不僅僅是縮小服務。服務的(正確)大小應該是促進給定業(yè)務能力所需的大小

該服務應該具有很少的操作/功能和簡單的消息格式

確保微服務設計確保服務的敏捷/獨立開發(fā)和部署

每個服務都必須可單獨測試和部署

服務必須具有凝聚力。服務應實現(xiàn)一小組強相關(guān)的函數(shù)

每個服務都應該足夠小,以便可以由 6 名成員組成的小團隊開發(fā)

應用程序必須易于理解和修改

該服務必須在負載均衡器基礎結(jié)構(gòu)(如 ELB)中可縮放

2. 微服務發(fā)現(xiàn)和注冊

微服務架構(gòu)使用服務注冊中心來維護發(fā)送請求的服務位置,該注冊表可以在服務端或客戶端進行管理。服務可以自行注冊,也可以通過第三方(部署腳本)注冊服務。每個服務都應在服務啟動時使用運行狀況檢查接口在注冊表上注冊自身。運行狀況檢查接口可幫助注冊表檢查服務可用性。定義服務注冊表時,必須實現(xiàn)一種機制,使服務的客戶端能夠向一組動態(tài)更改的臨時服務實例發(fā)出請求。

3. 微服務通信

為此,體系結(jié)構(gòu)必須允許每個服務相互通信。以下是定義服務間通信的多種方法:

遠程進程調(diào)用:遠程過程調(diào)用將封裝原則應用于集成服務。如果應用程序需要修改另一個應用程序的數(shù)據(jù),則它通過調(diào)用另一個應用程序來實現(xiàn) 每個服務都可以維護其擁有的數(shù)據(jù)的完整性。此外,每個服務都可以更改其內(nèi)部數(shù)據(jù),而不會使其他每個應用程序受到影響。您可以使用grpc,Apache Thrift和REST進行此類通信。

消息:使用 Kafka、RabbitMq 等工具在服務間通信中使用異步消息傳遞。當每個請求都是獨立的并且不需要任何回調(diào)時,這將起作用

域特定調(diào)用:使用域特定協(xié)議進行服務間調(diào)用,例如SMTP或IMAP用于電子郵件,RTSP,RTMP,HLS或HTTP用于媒體流

4. 微服務觀察

觀察是微服務框架的另一個關(guān)鍵點。這允許您調(diào)試和監(jiān)視每個服務。在設計微服務時,有幾個方面需要解決。

日志聚合:使用來自每個服務實例的集中日志。用戶/審閱者可以搜索和分析日志。他們可以配置多個嚴重錯誤的警報,并按類別檢查錯誤數(shù)。這可以通過將logstash集成為中央日志服務器來實現(xiàn)

運行狀況檢查:運行狀況檢查界面可幫助用戶/審閱者檢查服務是否可用。這可以通過創(chuàng)建具有靜態(tài)響應的 REST 接口并集成負載均衡器來實現(xiàn),該負載均衡器會定期檢查 API 的運行狀況并更新服務狀態(tài)。

應用程序指標:它提供服務狀態(tài)指標,包括信息,例如 – 每個 API 調(diào)用多少次?來自的最大請求數(shù)來自何處?此服務在后臺運行,并與服務器的每個操作交互,因此您選擇的服務應占用最小的運行時開銷。例如,節(jié)點的Appmetrics,JAVA的Coda Hale

日志部署和更改:查看部署和其他更改何時發(fā)生非常有用,因為問題通常在更改后立即發(fā)生。例如,啟用部署狀態(tài)通知,啟用應用程序崩潰通知

5. 微服務數(shù)據(jù)庫管理

大多數(shù)服務需要在數(shù)據(jù)庫中具有持久性數(shù)據(jù)。例如,設備服務存儲有關(guān)設備的信息,用戶服務存儲有關(guān)用戶的信息。

數(shù)據(jù)庫管理策略:

在微服務框架中管理數(shù)據(jù)庫有多種方法。

每個服務的數(shù)據(jù)庫:將每個微服務的持久數(shù)據(jù)保密為該服務,并且只能通過其 API 訪問

解決方案的共享數(shù)據(jù)庫:使用由多個服務共享的(單個)數(shù)據(jù)庫。每個服務使用本地 ACID 事務自由訪問其他服務擁有的數(shù)據(jù)

混合數(shù)據(jù)庫:分別創(chuàng)建一個通用的共享數(shù)據(jù)庫和特定于服務的數(shù)據(jù)庫,例如,在典型的物聯(lián)網(wǎng)云平臺即服務中,架構(gòu)師可以選擇將請求超時存儲在特定數(shù)據(jù)庫中,該數(shù)據(jù)庫只能通過該模塊公開的特定服務進行訪問

管理數(shù)據(jù)庫時要考慮的事項:

某些業(yè)務事務必須強制實施跨多個服務的不變量

某些業(yè)務事務需要查詢由多個服務擁有的數(shù)據(jù)。例如,要檢索用戶設備,它將從用戶服務和設備服務請求詳細信息

某些查詢必須聯(lián)接由多個服務擁有的數(shù)據(jù)

有時必須復制和共享數(shù)據(jù)庫才能擴展

不同的服務有不同的數(shù)據(jù)存儲要求。例如,日志服務將使用LogStash,用戶服務和設備管理將使用MongoDB

6. 微服務外部接口(API 網(wǎng)關(guān))

外部接口是用戶/應用程序與微服務交互的入口。實現(xiàn) API 網(wǎng)關(guān),為來自客戶端的所有服務請求啟用單個入口點。API 網(wǎng)關(guān)將對請求進行身份驗證,并將代理/路由到實際服務。API 網(wǎng)關(guān)為受保護的端點實現(xiàn)安全性(在標頭或查詢參數(shù)中包含訪問令牌)。企業(yè)架構(gòu)師應設計 API 網(wǎng)關(guān)來負責安全性、應用程序數(shù)據(jù)保護和請求限制數(shù)量(每個用戶、每個 IP 或每個應用程序),以防止 DDoS 攻擊。

7. 微服務測試

嘗試測試與其他服務通信的應用程序時,可以執(zhí)行以下兩項操作之一:

部署所有微服務并執(zhí)行端到端測試:在測試環(huán)境中模擬生產(chǎn),并在部署之前運行端到端測試。此方法將測試實際用例并確保服務質(zhì)量。這種測試的缺點是它們非常耗時且調(diào)試非常困難

在單元/集成測試中模擬其他微服務:模擬外部服務并運行單元測試和集成測試。這種方法非??欤荒鼙WC生產(chǎn)安全

測試微服務的常見建議是使用組合集成測試和單元測試。將一些測試作為單元測試運行,其中一些作為集成測試運行,以確保解決方案中所需的質(zhì)量。

在計劃測試時,您必須將服務組件測試和服務集成合同測試作為測試過程的一部分。您可以在開發(fā)中使用多個測試工具/框架,例如Junit,Java和Mocha的Spring Cloud Contract,Chai,Sinon,Proxyquire等,用于Nodejs。您可以通過checkstyle生成HTML報告,以驗證測試報告和代碼覆蓋率。

理想情況下,建議對任何源代碼使用 80% 的代碼覆蓋率。

8. 微服務;持續(xù)集成和部署

每個服務都部署為一組服務實例,以實現(xiàn)吞吐量和可用性。

CICD戰(zhàn)略:

每個實例多個服務: 在同一主機(物理或虛擬)上運行多個服務。例如,將所有 NodeJS 服務部署在 EC2 實例上作為單獨的服務。當您處于開發(fā)階段或有少量用戶訪問您的應用程序時,這將起作用。隨著用戶的增長,此方法會導致資源沖突、內(nèi)存和 CPU 利用率問題以及對服務行為的監(jiān)控不足等問題。

每個主機的服務實例: 在每個主機上部署一個服務。這通過一種有效的方法來平衡負載,例如當特定服務的負載很高時,這克服了每個實例多個服務的問題。在這種情況下,您可以將部署擴展到單個服務的多個實例。這種模式也有一個缺點;假設您有一個不經(jīng)常使用的服務,即訂單爭議,但這將部署在一個實例上,您不能將這里的 CPU 和內(nèi)存資源用于另一個服務

無服務器部署: 使用可刪除服務器和基礎結(jié)構(gòu)管理的部署服務。它允許您壓縮包,將其部署到應用程序服務上,并根據(jù)請求向您收費。在此方法中,您無需擔心資源管理和負載管理。將服務設計為在沒有服務器的情況下運行,使用公共資源(如用于文件存儲的 S3 或 Azure 存儲)、將 Dynamodb 或 Azure 數(shù)據(jù)庫作為數(shù)據(jù)庫、SNS 或事件網(wǎng)格用于在兩個服務之間進行通信,SES 作為電子郵件服務。流行的框架組件包括AWS lambda,Google Cloud function,Azure函數(shù)

CICD期間要考慮的事項:

在定義部署微服務體系結(jié)構(gòu)時,最好檢查以下事項。

開發(fā)中使用的語言、框架和框架版本

每個服務都在工作,并且可以單獨部署和擴展(例如,部署4個服務進行設備管理)

每個服務都與另一個服務隔離

為每個服務添加 CPU 和內(nèi)存約束

監(jiān)視每個服務

檢查部署成本

9. 微服務部署平臺

您還可以使用部署平臺為無服務器和基于服務器的模型自動部署微服務。

如果你有一個龐大的系統(tǒng),有多個集成服務,可以自我管理服務器實例和服務,這通常是一個經(jīng)濟高效的解決方案。您可以將 AWS 云形成和任務定義與 Docker swarm 模式和 Kubernetes 結(jié)合使用,以集中部署、擴展和管理所有應用程序。AWS 云形成允許您使用單個文件對基礎設施進行建模和預置,任務定義允許您為您的環(huán)境定義多個 Docker 映像。一旦環(huán)境啟動,任務定義將負責所有服務,即如果您的服務崩潰,它將自動啟動新的 Docker 實例。

如果您的解決方案很小,但需要服務,那么您可以將服務部署到 AWS Elastic Beanstalk 等 PaaS 平臺,它允許您在熟悉的服務器(如 Apache、Nginx、Passenger 和 IIS)上部署和擴展使用 Java、.NET、PHP、Node.jsPython、Ruby、Go 和 Docker 開發(fā)的 Web 應用程序和服務。它根據(jù)您使用的資源收費。

要部署無服務器代碼,您可以使用多種工具,如 claudia.js它允許您自動執(zhí)行 AWS lambda 和 API 網(wǎng)關(guān)部署。

實現(xiàn)示例:

假設我們正在使用微服務架構(gòu)構(gòu)建物聯(lián)網(wǎng)解決方案,該架構(gòu)包括設備連接、用戶管理、警報和規(guī)則引擎。除此之外,該解決方案還必須向第三方應用程序(如 AndroidiOS)公開 REST API 詳細信息。

由于我們的解決方案使用微服務架構(gòu),因此它將解決方案劃分為多個服務,例如:

API 網(wǎng)關(guān)(例如,提供安全網(wǎng)關(guān)(使用 API 密鑰)的快速網(wǎng)關(guān),包括速率限制等多項功能,將請求路由到微服務)

面向 API 微服務的快速服務

用于服務間通信的塞內(nèi)卡微服務工具

MongoDB集群作為數(shù)據(jù)庫。

Redis for Service Registry & Event Store

Docker、Jenkins 和 Cloud formation 用于部署

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關(guān)注

    關(guān)注

    13

    文章

    9795

    瀏覽量

    88010
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1620

    瀏覽量

    64062
  • 應用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3337

    瀏覽量

    59044
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    阿里云安全肖力:云原生安全構(gòu)筑下一代企業(yè)安全架構(gòu)

    。從縱向角度看,要構(gòu)建覆蓋全方位、全節(jié)點的賬戶安全和安全運營兩大縱深系統(tǒng),完成從扁平式安全架構(gòu)到立體式安全架構(gòu)的全新轉(zhuǎn)變,這也是所有企業(yè)上安全架構(gòu)
    發(fā)表于 09-29 15:15

    微服務網(wǎng)關(guān)gateway的相關(guān)資料推薦

    目錄微服務網(wǎng)關(guān) gateway 概述[路由器網(wǎng)關(guān) Zuul 概述]嵌入式 Zuul 反向代理微服務網(wǎng)關(guān) gateway 概述1、想象一下一個購物應用程序的產(chǎn)品詳情頁面展示了指定商品的信
    發(fā)表于 12-23 08:19

    性能提升1倍,成本直降50%!基于龍蜥指令加速的下一代云原生網(wǎng)關(guān)

    主導的云原生時代,下一代的網(wǎng)關(guān)模式仍然會是傳統(tǒng)的流量網(wǎng)關(guān)與微服務網(wǎng)關(guān)的兩層架構(gòu)嗎?帶著這個問題,并結(jié)合阿里巴巴內(nèi)部沉淀的網(wǎng)關(guān)技術(shù)與運維經(jīng)驗,我們嘗試來回答下,什么是下一代網(wǎng)關(guān)。(圖
    發(fā)表于 08-31 10:46

    java微服務架構(gòu)有哪些

    本文首先簡單介紹了微服務的概念以及使用微服務所能帶來的優(yōu)勢,然后結(jié)合實例介紹了幾個常見的Java微服務框架。微服務在開發(fā)領域的應用越來越廣泛,因為開發(fā)人員致力于創(chuàng)建更大、更復雜的
    的頭像 發(fā)表于 02-09 10:34 ?8955次閱讀
    java<b class='flag-5'>微服務</b><b class='flag-5'>架構(gòu)</b>有哪些

    款VR頭盔免費應用程序發(fā)布,用于推動下一代VR內(nèi)容的新興技術(shù)展示

    Google已經(jīng)發(fā)布了款名為Welcome to Light Fields的 PC VR頭盔免費應用程序 。Google表示,該應用程序可以作為“Google正在用于推動
    發(fā)表于 08-02 14:43 ?1112次閱讀

    什么是微服務和容器?微服務和容器的作用是什么

    微服務是將應用程序拆分為多個服務架構(gòu)類型,這些服務具備構(gòu)成整個
    的頭像 發(fā)表于 01-13 10:54 ?3.3w次閱讀
    什么是<b class='flag-5'>微服務</b>和容器?<b class='flag-5'>微服務</b>和容器的作用是什么

    微服務架構(gòu)有哪些_微服務架構(gòu)設計模式

    小伙伴們知道常用的微服務架構(gòu)框架有哪些嗎?上回我們介紹了些常用的微服務架構(gòu)設計模式,這次我們就來了解
    的頭像 發(fā)表于 05-17 17:06 ?2.9w次閱讀
    <b class='flag-5'>微服務</b><b class='flag-5'>架構(gòu)</b>有哪些_<b class='flag-5'>微服務</b><b class='flag-5'>架構(gòu)</b>設計模式

    微服務架構(gòu)簡介和優(yōu)勢

    微服務是小型的獨立服務,可以獨立演進并單獨部署,以支持持續(xù)集成和持續(xù)交付。微服務架構(gòu)促進開發(fā)和部署由獨立、自主、模塊化、自包含單元組成的應用程序
    的頭像 發(fā)表于 11-30 15:41 ?1990次閱讀
    <b class='flag-5'>微服務</b><b class='flag-5'>架構(gòu)</b>簡介和優(yōu)勢

    什么是微服務架構(gòu)?

    在Medium,我們的技術(shù)堆棧始于2012年的單片Node.js應用程序。我們已經(jīng)構(gòu)建了幾個衛(wèi)星服務,但我們還沒有制定個系統(tǒng)地采用微服務
    的頭像 發(fā)表于 02-24 11:15 ?1643次閱讀
    什么是<b class='flag-5'>微服務</b><b class='flag-5'>架構(gòu)</b>?

    springcloud微服務架構(gòu)

    Spring Cloud是個開源的微服務架構(gòu)框架,它提供了系列工具和組件,用于構(gòu)建和管理分布
    的頭像 發(fā)表于 11-23 09:24 ?2055次閱讀

    docker微服務架構(gòu)實戰(zhàn)

    的容器化技術(shù),為微服務架構(gòu)實施提供了強大的支持。本文將介紹Docker微服務架構(gòu)的實戰(zhàn)經(jīng)驗,包括Docker的概述、
    的頭像 發(fā)表于 11-23 09:26 ?912次閱讀

    設計微服務架構(gòu)的原則

    種軟件架構(gòu)策略,將應用程序分解為組解耦的、自治的服務。這些獨立的應用服務通過API相互通信
    的頭像 發(fā)表于 11-26 08:05 ?923次閱讀
    設計<b class='flag-5'>微服務</b><b class='flag-5'>架構(gòu)</b>的原則

    如何構(gòu)建彈性、高可用的微服務?

    基于微服務應用程序可實現(xiàn)戰(zhàn)略性數(shù)字轉(zhuǎn)型和遷移計劃,對于開發(fā)團隊來說,這種架構(gòu)十分重要。那么,如何來構(gòu)建彈性、高可用的
    的頭像 發(fā)表于 11-26 08:06 ?722次閱讀
    如何<b class='flag-5'>構(gòu)建</b>彈性、高可用的<b class='flag-5'>微服務</b>?

    微服務架構(gòu)與容器的關(guān)系與區(qū)別

    微服務架構(gòu)與容器密切相關(guān)又有所區(qū)別。微服務將大型應用拆分為小型、獨立的服務,而容器基于容器技
    的頭像 發(fā)表于 10-21 17:28 ?553次閱讀

    寶藏級微服務架構(gòu)工具合集

    大量數(shù)據(jù)流。這些工具各有特色,可根據(jù)具體需求和場景選擇合適的來構(gòu)建和管理微服務架構(gòu)。以下是UU小編整理的幾個熱門的微服務
    的頭像 發(fā)表于 12-21 16:33 ?620次閱讀