<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          向 5 歲兒童解釋清楚微服務 !

          共 2836字,需瀏覽 6分鐘

           ·

          2024-07-30 08:36

          推薦一個原創(chuàng)技術號-非科班大廠碼農(nóng),號主是機械專業(yè)轉行進入騰訊的后端程序員!


          “我們的服務由可擴展的微服務架構支持”,“我們計劃切換到微服務架構”。

          如果你是一名開發(fā)人員,那么你一定經(jīng)常遇到這些術語,并且肯定會試圖理解——什么是微服務?別擔心!本文將通過真實的例子幫助你深入理解微服務架構。不用擔心!我這篇文章中沒有任何代碼 !

          大型冰淇淋機——Monolith

          暫時忘掉微服務,考慮一下一臺冰淇淋機,它有四個部分——冰淇淋勺、堅果切碎機、巧克力漏斗和草莓糖漿漏斗。冰淇淋勺將一勺香草/芒果冰淇淋加到杯子里,顧名思義,堅果切碎機將切碎的堅果撒在冰淇淋勺上。巧克力或草莓漏斗將所需的液體糖漿倒在冰淇淋勺上。除了冰淇淋勺(來自勺子部分),所有配料都是客戶可選的。

          作為冰淇淋店的老板,您從一臺小型冰淇淋機開始,這臺機器上嵌入了所有這些部件。幸運的是,人們開始喜歡您的冰淇淋,您的業(yè)務也隨之增長。您會怎么做?您可以選擇購買一臺更大的機器,可以在給定的時間內(nèi)完成更多的冰淇淋訂單。但是總有一天您會沒有選擇,因為冰淇淋機器制造商公司已經(jīng)沒有比您當前機器更大的機器了。

          這就是軟件開發(fā)世界中所謂的單體架構。你開發(fā)了一個應用程序,該應用程序的所有不同部分都合并在一個代碼庫中。隨著需求的增加,你購買了性能更強大的機器,但在某個時間點上,總會達到一個極限,當你已經(jīng)擁有了性能最強的機器之后,就沒辦法再擴展了。

          購買更多 (Monolith) 冰淇淋機

          您一定在想,通過購買多臺冰淇淋機就可以避免這種情況。您說對了!因此,您決定不購買功能最強大的冰淇淋機,而是購買多臺小型冰淇淋機。這就是所謂的克隆,對應于軟件世界,就是您可以使用應用程序的多個實例來滿足用戶請求。

          修理損壞的機器

          創(chuàng)業(yè)之初,您聘請了一名技術人員,負責修復機器出現(xiàn)的問題或升級機器。一切都進展順利。但當您購買了多臺機器后,您覺得需要聘請更多技術人員,因為你永遠不想對你的顧客“不可用”。

          現(xiàn)在,應客戶要求,您決定銷售一種新的冰淇淋口味。您決定在冰淇淋勺中添加巧克力冰淇淋。但由于每臺機器的所有四個部件都相互依賴,你的技術人員在添加新冰淇淋口味時遇到了困難。

          但他們設法達到了目標,但是當他們完成新口味的整合后,草莓漏斗停止工作了,因為機器的部件是相互依賴的,修改一個部件會破壞另一個部件。

          每臺機器只有一個目的——微服務

          由于可擴展性有限并且難以維護,您決定換一種思路。您要求機器制造商為這四個部分提供單獨的零件機器。一臺冰淇淋勺零件機器、一臺堅果切碎機零件機器、兩臺漏斗零件機器,分別用于巧克力和草莓糖漿?,F(xiàn)在,您將技術人員分配到獨立的團隊中,每個團隊負責一臺單獨的零件機器。

          這在軟件世界里被稱為微服務架構,其中,大型整體應用程序被劃分為獨立的模塊,每個模塊都獨立作為一個應用程序,專注于執(zhí)行特定的任務。

          整體式架構與微服務

          可擴展性: 您可能已經(jīng)注意到,采用單體式冰淇淋機,到達一定程度后就無法再進行擴展。而使用單獨的部件機器(微服務),只要業(yè)務需要,您幾乎可以無限擴展,

          維護: 在單體式冰淇淋機中添加新的冰淇淋口味會破壞草莓漏斗,因為其組成部件相互依賴。與此類似,如果單體應用程序的一個模塊需要更改數(shù)據(jù)庫模式,那么這樣做可能會破壞應用程序的其他部分。但是,在微服務架構的情況下,您已為每臺零件機器分配了單獨的團隊,每個團隊負責他們控制的零件機器的運行,避免了由于零件機器的相互依賴性而產(chǎn)生的沖突。這種獨立開發(fā)還有助于快速發(fā)布功能,因為大型組織中的團隊內(nèi)部溝通比團隊間溝通更快。

          成本: 您可能想知道通過擁有多臺大型冰淇淋機是否解決了可擴展性問題,但請考慮這樣一種情況:您只想增加鏟子的輸出,而不增加任何其他部件的輸出。在單體式冰淇淋機場景中,您每次都必須購買整臺機器,但如果您擁有微服務部件機器,那么您只需要購買鏟子部件即可。這將節(jié)省您的成本,因為您可以根據(jù)具體服務的請求負載擴大或縮小每個獨立服務的實例。

          時間: 由于整體式冰淇淋機自帶所有部件,您只需將其放在正確的位置并開始使用即可。但是,微服務部件機器在實際使用時需要通過傳送帶(在冰淇淋場景中)進行連接。與此類似,微服務架構中,不同服務之間需要相互通信才能完成工作,有網(wǎng)絡開銷。因此,微服務需要更多時間,

          測試和部署: 單片冰淇淋機的測試和部署非常麻煩,因為所有部件都是相互依賴的,只有當每個部件都集成在一起時,您才能對其進行測試和部署。然而,在微服務部件機中,每個部件機都是獨立的,因此測試和部署單個部件變得更容易。

          我應該直接從微服務開始嗎?

          這個問題的簡短答案是“不”!大多數(shù)專家建議,如果你不需要微服務架構,那么就不要這樣做。不要過度設計 !

          微服務并不總是“微”的

          您可能會覺得,如果您的冰淇淋店已經(jīng)擁有獨立的零件機器,那么這些機器就只是小型零件機器。不!每臺零件機器本身都可以是一臺大型機器,或者它可能有多個克隆機器并行運行以滿足用戶需求。

          例如,考慮到大多數(shù)客戶只喜歡冰淇淋而不喜歡配料,您的鏟子零件機器可能有 20 個鏟子并行運行。類似地,微服務本身可以是獨立的應用程序,這使得它們不那么“微”,并且需要大量的努力來維護和擴展它們。

          結論

          目前正在使用微服務架構的幾家大型互聯(lián)網(wǎng)公司都是從單體應用開始的。一旦達到可擴展性和可維護性的極限,他們就會將單體應用拆分成獨立的組件/服務。

          毫無疑問,微服務架構允許您為不同的服務使用不同的技術,以便更好地擴展和維護,但所有這些都帶來了開銷復雜性,并且需要良好的專業(yè)知識。因此,從結構良好的整體式冰淇淋機開始永遠是件好事,而不是直接從微服務架構開始并讓自己陷入“意外復雜性”。


          推薦閱讀:

          完全整理 | 365篇高質技術文章目錄整理

          一張圖弄清楚緩存架構設計中的經(jīng)典問題及解決方案

          一張圖總結系統(tǒng)設計中的33個黃金法則

          主宰這個世界的10大算法

          徹底理解cookie、session、token

          專注服務器后臺技術棧知識總結分享

          歡迎關注交流共同進步
          也可掃碼添加個人微信交流技術,職場發(fā)展~
          添加時請注明公司名(或學校名)+方向!!


          碼農(nóng)有道 coding


          碼農(nóng)有道,和您聊技術,和您聊職場,和您聊互聯(lián)網(wǎng)那些事!


          瀏覽 252
          1點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          1點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷免费av | 三级无码 | 人人色网站 | 超碰福利在线 | 操逼视频九哥 |