微服務(wù)理解

“微服務(wù)架構(gòu)” 用來描述將軟件應(yīng)用程序設(shè)計為獨立可部署的組件化服務(wù)的一種特殊方式吧享。 討論微服務(wù)废离,需要先從傳統(tǒng)單體式應(yīng)用(monolith)說起撇寞。通俗地講呻袭,“單體應(yīng)用(monolith application)”就是將應(yīng)用程序的所有功能都打包成一個獨立的單元眨八,可以是JAR、WAR棒妨、EAR或其它歸檔格式踪古。

單體應(yīng)用程序可以在業(yè)務(wù)之初取得成功,但是隨著更多應(yīng)用程序部署到云端券腔,帶來諸多問題:

  • 更改周期連在一起 - 對應(yīng)用程序的一小部分進行了更改伏穆,需要重建和部署整個整體。
  • 多人共同提交一個項目纷纫,隨著時間的推移枕扫,通常很難保持良好的模塊化結(jié)構(gòu),難以避免更新其中某個模塊的時候不對其他模塊造成影響辱魁。
  • 擴展需要整個應(yīng)用程序的擴展烟瞧,而不是需要更多資源的部分。

這些挫折導(dǎo)致了微服務(wù)架構(gòu)風(fēng)格:將應(yīng)用程序構(gòu)建為服務(wù)套件染簇。 除了服務(wù)是獨立可部署和可擴展的参滴,每個服務(wù)還提供了一個穩(wěn)固的模塊邊界,甚至允許以不同的編程語言編寫不同的服務(wù)锻弓。 他們也可以由不同的團隊管理砾赔。

微服務(wù)風(fēng)格并非新穎的或創(chuàng)新的,其根源至少依賴于Unix的設(shè)計原則。

微服務(wù)架構(gòu)的特點

通過服務(wù)組件化

組件是可獨立更換和可升級的軟件單元暴心。組件之間通過HTTP協(xié)議或者RPC之類的機制進行通信妓盲。

  • 使用服務(wù)作為組件(而不是庫)的一個主要原因是服務(wù)可以獨立部署。
  • 更明確的組件接口专普,避免組件模塊之間過度緊密耦合悯衬。

缺點:遠程調(diào)用成本昂貴。

圍繞業(yè)務(wù)組建團隊

當將大型應(yīng)用程序分成多個部分時檀夹,管理層往往側(cè)重于技術(shù)層筋粗,導(dǎo)致UI團隊,服務(wù)器端邏輯團隊和數(shù)據(jù)庫團隊击胜。 當團隊按照這些原則分開時亏狰,會帶來如下問題:

  • 即使簡單的更改也可能導(dǎo)致跨團隊項目花費時間和預(yù)算的批準。
  • 一個團隊的個別成員(比如新員工)可能很難融入到他們的短期記憶中偶摔。
  • 模塊化的系列需要大量的紀律執(zhí)行。

團隊圍繞業(yè)務(wù)來組建促脉,由橫向組織變更為垂直團隊辰斋,團隊是跨職能的,包括開發(fā)所需的全部技能瘸味。服務(wù)組件所需的更明確的分離使得更容易保持團隊界限清晰宫仗。

構(gòu)建產(chǎn)品而非項目

對開發(fā)人員的要求:

  • 開發(fā)需要對軟件的整個生命周期負責,而非完成功能開發(fā)之后交給維護團隊旁仿。
  • 開發(fā)人員需要增加一些運營支持負擔藕夫,增加與業(yè)務(wù)用戶的聯(lián)系

雖說沒有理由采用單一應(yīng)用程序不能采用同樣的方法,但是更小的服務(wù)粒度可以更容易地創(chuàng)建服務(wù)開發(fā)人員和用戶之間的個人關(guān)系枯冈。

智能端點和笨水管(dumb pipe)

替代企業(yè)服務(wù)總線 ESB毅贮。ESB產(chǎn)品通常包括用于消息路由,編排尘奏,轉(zhuǎn)換和應(yīng)用業(yè)務(wù)規(guī)則的復(fù)雜設(shè)施滩褥,承擔過多的職責。

