作為一個(gè)程序員,你真的需要微服務(wù)嗎?

2021-03-06    分類: 網(wǎng)站建設(shè)

前言

我們已經(jīng) 設(shè)計(jì)和構(gòu)建 了十多年的軟件,大部分時(shí)間我們一直在使用優(yōu)秀的 Symfony 框架來(lái)實(shí)現(xiàn)這一目標(biāo)。 Symfony 是一個(gè)傳統(tǒng)的單體 PHP 構(gòu)件集,受 Java Spring 的啟發(fā),我們發(fā)現(xiàn)它非常適合 企業(yè) Web 應(yīng)用程序 和 數(shù)字產(chǎn)品 的快速開(kāi)發(fā),而這些正是我們主要經(jīng)濟(jì)來(lái)源。


然而,去年發(fā)布的 Symfony 4 代表了該框架的重點(diǎn)逐漸變化 ; 這變化體現(xiàn)在其遠(yuǎn)離單體架構(gòu)和向 微服務(wù) 靠攏,這種變化背后的方法論在過(guò)去幾年中越來(lái)越受歡迎。

為了說(shuō)明這一轉(zhuǎn)變,新版本在默認(rèn)情況下使用了微內(nèi)核(micro by default), Symfony 組織大力宣傳其新的微內(nèi)核設(shè)計(jì),聲稱與 Symfony 3 相比,編寫應(yīng)用程序所需的代碼減少了 70%。

除了這些優(yōu)點(diǎn)外,這一變化意味著運(yùn)行單個(gè)應(yīng)用程序的開(kāi)銷要小得多,這使得 Symfony 對(duì)于微服務(wù)體系結(jié)構(gòu)的使用更具吸引力。

什么是單體應(yīng)用和微服務(wù)

微服務(wù)設(shè)計(jì)基于將大型傳統(tǒng)(單體)應(yīng)用程序拆分為幾個(gè)小型、不同的應(yīng)用程序的概念。這些應(yīng)用程序?qū)⑻幚韱蝹€(gè)業(yè)務(wù)功能領(lǐng)域,并與其他組件協(xié)作,就像它們是第三方應(yīng)用程序一樣


這真的是一個(gè)新事物嗎,或者這只是一個(gè)具有時(shí)髦名字的面向服務(wù)體架構(gòu)(SOA)? 我們不會(huì)在這里進(jìn)行辯論,畢竟你可以到 Slashdot 和 Hacker News 上討論這個(gè)問(wèn)題。不過(guò),我們要說(shuō)的是,微服務(wù)方法 ( 或者隨便你怎么稱呼它 ) 主要對(duì)大型組織有益。這是因?yàn)榉浅4蟮膽?yīng)用程序可以被分割成幾個(gè)不同的服務(wù),每個(gè)服務(wù)由各自獨(dú)立的開(kāi)發(fā)團(tuán)隊(duì)管理。


微服務(wù)體系結(jié)構(gòu)的另一個(gè)好處是允許靈活地?cái)U(kuò)展一個(gè)特定組件的數(shù)量,而不是整個(gè)應(yīng)用程序。這特性非常適合應(yīng)用在 彈性云計(jì)算 ,但在大多數(shù)情況下,我認(rèn)為這種效率提高會(huì)被一個(gè)大而突出的問(wèn)題所淹沒(méi)。

你真的需要微服務(wù)

我的觀點(diǎn)是,除非你在 Google 或 Netflix 等擁有數(shù)百名軟件開(kāi)發(fā)人員的公司工作,否則你可能不需要微服務(wù)。事實(shí)上,對(duì)于大多數(shù)中小型企業(yè)來(lái)說(shuō),采用這種設(shè)計(jì)可能非常不合適。

我將會(huì)講到一些例外,但是微服務(wù)的開(kāi)發(fā)和維護(hù)成本是很多人都注意到的卻又很少談及的問(wèn)題。我們可以用一個(gè)簡(jiǎn)單的問(wèn)題來(lái)決定是否適合把微服務(wù)作為你的起點(diǎn) : (譯者注:這句子的原文中有個(gè)詞語(yǔ)叫 房間里的大象 ,是指所有人都注意到卻又不被提及的問(wèn)題)

