色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

jf_78858299 ? 來源:超級架構(gòu)師 ? 作者:南極真君 ? 2023-02-24 11:15 ? 次閱讀

微服務(wù)1架構(gòu)的目標是幫助工程團隊更快,更安全,更高質(zhì)量地交付產(chǎn)品。解耦服務(wù)允許團隊快速迭代,對系統(tǒng)的其余部分影響最小。

在Medium,我們的技術(shù)堆棧始于2012年的單片Node.js應(yīng)用程序。我們已經(jīng)構(gòu)建了幾個衛(wèi)星服務(wù),但我們還沒有制定一個系統(tǒng)地采用微服務(wù)架構(gòu)的策略。隨著系統(tǒng)變得越來越復(fù)雜并且團隊不斷發(fā)展,我們在2018年初轉(zhuǎn)向了微服務(wù)架構(gòu)。在這篇文章中,我們希望分享我們有效地做到這一點并避免微服務(wù)綜合癥的經(jīng)驗。

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

首先,讓我們花一點時間來思考微服務(wù)架構(gòu)是什么,不是什么。“微服務(wù)”是那些過載和混亂的軟件工程趨勢之一。這就是我們在Medium認為它是什么:

在微服務(wù)架構(gòu)中,多個松散耦合的服務(wù)協(xié)同工作。每項服務(wù)都專注于一個目的,并具有相關(guān)行為和數(shù)據(jù)的高度凝聚力。

該定義包括三個微服務(wù)設(shè)計原則:

  1. 單一目的 - 每項服務(wù)應(yīng)專注于一個目的并做得好。
  2. 松耦合 - 服務(wù)彼此知之甚少。對一項服務(wù)的更改不應(yīng)要求更改其他服務(wù)。服務(wù)之間的通信應(yīng)僅通過公共服務(wù)接口進行。
  3. 高內(nèi)聚性 - 每項服務(wù)將所有相關(guān)行為和數(shù)據(jù)封裝在一起。如果我們需要構(gòu)建新功能,則所有更改應(yīng)僅本地化為一個服務(wù)。

圖片

Three Principles of Modeling Microservices

當我們對微服務(wù)進行建模時,我們應(yīng)該遵守所有三個設(shè)計原則。這是實現(xiàn)微服務(wù)架構(gòu)全部潛力的唯一途徑。錯過任何一個都會成為反模式。

沒有一個目的,每個微服務(wù)最終會做太多事情,成長為多個“單片”服務(wù)。我們不會從微服務(wù)架構(gòu)中獲得全部好處,我們也會支付運營成本。

如果沒有松散耦合,對一個服務(wù)的更改會影響其他服務(wù),因此我們無法快速安全地發(fā)布更改,這是微服務(wù)架構(gòu)的核心優(yōu)勢。更重要的是,緊密耦合引起的問題可能是災(zāi)難性的,例如數(shù)據(jù)不一致甚至數(shù)據(jù)丟失。

如果沒有高凝聚力,我們將最終得到一個分布式單片系統(tǒng) - 一組混亂的服務(wù),必須同時進行更改和部署才能構(gòu)建單一功能。由于多個服務(wù)協(xié)調(diào)的復(fù)雜性和成本(有時跨多個團隊),分布式單片系統(tǒng)通常比集中式單片系統(tǒng)差得多。

與此同時,了解微服務(wù)不是什么很重要:

  1. 微服務(wù)不是具有少量代碼行或“微”任務(wù)的服務(wù)。這種誤解來自“微服務(wù)”這個名字。微服務(wù)架構(gòu)的目標不是擁有盡可能多的小型服務(wù)。只要符合上述三項原則,服務(wù)就可能是復(fù)雜而實質(zhì)的。
  2. 微服務(wù)不是一直使用新技術(shù)構(gòu)建的服務(wù)。盡管微服務(wù)架構(gòu)允許團隊更輕松地測試新技術(shù),但它并不是微服務(wù)架構(gòu)的主要目標。只要團隊從分離的服務(wù)中受益,就可以使用完全相同的技術(shù)堆棧構(gòu)建新服務(wù)。
  3. 微服務(wù)不是必須從頭開始構(gòu)建的服務(wù)。如果您已經(jīng)擁有一個架構(gòu)良好的單一應(yīng)用程序,請避免養(yǎng)成從頭開始構(gòu)建每個新服務(wù)的習慣。可能有機會直接從單一服務(wù)中提取邏輯。同樣,上述三個原則應(yīng)該仍然有效。