智能端點
使用微服務(wù)思想構(gòu)建的應(yīng)用程序旨在盡可能地脫鉤和內(nèi)聚——他們擁有自己的邏輯炫加,并且更多地采用經(jīng)典Unix意義上的"過濾--接收"請求瑰煎,適當?shù)貞?yīng)用邏輯并產(chǎn)生響應(yīng)。 這些是使用簡單的REST協(xié)議編排的俗孝,而不是復(fù)雜的協(xié)議酒甸,如WS-Choreography或BPEL或由中央工具編排。

最常用的兩種協(xié)議是使用資源API輕量級消息傳遞的HTTP請求響應(yīng)赋铝。 第一個的最好的表現(xiàn)是"成為網(wǎng)絡(luò)插勤,而非在網(wǎng)絡(luò)后面"。

通過簡單協(xié)議的資源,可以讓開發(fā)人員更方便的進行緩存饮六。

笨水管

通過輕量級消息總線進行消息傳遞其垄。 所選擇的基礎(chǔ)設(shè)施通常是愚蠢的(像僅作為消息路由器一樣愚蠢) - 諸如RabbitMQ或ZeroMQ這樣的簡單實現(xiàn)僅提供可靠的異步結(jié)構(gòu),消息的生產(chǎn)和消費仍然由智能端點來實現(xiàn)卤橄。

將整體更改為微服務(wù)的最大問題在于改變通信模式绿满。

權(quán)力下放治理

集中治理的后果之一是將單一技術(shù)平臺標準化的趨勢。
通過權(quán)利下放窟扑,不對開發(fā)人員的平臺和技術(shù)選型形成嚴格制約喇颁,團隊負責他們構(gòu)建的軟件的所有方面,包括全天候運行軟件嚎货。

這種責任水平的下放絕對不是規(guī)范橘霎,但我們確實看到越來越多的公司將責任推向開發(fā)團隊。

分散式數(shù)據(jù)管理

數(shù)據(jù)管理的分散化包括如下方面:

  • 概念模型決策
  • 分散存儲策略

微服務(wù)傾向于讓每個服務(wù)管理自己的數(shù)據(jù)庫殖属。

分散管理微服務(wù)數(shù)據(jù)的責任對于管理更新具有重要意義姐叁。處理更新的常見方法是在更新多個資源時使用事務(wù)來保證一致性。這種方法通常在monolith軟件中使用洗显。使用這樣的事務(wù)有助于一致性,但這在多個服務(wù)中是有問題的外潜。分布式事務(wù)非常難以實施,因此微服務(wù)體系結(jié)構(gòu)強調(diào)了服務(wù)之間的無事務(wù)協(xié)調(diào)挠唆,明確地認識到一致性只能是最終的一致性处窥,并且通過補償操作來處理問題。

選擇以這種方式管理不一致是許多開發(fā)團隊面臨的新挑戰(zhàn)玄组,但它是經(jīng)常與業(yè)務(wù)實踐相匹配的挑戰(zhàn)滔驾。企業(yè)經(jīng)常處理一定程度的不一致,以便快速響應(yīng)需求俄讹,同時也有一些反饋過程來處理錯誤哆致。 只要修正錯誤的成本低于較大一致性下的業(yè)務(wù)損失,這個權(quán)衡是值得的颅悉。

基礎(chǔ)設(shè)施自動化

  • 持續(xù)交付
  • 持續(xù)集成與部署 (ci --> cd)
  • 自動化測試
  • 自動部署

為失敗場景進行設(shè)計

主要從監(jiān)控以及斷路器兩方面進行設(shè)計:

  • 應(yīng)用程序需要設(shè)計沽瞭,以便能夠容忍服務(wù)的故障∈F浚客戶端必須優(yōu)雅回應(yīng)服務(wù)提供者的不可用導(dǎo)致的失敗情況驹溃。
  • 由于服務(wù)可能隨時出現(xiàn)故障,因此能夠快速檢測故障并盡可能自動恢復(fù)服務(wù)很重要延曙。微服務(wù)期望為每個單獨的服務(wù)以及各種操作和業(yè)務(wù)相關(guān)指標看到復(fù)雜的監(jiān)控和記錄設(shè)置豌鹤。

在故障查理方面,微服務(wù)較之monolith引入了額外的復(fù)雜性

進化(升級)設(shè)計

組件的關(guān)鍵屬性是獨立替換和可升級性的概念枝缔。將組件置于服務(wù)中布疙,增加了更精細的發(fā)布計劃的機會蚊惯。

