加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、微服務(wù)設(shè)計(jì)
    • 二、微服務(wù)架構(gòu)設(shè)計(jì)的5個(gè)原則
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

虹科干貨丨設(shè)計(jì)微服務(wù)架構(gòu)的原則

2023/10/28
1527
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

引導(dǎo)語(yǔ)(朋友圈文案):微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴(kuò)展性。你可能會(huì)想,我的團(tuán)隊(duì)需不需要采用微服務(wù),設(shè)計(jì)微服務(wù)架構(gòu)有哪些原則?本文會(huì)給你一些靈感。

簡(jiǎn)介:微服務(wù)是一種軟件架構(gòu)策略,將應(yīng)用程序分解為一組解耦的、自治的服務(wù)。采用微服務(wù)架構(gòu)將改善整體性能和可擴(kuò)展性,本文將概述微服務(wù)設(shè)計(jì)和實(shí)施的基本考慮因素。

微服務(wù)是一種軟件架構(gòu)策略,將應(yīng)用程序分解為一組解耦的、自治的服務(wù)。這些獨(dú)立的應(yīng)用服務(wù)通過(guò)API相互通信。每個(gè)服務(wù)都由其專業(yè)領(lǐng)域的專家團(tuán)隊(duì)管理,以便每個(gè)軟件開(kāi)發(fā)團(tuán)隊(duì)可以控制自己的開(kāi)發(fā)周期,按照自己的時(shí)間表進(jìn)行測(cè)試和部署,使用自己的企業(yè)工具和資源,加速上線時(shí)間。為了評(píng)估你的團(tuán)隊(duì)是否需要采用微服務(wù)架構(gòu)。這里有一些值得深入討論的細(xì)節(jié)。

一、微服務(wù)設(shè)計(jì)

設(shè)計(jì)微服務(wù)架構(gòu)的第一步是形勢(shì)評(píng)估。開(kāi)發(fā)者網(wǎng)站(Developer.com)總結(jié)的十大微服務(wù)設(shè)計(jì)原則之一是單一責(zé)任原則,即每個(gè)服務(wù)只需要將其所有資源投入到微服務(wù)應(yīng)用程序的一個(gè)功能中。

1.通過(guò)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)實(shí)施微服務(wù)

軟件架構(gòu)師需要進(jìn)行領(lǐng)域分析,以確定如何劃分每個(gè)服務(wù)以及需要將哪些元素納入應(yīng)用堆棧中。這種領(lǐng)域分析被稱為領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(Domain Driven Design, DDD)。它將實(shí)體模式和聚合模式等模式應(yīng)用到單個(gè)限界上下文(bounded context)中,以便以更高的計(jì)算精度來(lái)識(shí)別單個(gè)域的邊界。

總之,應(yīng)該圍繞特定的業(yè)務(wù)功能構(gòu)建每個(gè)微服務(wù)。一旦確定了領(lǐng)域并了解了它們的邊界,就可以定義最適合應(yīng)用堆棧的變量了。

2.選擇技術(shù)棧

創(chuàng)建微服務(wù)技術(shù)棧較為特別。通常你需要使用各種工具、框架和編程語(yǔ)言,將它們整合成一個(gè)耦合的系統(tǒng)。在選擇工具時(shí)考慮以下變量:

1) 編程語(yǔ)言

選擇用于微服務(wù)的最佳編程語(yǔ)言,取決于你最熟悉哪種語(yǔ)言、可用于所需功能的庫(kù)以及每種語(yǔ)言提供的功能套件。顯然,選擇你的開(kāi)發(fā)團(tuán)隊(duì)已經(jīng)大范圍使用的語(yǔ)言可以節(jié)省時(shí)間和精力。

根據(jù)2021年JetBrains關(guān)于微服務(wù)的調(diào)查,“用于微服務(wù)開(kāi)發(fā)的三種最流行的語(yǔ)言是Java(41%)、JavaScript(37%)和Python(25%)”。這些流行的編程語(yǔ)言都有大量的在線開(kāi)發(fā)者支持、成功應(yīng)用開(kāi)發(fā)的示例、運(yùn)行環(huán)境,比如Node.JS,以及豐富的客戶端庫(kù)。

總之,確保所選的語(yǔ)言適合當(dāng)前業(yè)務(wù)問(wèn)題。例如,Python在數(shù)據(jù)分析中很受歡迎,而JavaScript是全棧開(kāi)發(fā)的最優(yōu)選擇。