為什么現(xiàn)在?

在Medium,我們總是在做出重大產(chǎn)品或工程決策時會問“為什么現(xiàn)在?”這個問題。“為什么?”是一個顯而易見的問題,但它假設(shè)我們擁有無限的人,時間和資源,這是一個危險的假設(shè)。當你想到“為什么現(xiàn)在?”時,你突然有了更多的限制 - 對當前工作的影響,機會成本,分心的開銷等等。這個問題有助于我們更好地優(yōu)先考慮。

我們現(xiàn)在需要采用微服務(wù)的原因是我們的Node.js單片應(yīng)用程序已經(jīng)成為多個方面的瓶頸。

首先,最緊迫和最重要的瓶頸是其性能。

某些計算量很大且I / O很重的任務(wù)不適合Node.js.我們一直在逐步改進整體應(yīng)用程序,但事實證明它是無效的。它的低劣性能使我們無法提供更好的產(chǎn)品而不會使已經(jīng)非常慢的應(yīng)用程序變慢。

其次,整體應(yīng)用程序的一個重要且有點緊迫的瓶頸是它會減慢產(chǎn)品開發(fā)速度。

由于所有工程師都在單個應(yīng)用程序中構(gòu)建功能,因此它們通常緊密耦合。我們無法靈活地改變系統(tǒng)的一部分,因為它也可能影響其他部分。我們也害怕做出重大改變,因為影響太大,有時難以預(yù)測。整個應(yīng)用程序作為一個整體進行部署,因此如果由于一次錯誤提交導(dǎo)致部署停滯,那么所有其他更改(即使它們完全正常工作)也無法完成。相比之下,微服務(wù)架構(gòu)允許團隊更快地發(fā)貨,學習和迭代。他們可以專注于他們正在構(gòu)建的功能,這些功能與復(fù)雜系統(tǒng)的其余部分分離。更改可以更快地進入生產(chǎn)。他們可以靈活地安全地嘗試重大變革。

在我們新的微服務(wù)架構(gòu)中,更改會在一小時內(nèi)完成生產(chǎn),工程師不必擔心它會如何影響系統(tǒng)的其他部分。該團隊還探索了在開發(fā)中安全使用生產(chǎn)數(shù)據(jù)的方法2多年來一直是白日夢。隨著我們的工程團隊的發(fā)展,所有這些都非常重要。

第三,單一應(yīng)用程序使得難以為特定任務(wù)擴展系統(tǒng)或隔離不同類型任務(wù)的資源問題。

使用單一的單一應(yīng)用程序,我們必須擴展和縮小整個系統(tǒng),以滿足更多資源需求的任務(wù),即使這意味著系統(tǒng)過度配置用于其他更簡單的任務(wù)。為了緩解這些問題,我們對不同類型的請求進行分片,以分離Node.js進程。它們在一定程度上起作用,但不會擴展,因為這些微單一版本的單片服務(wù)是緊密耦合的。

最后但同樣重要的是,一個重要且即將成為緊迫的瓶頸是它阻止我們嘗試新技術(shù)。微服務(wù)架構(gòu)的一個主要優(yōu)點是每個服務(wù)都可以使用不同的技術(shù)堆棧構(gòu)建,并與不同的技術(shù)集成。這使我們能夠選擇最適合工作的工具,更重要的是,我們可以快速安全地完成工作。

微服務(wù)策略

采用微服務(wù)架構(gòu)并非易事。它可能會出錯,實際上會損害工程生產(chǎn)力。在本節(jié)中,我們將分享七個在采用早期階段幫助我們的策略:

  1. 建立具有明確價值的新服務(wù)
  2. 單片持久存儲被認為是有害的
  3. 解耦“建立服務(wù)”和“運行服務(wù)”
  4. 徹底和一致的可觀察性
  5. 并非每項新服務(wù)都需要從頭開始構(gòu)建
  6. 尊重失敗因為它們會發(fā)生
  7. 從第一天開始就避免使用“微服務(wù)綜合癥”
  8. 建立具有明確價值的新服務(wù)