使用整體,任何更改都需要整個應(yīng)用程序的完整構(gòu)建和部署灵临。 但是截型,使用微服務(wù)器,只需要重新部署修改的服務(wù)儒溉。 這可以簡化和加速發(fā)布過程宦焦。

不利的是,必須考慮服務(wù)升級對消費者的影響顿涣。
配合接口版本管理解決波闹。

References

原文鏈接

  1. Martin Fowler's mocroservice

unix哲學(xué)

  • 程序應(yīng)該只關(guān)注一個目標,并盡可能把它做好涛碑。
  • 讓程序能夠互相協(xié)同工作精堕。
  • 應(yīng)該讓程序處理文本數(shù)據(jù)流,因為這是一個通用的接口蒲障。

更加簡化的版本是:做一件事歹篓,做好它。雖然只有第三條是特指Unix系統(tǒng)的揉阎,但Unix開發(fā)者們常常同時強調(diào)這三個信條滋捶。

軟件演進

過早的優(yōu)化是一切罪惡的根源 —— Knuth

初期由于人力/時間/業(yè)務(wù)等的壓力,采用monolith方式完成一版的設(shè)計開發(fā);業(yè)務(wù)體量到達一定程度余黎,現(xiàn)有軟件維護成本增大之后,需要考慮服務(wù)拆分载萌。

一個比較合理的拆分規(guī)則:2~3個人能夠在2~3周完成一個系統(tǒng)的迭代工作惧财。并非圭臬,但具有一定的通用性扭仁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垮衷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子乖坠,更是在濱河造成了極大的恐慌搀突,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊泵,死亡現(xiàn)場離奇詭異仰迁,居然都是意外死亡,警方通過查閱死者的電腦和手機顽分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門徐许,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卒蘸,你說我怎么就攤上這事雌隅。” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵恰起,是天一觀的道長修械。 經(jīng)常有香客問我,道長检盼,這世上最難降的妖魔是什么肯污? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮梯皿,結(jié)果婚禮上仇箱,老公的妹妹穿的比我還像新娘。我一直安慰自己东羹,他們只是感情好剂桥,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著属提,像睡著了一般权逗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冤议,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天斟薇,我揣著相機與錄音,去河邊找鬼恕酸。 笑死堪滨,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蕊温。 我是一名探鬼主播袱箱,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼义矛!你這毒婦竟也來了发笔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤凉翻,失蹤者是張志新(化名)和其女友劉穎了讨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體制轰,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡前计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了艇挨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片残炮。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缩滨,靈堂內(nèi)的尸體忽然破棺而出势就,到底是詐尸還是另有隱情泉瞻,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布苞冯,位于F島的核電站袖牙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舅锄。R本人自食惡果不足惜鞭达,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望皇忿。 院中可真熱鬧畴蹭,春花似錦、人聲如沸鳍烁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幔荒。三九已至糊闽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爹梁,已是汗流浹背右犹。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姚垃,地道東北人念链。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像积糯,于是被迫代替她去往敵國和親钓账。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • “微服務(wù)架構(gòu)”這一術(shù)語在前幾年橫空出世絮宁,用于描述這樣一種特定的軟件設(shè)計方法,即以若干組可獨立部署的服務(wù)的方式進行軟...
    ThoughtWorks閱讀 16,909評論 1 71
  • 微服務(wù)最近非常流行服协,各大互聯(lián)網(wǎng)公司紛紛采用微服務(wù)架構(gòu)體系绍昂,微服務(wù)架構(gòu)模式正在為敏捷部署以及復(fù)雜企業(yè)應(yīng)用實施提供巨大...
    Sting閱讀 9,079評論 0 57
  • 垃圾簡書,垃圾CEO偿荷,垃圾某豚窘游,從此絕不再用。 本文是翻譯 https://martinfowler.com/ar...
    linkinparkzlz閱讀 4,022評論 0 1
  • 一跳纳、微服務(wù)將變得輕量級 架構(gòu)需要由人去設(shè)計忍饰,這些人被稱為架構(gòu)師∷伦或許很多人并未授予架構(gòu)師的頭銜艾蓝,但自己卻從事著架構(gòu)...
    justmilkrain閱讀 5,427評論 10 109
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理力崇,服務(wù)發(fā)現(xiàn),斷路器赢织,智...
    卡卡羅2017閱讀 134,651評論 18 139