《微服務設計》書摘(二):部署 & 測試

第五章:分解單塊系統(tǒng)

事務邊界

事務可以保證一些事件要么都發(fā)生据德,要么都不發(fā)生肩民。在插入數(shù)據(jù)庫時,這一點非常有用蚪战。

服務一定會慢慢變大牵现,直至大到需要拆分。關鍵是要在拆分這件事變得太過昂貴之前邀桑,意識到你需要做這個拆分瞎疼。

第六章:部署

本章主要討論持續(xù)集成 & 持續(xù)交付。

6.1 持續(xù)集成 & 微服務

CI(Continuous Integration壁畸,持續(xù)集成)保證新提交的代碼與已有代碼進行集成贼急,從而讓所有人保持同步茅茂。如果沒有 CI,向微服務架構進行轉型會非常痛苦竿裂。關于 CI玉吁,要理解以下三個問題:

  • 是否頻繁的進行代碼 merge:如果你的代碼和別人的代碼沒被頻繁的 merge,那將來的集成就會很困難
  • 是否有單元測試來驗證修改:由于微服務強調(diào)靈活修改腻异,快速集成进副,所以需要保證修改代碼的質(zhì)量
  • 當構建失敗后,團隊是否把修復 CI 當作第一優(yōu)先級的事

每個微服務都應該有自己獨立的代碼庫悔常,并分別與對應的 CI 綁定影斑。當對代碼庫進行修改時,可以只運行相關的構建及測試机打。

6.2 構建 Pipeline

把一個構建過程分成多個階段是很有價值的矫户。構建流水線可以可視化整個構建流程。

CD(Continuous Delivery残邀,持續(xù)交付)

第七章:測試

如何高效且有效地測試分布式系統(tǒng)的功能是一個挑戰(zhàn)皆辽。它能幫助我們在盡早交付軟件與保證軟件高質(zhì)量之間保持平衡。

測試類型包括:

  1. 單元測試:測單個方法
  2. 接口測試:測單個服務接口
  3. 性能測試
  4. 界面測試:測單個功能

其中芥挣,單元測試驱闷、接口測試、性能測試屬于自動化測試空免。放棄大規(guī)模的手工測試空另,盡可能多地使用自動化測試是近年來業(yè)界的一種趨勢。而微服務架構尤其需要自動化測試蹋砚。

7.1 單元測試

單元測試通常只測試一個函數(shù)和方法扼菠,它不會啟動服務,通常情況下一個服務需要大量的單元測試坝咐。
通過 TDD(Test-Driven Design循榆,測試驅動開發(fā))寫的測試就屬于這一類。單元測試對于代碼重構非常重要墨坚,它允許你肆意的重構而不必擔心引入 bug冯痢。

7.2 接口測試(服務測試)

只測試為用戶界面提供服務的一些類。接口測試只覆蓋單個服務接口框杜,為了達到隔離性,需要給外部合作者打樁(or mock)袖肥。接口測試比單元測試覆蓋的范圍更大咪辱。

對于每一個下游合作者,我們都需要一個打樁服務椎组,然后在運行接口測試的時候啟動它們油狂,還需要配置被測服務,在測試過程中連接這些打樁服務。接著专筷,為了模仿真實服務弱贼,需要配置打樁服務為被測服務的請求發(fā)回響應。

7.3 界面測試

在微服務系統(tǒng)中磷蛹,界面展示的一個功能往往涉及多個服務吮旅。

7.4 藍/綠部署 vs 金絲雀部署

7.4.1 藍/綠部署

使用藍/綠部署時,我們會部署兩份軟件味咳,但只有一個接受真正的請求庇勃,這也就是我們說的不停機部署。

發(fā)布的時候:

  1. 將所有的請求全部交給A處理
  2. 在B上發(fā)布新應用
  3. B上內(nèi)部測試
  4. 測試通過后槽驶,所有請求轉向B
  5. 在A上發(fā)布新應用
  6. A上內(nèi)部測試
  7. 測試通過后责嚷,A和B同時提供服務

實施藍/綠部署的整個過程可以完全自動化,它有幾個前提條件:

  1. 需要能夠切換生產(chǎn)流量到不同的主機掂铐。切換時罕拂,可通過改變 DNS /更改負載均衡策略
  2. 提過足夠多的主機,以支持并行運行兩個版本

帶來的好處:

  1. 在切換流量前全陨,可以測試
  2. 遇到問題時及時回滾
  3. 在用戶無感知的情況下零宕機部署

7.4.2 金絲雀部署

金絲雀發(fā)布和藍/綠部署容易混淆爆班,因為它們會使用一些相似的技術。兩者的不同之處在于:金絲雀新舊版本共存的時間更長烤镐,而且經(jīng)常會調(diào)整流量蛋济,它需要更復雜的請求配置。

金絲雀發(fā)布強調(diào)將部分生產(chǎn)流量引到新部署的系統(tǒng)炮叶,來驗證系統(tǒng)是否按預期執(zhí)行碗旅。按預期執(zhí)行包括:功能性 & 性能性 & 其它各種場景(如:新系統(tǒng)的推薦算法的點擊率是否比舊系統(tǒng)高)等。
如果沒有達到預期镜悉,可以迅速回滾到舊版本祟辟,如果達到預期,可以全部引流侣肄。