有人可能會認為采用新的服務(wù)器架構(gòu)意味著產(chǎn)品開發(fā)的長時間停頓以及對所有內(nèi)容的大量重寫。這是錯誤的做法。我們永遠不應(yīng)該為了建立新的服務(wù)而建立新的服務(wù)。每次我們建立新服務(wù)或采用新技術(shù)時,都必須具有明確的產(chǎn)品價值和/或工程價值。

產(chǎn)品價值應(yīng)以我們可以為用戶提供的利益為代表。與在單片Node.js應(yīng)用程序中構(gòu)建值相比,需要一項新服務(wù)來提供值或使其更快地交付值。工程價值應(yīng)該使工程團隊更好,更快。

如果構(gòu)建新服務(wù)沒有產(chǎn)品價值或工程價值,我們將其留在單一的應(yīng)用程序中。如果十年內(nèi)Medium仍然有一個支持某些表面的單片Node.js應(yīng)用程序,那就完全沒了問題。從單一應(yīng)用程序開始實際上有助于我們戰(zhàn)略性地對微服務(wù)進行建模。

建立具有明確價值的新服務(wù)

有人可能會認為采用新的服務(wù)器架構(gòu)意味著產(chǎn)品開發(fā)的長時間停頓以及對所有內(nèi)容的大量重寫。這是錯誤的做法。我們永遠不應(yīng)該為了建立新的服務(wù)而建立新的服務(wù)。每次我們建立新服務(wù)或采用新技術(shù)時,都必須具有明確的產(chǎn)品價值和/或工程價值。

產(chǎn)品價值應(yīng)以我們可以為用戶提供的利益為代表。與在單片Node.js應(yīng)用程序中構(gòu)建值相比,需要一項新服務(wù)來提供值或使其更快地交付值。工程價值應(yīng)該使工程團隊更好,更快。

如果構(gòu)建新服務(wù)沒有產(chǎn)品價值或工程價值,我們將其留在單一的應(yīng)用程序中。如果十年內(nèi)Medium仍然有一個支持某些表面的單片Node.js應(yīng)用程序,那就完全沒了問題。從單一應(yīng)用程序開始實際上有助于我們戰(zhàn)略性地對微服務(wù)進行建模。

單片持久存儲被認為是有害的

建模微服務(wù)的很大一部分是對其持久數(shù)據(jù)存儲(例如,數(shù)據(jù)庫)進行建模。跨服務(wù)共享持久數(shù)據(jù)存儲通常似乎是將微服務(wù)集成在一起的最簡單方法,然而,它實際上是有害的,我們應(yīng)該不惜一切代價避免它。這就是原因。

首先,持久數(shù)據(jù)存儲是關(guān)于實現(xiàn)細節(jié)的。跨服務(wù)共享數(shù)據(jù)存儲會將一個服務(wù)的實現(xiàn)細節(jié)暴露給整個系統(tǒng)。如果該服務(wù)更改了數(shù)據(jù)的格式,或者添加了緩存層,或者切換到不同類型的數(shù)據(jù)庫,則還必須相應(yīng)地更改許多其他服務(wù)。這違反了松散耦合的原則。

其次,持久數(shù)據(jù)存儲不是服務(wù)行為,即如何修改,解釋和使用數(shù)據(jù)。如果我們跨服務(wù)共享數(shù)據(jù)存儲,則意味著其他服務(wù)也必須復(fù)制服務(wù)行為。這違反了高內(nèi)聚的原則 - 給定域中的行為泄露給多個服務(wù)。如果我們修改一個行為,我們將不得不一起修改所有這些服務(wù)。

在微服務(wù)架構(gòu)中,只有一個服務(wù)應(yīng)該負責特定類型的數(shù)據(jù)。所有其他服務(wù)應(yīng)該通過負責服務(wù)的API請求數(shù)據(jù),或者保留數(shù)據(jù)的只讀非規(guī)范(可能具體化)副本。

這可能聽起來很抽象,所以這是一個具體的例子。假設(shè)我們正在構(gòu)建一個新的推薦服務(wù),它需要來自規(guī)范帖子表的一些數(shù)據(jù),目前在AWS DynamoDB中。我們可以通過兩種方式之一為新推薦服務(wù)提供發(fā)布數(shù)據(jù)。

圖片

在單片存儲模型中,推薦服務(wù)可以直接訪問單片應(yīng)用程序所執(zhí)行的相同持久存儲。這是一個壞主意,因為:

