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

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

前言

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


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

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

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

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

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


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


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

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

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

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

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

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


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

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

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

例外情況(混合的方式)

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

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


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

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

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

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

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

廣告

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

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