2) 數(shù)據(jù)庫(kù)

在為微服務(wù)架構(gòu)構(gòu)建的應(yīng)用程序選擇適合的數(shù)據(jù)庫(kù)時(shí),應(yīng)將可伸縮性、可用性和安全性置于首要位置。選擇一個(gè)最能支持你在微服務(wù)中計(jì)劃使用的數(shù)據(jù)模型的數(shù)據(jù)庫(kù)。你的技術(shù)棧應(yīng)該能夠處理任何應(yīng)用負(fù)載,確保使用故障切換協(xié)議可用性,并保護(hù)應(yīng)用免受惡意攻擊。

3)通信

你的業(yè)務(wù)功能可能需要您的微服務(wù)使用同步的服務(wù)間通信方法執(zhí)行某些操作,對(duì)于其他操作,可能需要使用異步通信??梢允褂枚喾N通信格式和協(xié)議來(lái)輔助微服務(wù)通信,包括HTTP/REST、gRPC和AMQP。
對(duì)于異步通信,使用支持消費(fèi)者組的事件驅(qū)動(dòng)消息代理可以提高可伸縮性和可靠性,確保應(yīng)用程序能夠擴(kuò)展,而不會(huì)導(dǎo)致任何服務(wù)無(wú)法訪問(wèn)的情況。

4)監(jiān)控

每個(gè)微服務(wù)團(tuán)隊(duì)都負(fù)責(zé)監(jiān)視應(yīng)用程序性能,通常使用日志記錄和可觀察性工具來(lái)跟蹤操作。這使得開(kāi)發(fā)人員和運(yùn)維人員可以跟蹤整個(gè)系統(tǒng),如應(yīng)用程序性能、消息代理流與數(shù)據(jù)庫(kù)資源利用率。

在使用消息代理時(shí),考慮使用一個(gè)日志流,其中每個(gè)微服務(wù)都可以發(fā)布消息。這樣,您可以將首選的日志記錄和可觀察性工具連接到流,并在不減慢應(yīng)用程序的情況下異步監(jiān)視您的應(yīng)用程序。

二、微服務(wù)架構(gòu)設(shè)計(jì)的5個(gè)原則

那么,如何確保你的微服務(wù)架構(gòu)可以發(fā)揮最佳作用?以下是五個(gè)微服務(wù)應(yīng)用程序設(shè)計(jì)原則,可供你參考。

1.低耦合和高內(nèi)聚

低耦合和高內(nèi)聚可以通過(guò)前面提到的單一責(zé)任原則來(lái)解釋。賦予每個(gè)領(lǐng)域團(tuán)隊(duì)單一的職責(zé),有助于加強(qiáng)該領(lǐng)域內(nèi)的內(nèi)聚,使得該服務(wù)內(nèi)的所有功能都在某種程度上緊密耦合。每個(gè)服務(wù)都由其自己的領(lǐng)域?qū)<液凸ぞ吖芾?,但仍然可以通過(guò)API和其他協(xié)議相互通信。這有點(diǎn)像來(lái)自不同部門(mén)的同事如何互動(dòng):當(dāng)有助于完成工作時(shí),大家彼此分享信息,而不會(huì)過(guò)多地談?wù)撆c他人無(wú)關(guān)的細(xì)節(jié)。

2.適應(yīng)性

業(yè)務(wù)應(yīng)用程序很少是靜止不變的。隨著新的業(yè)務(wù)需求的出現(xiàn),行業(yè)的假設(shè)發(fā)生變化,技術(shù)能力提供更多功能,軟件也會(huì)發(fā)生變化。微服務(wù)應(yīng)該具有可適應(yīng)性,以滿足新需求出現(xiàn)時(shí)可以進(jìn)行適應(yīng)。世界在變化,人們?cè)谧兓?,所以軟件也?yīng)該變化。

3.基礎(chǔ)設(shè)施自動(dòng)化

實(shí)現(xiàn)微服務(wù)的一個(gè)原因是它們能夠自動(dòng)化流程,從而提高整體可擴(kuò)展性。借助 Kubernetes 等容器編排系統(tǒng),您可以使用單個(gè)鏡像與微服務(wù)一起部署微服務(wù)的整個(gè)數(shù)據(jù)庫(kù)。在Kubernetes控制器的幫助下,這些可移植性優(yōu)勢(shì)可以幫助DevOps團(tuán)隊(duì)管理、調(diào)度和編排自動(dòng)容器部署。