緩存可能很棘手。如果推薦服務(wù)與單一應(yīng)用程序共享相同的緩存,我們也必須在推薦服務(wù)中復(fù)制緩存實現(xiàn)細節(jié);如果推薦服務(wù)使用自己的緩存,當單片應(yīng)用更新帖子數(shù)據(jù)時,我們將不知道何時使其緩存無效。

如果單片應(yīng)用程序決定更改為使用RDS而不是DynamoDB來存儲帖子數(shù)據(jù),我們將不得不重新實現(xiàn)推薦服務(wù)中的邏輯以及訪問帖子數(shù)據(jù)的所有其他服務(wù)。

單片應(yīng)用程序具有解釋帖子數(shù)據(jù)的復(fù)雜邏輯,例如,如何確定帖子是否應(yīng)該對給定用戶不可見。我們必須在推薦服務(wù)中重新實現(xiàn)這些邏輯。一旦整體應(yīng)用程序更改或添加新邏輯,我們也需要在任何地方進行相同的更改。

即使推薦服務(wù)是自己的數(shù)據(jù)訪問模式的錯誤選項,推薦服務(wù)仍然停留在DynamoDB上。

在解耦存儲模型中,推薦服務(wù)不能直接訪問發(fā)布數(shù)據(jù),也不能直接訪問任何其他新服務(wù)。發(fā)布數(shù)據(jù)的實現(xiàn)細節(jié)僅保留在一個服務(wù)中。有不同的方法來實現(xiàn)這一目標。

Option A 理想情況下,應(yīng)該有一個擁有帖子數(shù)據(jù)的Post服務(wù),其他服務(wù)只能通過Post服務(wù)的API訪問郵政數(shù)據(jù)。但是,為所有核心數(shù)據(jù)模型構(gòu)建新服務(wù)可能是一項昂貴的前期投資。

當人員配置有限時,還有一些更實用的方法。根據(jù)數(shù)據(jù)訪問模式,它們實際上可能是更好的方式。

在選項B中,單一應(yīng)用程序可讓推薦服務(wù)知道何時更新相關(guān)的帖子數(shù)據(jù)。通常,這不必立即發(fā)生,因此我們可以將其卸載到排隊系統(tǒng)。

在選項C中,ETL管道生成推薦服務(wù)的發(fā)布數(shù)據(jù)的只讀副本,以及可能對推薦有用的其他數(shù)據(jù)。在這兩個選項中,推薦服務(wù)完全擁有其數(shù)據(jù),因此它可以靈活地緩存數(shù)據(jù)或使用最適合的數(shù)據(jù)庫技術(shù)。

解耦“建立服務(wù)”和“運行服務(wù)”

如果構(gòu)建微服務(wù)很難,那么運行服務(wù)往往更難。當運行服務(wù)與構(gòu)建每個服務(wù)相結(jié)合時,它會減慢工程團隊的速度,團隊必須不斷重新發(fā)明這樣做。我們希望讓每項服務(wù)都專注于自己的工作而不用擔心如何運行服務(wù)的復(fù)雜問題,包括網(wǎng)絡(luò),通信協(xié)議,部署,可觀察性等。服務(wù)管理應(yīng)該與每個服務(wù)的實現(xiàn)完全分離。

將“構(gòu)建服務(wù)”和“運行服務(wù)”分離的策略是使運行服務(wù)任務(wù)與服務(wù)技術(shù)無關(guān),并且使自己的意見,以便應(yīng)用工程師可以完全專注于每個服務(wù)自己的業(yè)務(wù)邏輯。

由于最近在容器化,容器編排,服務(wù)網(wǎng)格,應(yīng)用程序性能監(jiān)控等方面的技術(shù)進步,“運行服務(wù)”的解耦變得比以往更容易實現(xiàn)。

網(wǎng)絡(luò)。網(wǎng)絡(luò)(例如,服務(wù)發(fā)現(xiàn),路由,負載平衡,流量路由等)是運行服務(wù)的關(guān)鍵部分。傳統(tǒng)方法是為每種平臺/語言提供庫。它工作但不理想,因為應(yīng)用程序仍然需要非常繁瑣的工作來集成和維護庫。通常,應(yīng)用程序仍然需要單獨實現(xiàn)某些邏輯。現(xiàn)代解決方案是在Service Mesh中運行服務(wù)。在Medium,我們使用Istio和Envoy作為邊車代理。構(gòu)建服務(wù)的應(yīng)用工程師根本不需要擔心網(wǎng)絡(luò)問題。