向新服務引流分兩種:直接引流生產(chǎn)請求 or 復制一份請求旧困,復制請求比較復雜,尤其是在請求不是冪等的情況下稼锅。

7.5 性能測試

將系統(tǒng)拆分成較小的微服務后吼具,跨網(wǎng)絡邊界調(diào)用次數(shù)明顯增加了,之前可能只涉及一次數(shù)據(jù)庫調(diào)用矩距,現(xiàn)在可能涉及三四次跨網(wǎng)絡調(diào)用拗盒,還有匹配數(shù)量的數(shù)據(jù)庫調(diào)用,所有這些調(diào)用都可能減緩系統(tǒng)操作的速度锥债。因此陡蝇,追蹤延遲的根源顯得尤為重要痊臭。

7.6 總結

比較來說,單元測試粒度更細登夫,測試所用時間更短广匙,出現(xiàn)bug后也更好定位。為不同的目的選擇不同的測試來覆蓋恼策。

一般來說鸦致,單元測試要比接口測試大一個數(shù)量級,接口測試比界面測試大一個數(shù)量級戏蔑。一種常見的測試反模式:很少甚至沒有單元測試蹋凝。這意味著當提交有錯誤時,需要很長時間才能發(fā)現(xiàn)這個問題总棵。

包含在測試中的服務數(shù)量越多鳍寂,測試就會越脆弱,不確定性也就越強情龄。如果測試失敗以后迄汛,只是想重新運行一遍測試,然后希望可能通過骤视,那么這種測試是脆弱的鞍爱。

涉及多個服務的測試很脆弱,涉及多線程的測試通常也會有問題专酗。測試失敗有時是因為資源競爭睹逃、超時等。當發(fā)現(xiàn)脆弱的測試時祷肯,要及時解決沉填,否則隨著時間的推移,人們會對出錯習以為常佑笋。

同時測試case要精細的管理翼闹,不能盲目的覆蓋、堆砌蒋纬,要想辦法讓測試變快猎荠。

測試結果的反饋周期過長,會影響開發(fā)人員的效率蜀备,同時會間接影響服務部署关摇。所以要及時反饋 bug,及時修復 bug碾阁,盡可能頻繁發(fā)布小范圍改變拒垃。

把測試的重心放到少量核心場景中。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓷蛙,一起剝皮案震驚了整個濱河市悼瓮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艰猬,老刑警劉巖横堡,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冠桃,居然都是意外死亡命贴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門食听,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胸蛛,“玉大人,你說我怎么就攤上這事樱报≡嵯睿” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵迹蛤,是天一觀的道長民珍。 經(jīng)常有香客問我,道長盗飒,這世上最難降的妖魔是什么嚷量? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮逆趣,結果婚禮上蝶溶,老公的妹妹穿的比我還像新娘。我一直安慰自己宣渗,他們只是感情好抖所,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著落包,像睡著了一般部蛇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咐蝇,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天涯鲁,我揣著相機與錄音,去河邊找鬼有序。 笑死抹腿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的旭寿。 我是一名探鬼主播警绩,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盅称!你這毒婦竟也來了肩祥?” 一聲冷哼從身側響起后室,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎混狠,沒想到半個月后岸霹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡将饺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年贡避,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片予弧。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡刮吧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掖蛤,到底是詐尸還是另有隱情杀捻,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布坠七,位于F島的核電站水醋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏彪置。R本人自食惡果不足惜拄踪,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拳魁。 院中可真熱鬧惶桐,春花似錦、人聲如沸潘懊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授舟。三九已至救恨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間释树,已是汗流浹背肠槽。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奢啥,地道東北人秸仙。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像桩盲,于是被迫代替她去往敵國和親寂纪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)捞蛋,斷路器孝冒,智...
    卡卡羅2017閱讀 134,696評論 18 139
  • “微服務架構”這一術語在前幾年橫空出世,用于描述這樣一種特定的軟件設計方法拟杉,即以若干組可獨立部署的服務的方式進行軟...
    ThoughtWorks閱讀 16,914評論 1 71
  • 轉載本文需注明出處:微信公眾號EAWorld迈倍,違者必究。 微服務架構現(xiàn)在是談到企業(yè)應用架構時必聊的話題捣域,微服務之所...
    72a1f772fe47閱讀 3,477評論 0 38
  • 垃圾簡書,垃圾CEO宴合,垃圾某豚焕梅,從此絕不再用。 本文是翻譯 https://martinfowler.com/ar...
    linkinparkzlz閱讀 4,035評論 0 1
  • 法國是一個到處都洋溢著浪漫氣息的國家卦洽,首都巴黎更是被世人譽為“浪漫之都”贞言。小編最近發(fā)現(xiàn)一款產(chǎn)品,連包裝都透著來自法...
    腦洞無極限閱讀 490評論 0 3