4.離散邊界

實(shí)施微服務(wù)要求在任何給定應(yīng)用程序中的服務(wù)都要維護(hù)自己的分散數(shù)據(jù)。服務(wù)邊界應(yīng)該將與任何單個(gè)服務(wù)相關(guān)的所有邏輯和數(shù)據(jù)與應(yīng)用程序中的其他服務(wù)隔離開(kāi)。

這也是允許容器化微服務(wù)進(jìn)行獨(dú)立部署的邏輯。這個(gè)原則也有一些反對(duì)者,他們認(rèn)為這會(huì)導(dǎo)致數(shù)據(jù)冗余激增。但建立這些明確的邊界最大的好處之一是:當(dāng)一個(gè)微服務(wù)承載自己的數(shù)據(jù)時(shí),任何奇怪的行為都被限制在微服務(wù)內(nèi)部。

5.為故障而設(shè)計(jì)

干擾是經(jīng)常發(fā)生的,應(yīng)用服務(wù)會(huì)在毫無(wú)征兆的情況下癱瘓。例如,挖掘機(jī)開(kāi)挖光纜中斷網(wǎng)絡(luò)操作,人們會(huì)忘記續(xù)訂域名,系統(tǒng)會(huì)因防火墻故障引起的數(shù)據(jù)連接問(wèn)題而中斷等。所以,需要盡力考慮潛在的故障的可實(shí)施對(duì)策。設(shè)計(jì)具有彈性的解決方案,比如使用斷路器模式,以防止當(dāng)某個(gè)微服務(wù)無(wú)法執(zhí)行給定操作時(shí)其他服務(wù)中斷。

虹科是Redis原廠的中國(guó)區(qū)戰(zhàn)略合作伙伴。我們持續(xù)關(guān)注各行業(yè)當(dāng)下急切需求,專注于為企業(yè)解答疑問(wèn),制定專屬服務(wù),提供一站式數(shù)據(jù)庫(kù)和商業(yè)智能解決方案。了解更多【企業(yè)級(jí)數(shù)據(jù)庫(kù)解決方案】及【企業(yè)緩存指南】,歡迎前往虹科云科技官網(wǎng)!

虹科官網(wǎng):https://www.hkaco.com/

虹科云科技官網(wǎng):企業(yè)級(jí)云解決方案引領(lǐng)者-云計(jì)算-虹科云科技?(hongcloudtech.com)

聯(lián)系虹科工程師:15528663362

聯(lián)系方式鏈接:https://t.dustess.com/Fc6fpUjg

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
RTL8211F-CG 1 Realtek Semiconductor Ethernet Transceiver, QCC40, QFN-40
暫無(wú)數(shù)據(jù) 查看
DP83867IRRGZR 1 Texas Instruments Industrial temperature, robust gigabit Ethernet PHY transceiver 48-VQFN -40 to 85

ECAD模型

下載ECAD模型
$59.73 查看
AD73311ARSZ 1 Analog Devices Inc Single-Channel, 3 V and 5 V Front-End Processor for General Purpose Applications Including Speech and Telephony

ECAD模型

下載ECAD模型
$10.72 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

虹科是一家資源整合及技術(shù)服務(wù)落地供應(yīng)商,與全球頂尖公司深度技術(shù)合作,專注于制造業(yè)、汽車(chē)、生物、醫(yī)藥、測(cè)試與測(cè)量、廣播電視與媒體、通信、網(wǎng)絡(luò)安全、光電等領(lǐng)域,為客戶提供:智能自動(dòng)化、工業(yè)物聯(lián)網(wǎng)、智能感知、數(shù)字化+AR、光電、網(wǎng)絡(luò)安全、測(cè)試測(cè)量、衛(wèi)星與無(wú)線通信、醫(yī)藥環(huán)境監(jiān)測(cè)與驗(yàn)證、生命科學(xué)、汽車(chē)電子、汽車(chē)維修診斷、云科技等解決方案。虹科始終致力于為行業(yè)客戶提供創(chuàng)新及前端的產(chǎn)品和技術(shù)解決方案,為科技社會(huì)發(fā)展助力加碼。