通信協(xié)議。無論您選擇哪種技術(shù)堆棧或語言來構(gòu)建微服務(wù),從一個高效,類型化,跨平臺且需要最少開發(fā)開銷的成熟RPC解決方案開始是非常重要的。支持向后兼容性的RPC解決方案也使部署服務(wù)更加安全,即使它們之間存在依賴關(guān)系。在Medium,我們選擇了gRPC。

一種常見的替代方案是基于HTTP的REST + JSON,它長期以來一直是服務(wù)器通信的福音解決方案。但是,盡管該堆棧非常適合瀏覽器與服務(wù)器通信,但它對于服務(wù)器到服務(wù)器的通信效率很低,尤其是當我們需要發(fā)送大量請求時。如果沒有自動生成的存根和樣板代碼,我們將不得不手動實現(xiàn)服務(wù)器/客戶端代碼。可靠的RPC實現(xiàn)不僅僅包裝網(wǎng)絡(luò)客戶端。另外,REST是“自以為是”,但總是讓每個人都對每個細節(jié)都達成一致很困難,例如,這個調(diào)用真的是REST,還是只是一個RPC?這是一種資源還是一種操作?等等

部署。擁有一致的方法來構(gòu)建,測試,打包,部署和管理服務(wù)非常重要。所有Medium的微服務(wù)都在容器中運行。目前,我們的編排系統(tǒng)是AWS ECS和Kubernetes的混合體,但僅限于Kubernetes。

我們構(gòu)建了自己的系統(tǒng)來構(gòu)建,測試,打包和部署服務(wù),稱為BBFD。它在一致地跨服務(wù)工作和為個人服務(wù)提供采用不同技術(shù)堆棧的靈活性之間取得平衡。它的工作方式是讓每個服務(wù)提供基本信息,例如,要監(jiān)聽的端口,構(gòu)建/測試/啟動服務(wù)的命令等,BBFD將負責其余的工作。

徹底和一致的可觀察性

可觀察性包括允許我們了解系統(tǒng)如何工作的過程,約定和工具,以及在不工作時對問題進行分類。可觀察性包括日志記錄,性能跟蹤,指標,儀表板,警報,并且對于微服務(wù)架構(gòu)的成功至關(guān)重要。

當我們從單個服務(wù)遷移到具有許多服務(wù)的分布式系統(tǒng)時,可能會發(fā)生兩件事:

我們失去了可觀察性,因為它變得更難或更容易被忽視。

不同的團隊重新發(fā)明了輪子,我們最終得到了零碎的可觀察性,這實際上是低可觀察性,因為很難使用碎片數(shù)據(jù)連接點或分類任何問題。

從一開始就具有良好且一致的可觀察性非常重要,因此我們的DevOps團隊提出了一致的可觀察性策略,并構(gòu)建了支持實現(xiàn)這一目標的工具。每項服務(wù)都會自動獲取詳細的DataDog儀表板,警報和日志搜索,這些服務(wù)在所有服務(wù)中也是一致的。我們還大量使用LightStep來了解系統(tǒng)的性能。

并非每一項新服務(wù)都需要從零開始構(gòu)建

在微服務(wù)架構(gòu)中,每個服務(wù)都做一件事并且做得非常好。請注意,它與如何構(gòu)建服務(wù)無關(guān)。如果您從單一服務(wù)遷移,請記住,如果您可以從單片應(yīng)用程序中剝離微服務(wù)并不總是必須從頭開始構(gòu)建。

在這里,我們采取務(wù)實的態(tài)度。我們是否應(yīng)該從頭開始構(gòu)建服務(wù)取決于兩個因素:(1)Node.js適合該任務(wù)的程度如何;(2)在不同的技術(shù)堆棧中重新實現(xiàn)的成本是多少。

如果Node.js是一個很好的技術(shù)選項并且現(xiàn)有的實現(xiàn)很好,我們將代碼從單片應(yīng)用程序中刪除,并用它創(chuàng)建一個微服務(wù)。即使采用相同的實現(xiàn),我們?nèi)詫@得微服務(wù)架構(gòu)的所有好處。

我們的單片Node.js單片應(yīng)用程序的架構(gòu)使我們可以相對輕松地使用現(xiàn)有實現(xiàn)構(gòu)建單獨的服務(wù)。我們將在本文稍后討論如何正確構(gòu)建單片。