你系統(tǒng)中的某個(gè)組件(例如用戶管理)是否足夠復(fù)雜,以致于需要多個(gè)開(kāi)發(fā)人員全職進(jìn)行持續(xù)開(kāi)發(fā)?

如果答案是否定的,那么微服務(wù)方法可能會(huì)浪費(fèi)您的時(shí)間和金錢。相反,如果你足夠幸運(yùn),能夠在以后達(dá)到這個(gè)規(guī)模,你可能就可以慢慢地把那些需要多人開(kāi)發(fā)的部分分離出來(lái)。


為什么微服務(wù)在開(kāi)發(fā)和運(yùn)維上開(kāi)銷更大

由于您不需要處理大量的分布式系統(tǒng)問(wèn)題,因此單體應(yīng)用程序通常是一個(gè)開(kāi)銷更少的方案。使用像 Symfony 這樣的單體框架所通過(guò)提供開(kāi)箱即用的集成特性提供了許多好處,這些特性可以方便地從應(yīng)用程序的所有區(qū)域訪問(wèn)。你基本上可以避免處理以下的這些問(wèn)題 :

  • 分布式系統(tǒng)上的身份驗(yàn)證和授權(quán)
  • 跟蹤多個(gè)獨(dú)立系統(tǒng)上的復(fù)雜事務(wù)
  • 分布式鎖
  • 服務(wù)間的通信
  • 多個(gè)應(yīng)用程序上的額外配置管理

例外情況(混合的方式)

有時(shí)候微服務(wù)是合適的,但是根據(jù)我的經(jīng)驗(yàn),在這些情況下,可伸縮性需求或容錯(cuò)需求超過(guò)了必須設(shè)計(jì)和管理分布式系統(tǒng)的缺點(diǎn)。這里的一個(gè)很好的例子是像 Monzo Bank 這樣的企業(yè)應(yīng)用,它既需要能夠立即按需求進(jìn)行伸縮,又需要能夠確保系統(tǒng)某個(gè)區(qū)域的故障不會(huì)影響到另一個(gè)區(qū)域 .

我們?cè)?Browser 中多次重復(fù)的一個(gè)好方法是采用混合方法進(jìn)行系統(tǒng)設(shè)計(jì)。這涉及到一個(gè)由支持微服務(wù)包圍的中心整體,但只有在有充分理由的情況下才會(huì)如此。例如,我們最近在將 NLP 處理集成 到應(yīng)用程序中時(shí)使用了這種方法。


我們已經(jīng)構(gòu)建了幾個(gè)系統(tǒng),其中核心業(yè)務(wù)應(yīng)用程序作為一個(gè)整體構(gòu)建 ( 通常在 Symfony 中 ),由獨(dú)立的微服務(wù)管道處理繁重的數(shù)據(jù)處理。這不僅允許我們?cè)诓挥绊懞诵膽?yīng)用程序性能的情況下處理大量數(shù)據(jù)量,而且如果需要,我們可以在不影響平臺(tái)的日常操作前提下,將這些組件下線。

理想情況下,你能夠清楚地理解規(guī)模和未來(lái)的開(kāi)發(fā)需求,這對(duì)于決定體系結(jié)構(gòu)非常重要。你想快速進(jìn)入市場(chǎng)嗎?您想要支持?jǐn)?shù)百萬(wàn)用戶嗎?您是否需要處理 大量的數(shù)據(jù)流 。

盡早做出正確的決定可以增加產(chǎn)品在最短的時(shí)間內(nèi)獲得投資回報(bào)的機(jī)會(huì),而不會(huì)妨礙您將來(lái)的探索。 在后續(xù)計(jì)劃中將組件微服務(wù)化通常比最初的 MVP 開(kāi)發(fā)中微服務(wù)化更具成本效益。

分享名稱:作為一個(gè)程序員,你真的需要微服務(wù)嗎?
網(wǎng)站地址:http://www.bm7419.com/news1/104551.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、企業(yè)網(wǎng)站制作云服務(wù)器、網(wǎng)站營(yíng)銷全網(wǎng)營(yíng)銷推廣、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司