尊重失敗,因為他們會發(fā)生

在分布式環(huán)境中,更多的東西可能會失敗,而且它們會失敗。如果處理不當,任務(wù)關(guān)鍵型服務(wù)的失敗可能是災(zāi)難性的。我們應(yīng)該始終考慮如何測試故障并優(yōu)雅地處理故障。

  1. 首先,我們應(yīng)該期待一切都會在某些時候失敗。
  2. 對于RPC調(diào)用,需要付出額外的努力來處理故障情況。
  3. 確保我們在發(fā)生故障時具有良好的可觀察性(如上所述)。
  4. 在線提供新服務(wù)時始終測試失敗。它應(yīng)該是新服務(wù)檢查列表的一部分。
  5. 盡可能構(gòu)建自動恢復(fù)。

從第一天起避免使用微服務(wù)綜合癥

微服務(wù)不是靈丹妙藥 - 它解決了一些問題,但創(chuàng)造了一些其他問題,我們將其稱為“微服務(wù)綜合癥”。如果我們從第一天開始就不去考慮它們,那么事情會變得很快,如果我們以后再照顧它們會花費更多。以下是一些常見癥狀。

  1. 建模不良的微服務(wù)造成的傷害大于好處,特別是當你有超過幾個時。
  2. 允許太多不同的語言/技術(shù)選擇,這會增加運營成本并使工程組織分散。
  3. 將運營服務(wù)與構(gòu)建服務(wù)相結(jié)合,這大大增加了每項服務(wù)的復(fù)雜性并減慢了團隊的速度。
  4. 忽略數(shù)據(jù)建模,最終得到具有單片數(shù)據(jù)存儲的微服務(wù)。
  5. 缺乏可觀察性,這使得難以對性能問題或故障進行分類。
  6. 當遇到問題時,團隊傾向于創(chuàng)建新服務(wù)而不是修復(fù)現(xiàn)有服務(wù),即使后者可能是更好的選擇。
  7. 即使服務(wù)松散耦合,缺乏整個系統(tǒng)的整體視圖也可能存在問題。

我們應(yīng)該停止構(gòu)建單片服務(wù)嗎?

隨著最近的技術(shù)創(chuàng)新,采用微服務(wù)架構(gòu)要容易得多。這是否意味著我們都應(yīng)該停止構(gòu)建單一服務(wù)?

雖然新技術(shù)支持得更好,但微服務(wù)架構(gòu)仍然存在高度復(fù)雜性和復(fù)雜性。對于小型團隊來說,單一的應(yīng)用程序通常仍然是更好的選擇。但是,請花些時間來構(gòu)建單片應(yīng)用程序,以便以后在系統(tǒng)和團隊成長時更容易遷移到微服務(wù)架構(gòu)。

從單一體系結(jié)構(gòu)開始是很好的,但要確保模塊化并使用上述三種微服務(wù)原則(單一用途,松散耦合和高內(nèi)聚)來構(gòu)建它,除了“服務(wù)”在同一技術(shù)堆棧中實現(xiàn),一起部署并在同一進程中運行。

在Medium,我們在早期的單片應(yīng)用程序中做出了一些很好的架構(gòu)決策。

我們的單片應(yīng)用程序由組件高度模塊化,即使它已經(jīng)發(fā)展成為一個非常復(fù)雜的應(yīng)用程序,包括Web服務(wù)器,后端服務(wù)和離線事件處理器。脫機事件處理器單獨運行,但使用完全相同的代碼。這使得將一大塊業(yè)務(wù)邏輯剝離到單獨的服務(wù)相對容易,只要新服務(wù)提供與原始實現(xiàn)相同(高級)的接口即可。

我們的整體應(yīng)用程序在較低級別封裝了數(shù)據(jù)存儲詳細信息。每種數(shù)據(jù)類型(例如,數(shù)據(jù)庫表)具有兩層實現(xiàn):數(shù)據(jù)層和服務(wù)層。

  1. 數(shù)據(jù)層處理對一種特定類型數(shù)據(jù)的CRUD操作。
  2. 服務(wù)層處理一種特定類型數(shù)據(jù)的高級邏輯,并為系統(tǒng)的其余部分提供公共API。服務(wù)不共享它們之間的數(shù)據(jù)存儲。

這有助于我們采用微服務(wù)架構(gòu),因為一種類型數(shù)據(jù)的實現(xiàn)細節(jié)完全隱藏在代碼庫的其余部分。創(chuàng)建新服務(wù)來處理某些類型的數(shù)據(jù)相對容易且安全。

單片應(yīng)用程序還可以幫助我們對微服務(wù)進行建模,并使我們能夠靈活地專注于系統(tǒng)中最重要的部分,而不是從頭開始為所有微服務(wù)建模。

結(jié)論

單片Node.js應(yīng)用程序為我們服務(wù)了好幾年,但它開始減慢我們從運送偉大的項目和快速迭代。我們開始系統(tǒng)地和戰(zhàn)略性地采用微服務(wù)架構(gòu)。我們?nèi)蕴幱谶@一旅程的早期階段,但我們已經(jīng)看到了它的優(yōu)勢和潛力 - 它大大提高了開發(fā)效率,使我們能夠大膽地思考并實現(xiàn)大量的產(chǎn)品改進,并解鎖了工程團隊以安全地測試新技術(shù)。

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

    關(guān)注

    18

    文章

    1712

    瀏覽量

    67005
  • medium
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    955
  • 微服務(wù)架構(gòu)

    關(guān)注

    0

    文章

    25

    瀏覽量

    2959
收藏 人收藏

    評論

    相關(guān)推薦

    微服務(wù)架構(gòu)和CQRS架構(gòu)基本概念介紹

    微服務(wù)架構(gòu)現(xiàn)在很熱,到處可以看到各大互聯(lián)網(wǎng)公司的微服務(wù)實踐的分享總結(jié)。但是,我今天的分享和微服務(wù)沒有關(guān)系,希望可以帶給大家一些新的東西。如果一定要說
    發(fā)表于 05-22 09:03

    微服務(wù)架構(gòu)與實踐摘要

    本文主要類容是對微服務(wù)架構(gòu)與實踐摘要解析。微服務(wù)架構(gòu)中的 “微” 體現(xiàn)了其核心要素,即服務(wù)的微型化,就是每個
    的頭像 發(fā)表于 02-07 16:57 ?6129次閱讀
    <b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>與實踐摘要

    微服務(wù)架構(gòu)多微才合適

    大家也都認可,隨著數(shù)據(jù)量、流量、業(yè)務(wù)復(fù)雜度的提升,服務(wù)架構(gòu)架構(gòu)演進中的必由之路,今天要討論的話題是:微服務(wù)架構(gòu)多“微”才合適?
    的頭像 發(fā)表于 02-07 17:14 ?3377次閱讀
    <b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>多微才合適

    微服務(wù)架構(gòu)與實踐基礎(chǔ)篇

    微服務(wù)架構(gòu)中,應(yīng)用程序由多個服務(wù)組成,每個服務(wù)都是高度自治的獨立業(yè)務(wù)實體,可以運行在獨立的進程中,不同的服務(wù)能非常容易地部署到不同的主機上
    的頭像 發(fā)表于 04-10 14:23 ?4238次閱讀
    <b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>與實踐基礎(chǔ)篇

    什么是微服務(wù)架構(gòu)_微服務(wù)架構(gòu)的優(yōu)缺點及應(yīng)用

    什么是微服務(wù)架構(gòu) 簡單地說,微服務(wù)是系統(tǒng)架構(gòu)上的一種設(shè)計風格, 它的主旨是將一個原本獨立的系統(tǒng)拆分成多個小型服務(wù),這些小型
    的頭像 發(fā)表于 06-02 10:03 ?1.7w次閱讀
    什么是<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>_<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的優(yōu)缺點及應(yīng)用

    SOA架構(gòu)微服務(wù)架構(gòu)的主要區(qū)別

    SOA和微服務(wù)架構(gòu)一個層面的東西,而對于ESB和微服務(wù)網(wǎng)關(guān)是一個層面的東西,一個談到是架構(gòu)風格和方法,一個談的是實現(xiàn)工具或組件。SOA架構(gòu)
    的頭像 發(fā)表于 05-04 14:11 ?5855次閱讀
    SOA<b class='flag-5'>架構(gòu)</b>和<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的主要區(qū)別

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

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

    微服務(wù)架構(gòu)的特點_微服務(wù)架構(gòu)適用場景

     微服務(wù)架構(gòu)是一項在云中部署應(yīng)用和服務(wù)的新技術(shù)。
    的頭像 發(fā)表于 05-17 17:28 ?5131次閱讀

    微服務(wù)架構(gòu)中的服務(wù)之間如何互相調(diào)用呢?

    微服務(wù)架構(gòu)中,需要調(diào)用很多服務(wù)才能完成一項功能。服務(wù)之間如何互相調(diào)用就變成微服務(wù)架構(gòu)中的一個關(guān)
    的頭像 發(fā)表于 01-31 09:46 ?2193次閱讀

    從分層架構(gòu)微服務(wù)架構(gòu)介紹(五)

    本文要介紹的是 服務(wù)架構(gòu) (Service-Based Architecture, SBA )。 SBA 可以看成是單體架構(gòu)微服務(wù)架構(gòu)
    的頭像 發(fā)表于 05-10 17:02 ?841次閱讀
    從分層<b class='flag-5'>架構(gòu)</b>到<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>介紹(五)

    springcloud微服務(wù)架構(gòu)

    Spring Cloud是一個開源的微服務(wù)架構(gòu)框架,它提供了一系列工具和組件,用于構(gòu)建和管理分布式系統(tǒng)中的微服務(wù)。它基于Spring框架,旨在通過簡化開發(fā)過程和降低系統(tǒng)復(fù)雜性來幫助開發(fā)人員構(gòu)建彈性
    的頭像 發(fā)表于 11-23 09:24 ?1318次閱讀

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

    隨著云計算和容器化技術(shù)的快速發(fā)展,微服務(wù)架構(gòu)在軟件開發(fā)領(lǐng)域中變得越來越流行。微服務(wù)架構(gòu)將一個大型的軟件應(yīng)用拆分成多個小型的、獨立部署的服務(wù)
    的頭像 發(fā)表于 11-23 09:26 ?644次閱讀

    設(shè)計微服務(wù)架構(gòu)的原則

    微服務(wù)是一種軟件架構(gòu)策略,有利于改善整體性能和可擴展性。你可能會想,我的團隊需不需要采用微服務(wù),設(shè)計微服務(wù)架構(gòu)有哪些原則?本文會給你一些靈感
    的頭像 發(fā)表于 11-26 08:05 ?585次閱讀
    設(shè)計<b class='flag-5'>微服務(wù)</b><b class='flag-5'>架構(gòu)</b>的原則

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

    微服務(wù)架構(gòu)與容器云密切相關(guān)又有所區(qū)別。微服務(wù)將大型應(yīng)用拆分為小型、獨立的服務(wù),而容器云基于容器技術(shù),為微服務(wù)提供構(gòu)建、發(fā)布和運行的平臺。區(qū)別
    的頭像 發(fā)表于 10-21 17:28 ?211次閱讀

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

    寶藏級熱門微服務(wù)架構(gòu)工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot簡化了微服務(wù)
    的頭像 發(fā)表于 12-21 16:33 ?66次閱讀
    主站蜘蛛池模板: 久久这里只有热精品18| 乡村教师电影版| 在镜头里被CAO翻了H| 高h浪荡文辣文神奇宝贝| 久热这里只有精品99国产6| 午夜在线观看免费完整直播网页| bt成人种子| 久久资源365| 亚洲h视频在线观看| 东北嫖妓对白粗口| 男生插女生下体| 尤蜜网站在线进入免费| 国产午夜精品视频在线播放 | 国产一及毛片| 日韩人妻少妇一区二区三区| 2019精品国产品在线不卡| 韩国三级久久精品| 网址在线观看你懂我意思吧免费的| 99视频免视看| 美女脱内衣裸身尿口露出来| 亚洲午夜精品A片久久软件| 国产精品久久久久久免费播放| 秋霞电影网午夜鲁丝片| 99久久全国免费久久爱| 久久精品国产亚洲AV未满十八| 亚洲第一综合天堂另类专| 国产成人免费视频| 任你躁国语自产二区在线播放| 91视频3p| 老阿姨才是最有V味的直播| 一个人免费视频在线观看 | 日本调教网站| se01短视频在线观看| 男女疯狂一边摸一边做羞羞视频| 在线观看99| 久久国产视频网站| 一个人的HD高清在线观看| 精品国产影院| 亚洲人成伊人成综合网久久久| 国语自产一区第二页| 亚洲精品国产品国语在线试看|