摘要:以下兩個要點(diǎn)將會對任何微服務(wù)重構(gòu)策略產(chǎn)生重大影響。批量替換通過批發(fā)更換,您可以一次性重構(gòu)整個應(yīng)用程序,直接從單體式轉(zhuǎn)移到一組微服務(wù)器。如果您通過使用破解您的微服務(wù)器,那么每個域?qū)@一個用例,或者更常見的,一組相互關(guān)聯(lián)的用例。
在決定使用微服務(wù)之后,為了將微服務(wù)付諸實(shí)踐,也許你已經(jīng)開始重構(gòu)你的應(yīng)用程序或把重構(gòu)工作列入了待辦事項(xiàng)清單。
無論是哪種情況,如果這是你第一次重構(gòu)應(yīng)用程序,那么您和您的團(tuán)隊(duì)必將在某個時刻面臨一個顯而易見的問題:如何重構(gòu)應(yīng)用程序以實(shí)現(xiàn)微服務(wù)?
這也正是這篇文章要思考和探討的。
重構(gòu)基礎(chǔ)在討論如何將重構(gòu)轉(zhuǎn)化為微服務(wù)之前,退后一步,仔細(xì)觀察微服務(wù)的內(nèi)容和時間是很重要的。以下兩個要點(diǎn)將會對任何微服務(wù)重構(gòu)策略產(chǎn)生重大影響。
重構(gòu)=重新設(shè)計將一個單體式的應(yīng)用程序重構(gòu)為微服務(wù),與重新設(shè)計一個基于微服務(wù)的應(yīng)用程序, 有著本質(zhì)區(qū)別。也許您更傾向于摒棄舊的應(yīng)用程序(特別是面對雜亂無序的舊應(yīng)用程序,這些應(yīng)用程序在補(bǔ)丁修改和加固補(bǔ)充方面帶來了沉重的技術(shù)債負(fù)擔(dān)),制定一套新的需求, 并從零開始創(chuàng)建一個全新的應(yīng)用程序,直接在微服務(wù)級別工作。
正如Martin Fowler在這篇文章中所指出,在微服務(wù)級設(shè)計一個新的應(yīng)用程序可能不是一個好主意。Fowler的分析中最重要的一點(diǎn)是,在移動到基于微服務(wù)的架構(gòu)時,從現(xiàn)有的單體式應(yīng)用程序開始可以真正發(fā)揮微服務(wù)的優(yōu)勢。
通過現(xiàn)有的單體式應(yīng)用程序,您可能會清楚地了解各種組件如何協(xié)同工作,以及應(yīng)用程序如何作為一個整體運(yùn)行的。而令人驚奇的是,從單體式的應(yīng)用程序開始,您可以更深入地了解微服務(wù)之間的界限。通過觀察他們是如何協(xié)作的,您可以更容易地看到,某個微服務(wù)能夠獨(dú)立于另一個微服務(wù)。
重構(gòu)并不通用對于重構(gòu),不存在一種適用一切的通用性方法,您所做的設(shè)計選擇,從整體架構(gòu)到代碼級,都應(yīng)考慮到應(yīng)用程序的功能、運(yùn)行條件以及開發(fā)平臺和編程語言等因素。例如,您可能需要考慮代碼打包—如果您正在使用Java,則可能涉及從大型企業(yè)應(yīng)用程序存檔(EAR)文件(每個文件可能包含多個Web應(yīng)用程序存檔(WAR)軟件包)轉(zhuǎn)移到多帶帶的 WAR文件。
一般重構(gòu)策略以上是我們介紹的高層次考慮因素,現(xiàn)在讓我們來看看重構(gòu)的實(shí)現(xiàn)策略。對于現(xiàn)有的單體式應(yīng)用程序進(jìn)行重構(gòu),有三種基本方法。
增量通過此策略,您可以逐個重構(gòu)應(yīng)用程序。隨著時間的推移,這些組件通常是大規(guī)模的服務(wù)或相關(guān)服務(wù)組。要成功做到這一點(diǎn),首先需要確立應(yīng)用程序中的大范圍邊界,然后針對這些邊界定義的單元進(jìn)行重構(gòu),一次一個單元。您將持續(xù)不斷地把每個大區(qū)域移動到微服務(wù)中,直到最終沒有原始應(yīng)用程序?yàn)橹埂?/p> 大變小
“大到小”策略在許多方面都是對增量重構(gòu)基本主題的變體。然而,在大到小的重構(gòu)中,您首先要將應(yīng)用程序重構(gòu)為多帶帶的、大規(guī)模的、“粗粒度的”(使用Fowler的術(shù)語)塊,然后逐漸將它們分解成更小的單元,直到整個應(yīng)用程序被重構(gòu)為真正的微服務(wù)。
此策略的主要優(yōu)點(diǎn)是,它允許您穩(wěn)定重構(gòu)單元之間的交互,然后將它們分解為下一級,并在您開始下一輪重構(gòu)之前,讓您更清晰地了解較低層服務(wù)之間的邊界和交互。
批量替換通過批發(fā)更換,您可以一次性重構(gòu)整個應(yīng)用程序,直接從單體式轉(zhuǎn)移到一組微服務(wù)器。它的優(yōu)勢在于,它允許您從頂層架構(gòu)下進(jìn)行重新設(shè)計,為重構(gòu)作準(zhǔn)備。雖然這一策略與微服務(wù)不一樣,但它確實(shí)與微服務(wù)有著相同的風(fēng)險,特別是當(dāng)它涉及到廣泛的重新設(shè)計時。
重構(gòu)中的基本步驟那么,將一個單體式應(yīng)用程序重構(gòu)為微服務(wù)的基本步驟是什么?有幾種方法可以打破這個流程,但對于大多數(shù)重構(gòu)項(xiàng)目來說,以下五個步驟是(或應(yīng)該)通用的。
(1)準(zhǔn)備工作迄今為止我們所討論的大部分是準(zhǔn)備工作。要牢記的要點(diǎn)是,在重構(gòu)現(xiàn)有的單體式應(yīng)用程序之前,大架構(gòu)以及要進(jìn)行重構(gòu)的基于微服務(wù)的版本的功能應(yīng)已就緒。在重構(gòu)時試圖修復(fù)功能失調(diào)的應(yīng)用程序,這只會使兩項(xiàng)工作更加困難。
(2)設(shè)計:微服務(wù)域在大規(guī)模、應(yīng)用廣泛的架構(gòu)之下,您需要在重構(gòu)之前制定(并應(yīng)用)一些設(shè)計決策。特別是,您需要考慮哪種微服務(wù)組織形式最適合您的應(yīng)用程序。組織微服務(wù)最自然的方式通常是進(jìn)入基于通用功能、使用或資源訪問的域:
功能域。相同功能域內(nèi)的微服務(wù)執(zhí)行一組相關(guān)功能,或具有相關(guān)性的職責(zé)。例如,購物車和結(jié)帳服務(wù)可以包含在相同的功能域中,而庫存管理服務(wù)將占用另一個域。
使用域。如果您通過使用破解您的微服務(wù)器,那么每個域?qū)@一個用例,或者更常見的,一組相互關(guān)聯(lián)的用例。用例通常圍繞用戶(個人或其他應(yīng)用程序)采取的一組相關(guān)行動,例如選擇購買商品或輸入付款信息。
資源域。訪問相關(guān)資源組(如數(shù)據(jù)庫、存儲或外部設(shè)備)的微服務(wù)也可以形成不同的域。這些微服務(wù)通常會處理這些資源與所有其他域和服務(wù)的交互。
請注意,在給定的應(yīng)用程序中,三種組織形式都可能都存在。如果有一個總體規(guī)則,那么簡單地說,您應(yīng)該在它們最適合的時間和地點(diǎn)應(yīng)用它們。
(3)設(shè)計:基礎(chǔ)設(shè)施和部署此步驟非常重要,但卻很容易被視作事后再來考慮的問題。您正在將一個應(yīng)用程序轉(zhuǎn)換為一種非常動態(tài)的微服務(wù)群,通常在容器或虛擬機(jī)中,并由可能由多個應(yīng)用程序組合的基礎(chǔ)架構(gòu)部署、編排和監(jiān)控。此基礎(chǔ)架構(gòu)是您應(yīng)用程序架構(gòu)的一部分; 它可能(并且可能會)接管以前在單體式應(yīng)用程序中由高級架構(gòu)處理的一些職責(zé)。
(4)重構(gòu)這是您將應(yīng)用程序代碼實(shí)際重構(gòu)為微服務(wù)的一個重點(diǎn)。確立微服務(wù)邊界,識別每個微服務(wù)候選項(xiàng)的依賴關(guān)系,在代碼和單元架構(gòu)級別上進(jìn)行必要的更改,以便它們可以作為獨(dú)立的微服務(wù)來容納,并將其封裝在容器或VM中。這不會是一個沒有問題的過程,因?yàn)樵谥饕獞?yīng)用程序的規(guī)模上重寫代碼非常不易,但是,只要準(zhǔn)備充分,您遇到的問題就更有可能局限于現(xiàn)有的代碼問題。
(5)測試當(dāng)您進(jìn)行測試時,您需要在基礎(chǔ)架構(gòu)(包括容器/ VM部署和資源使用)級別以及整體應(yīng)用級別上查找微服務(wù)和微服務(wù)交互級別的問題。通過使用基于微服務(wù)的應(yīng)用程序,所有這些都很重要,每個應(yīng)用程序都可能需要自己的一套測試/監(jiān)視工具和資源。當(dāng)您發(fā)現(xiàn)問題時,了解什么級別的問題應(yīng)該被處理是非常重要的。
結(jié)論對微服務(wù)的重構(gòu)可能需要下些功夫,但這并不難。只要您能做好準(zhǔn)備,并清楚地了解所涉及的問題,您就能有效地重構(gòu)您的微服務(wù)應(yīng)用,而無需從頭到尾重新設(shè)計。
9月27日,北京海航萬豪酒店,容器技術(shù)大會Container Day 2017即將舉行。
CloudStack之父、海航科技技術(shù)總監(jiān)、華為PaaS部門部長、恒豐銀行科技部總經(jīng)理、阿里云PaaS工程總監(jiān)、民生保險CIO······均已加入豪華講師套餐!
11家已容器落地企業(yè),15位真·云計算大咖,13場純·技術(shù)演講,結(jié)合實(shí)戰(zhàn)場景,聚焦落地經(jīng)驗(yàn)。免費(fèi)參會+超高規(guī)格,詳細(xì)議程及注冊鏈接請戳
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26973.html
摘要:許多人認(rèn)為數(shù)字化轉(zhuǎn)型是提高競爭力的關(guān)鍵,也是保持快速變化的商業(yè)環(huán)境的必要條件,對于許多企業(yè)來說,云計算對于其業(yè)務(wù)的成功至關(guān)重要。每個企業(yè)的云計算戰(zhàn)略都是獨(dú)一無二的,而遵循相同的原則,企業(yè)的云遷移之旅都將獲得業(yè)務(wù)的發(fā)展機(jī)會。數(shù)字化轉(zhuǎn)型繼續(xù)為企業(yè)的業(yè)務(wù)發(fā)展創(chuàng)造機(jī)會。由于英國脫歐的不確定性,英國很多企業(yè)正在考慮實(shí)施數(shù)字化轉(zhuǎn)型計劃,以確保業(yè)務(wù)持續(xù)增長。許多人認(rèn)為數(shù)字化轉(zhuǎn)型是提高競爭力的關(guān)鍵,也是保持...
摘要:接下來該填表了生成行和單元格為了填充表格可以遵循同樣的方法,但這次我們需要迭代數(shù)組中的每個對象。對于每個對象,我們可以使用生成單元格。 翻譯:瘋狂的技術(shù)宅原文:https://www.valentinog.com/bl... 本文首發(fā)微信公眾號:jingchengyideng歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 怎樣用原生 JavaScript 生成表格需?本文告訴你答案!...
摘要:摘要本文我們就如何使用阿里云這樣的配置管理產(chǎn)品在中替代幫助簡化環(huán)境配置管理做一個簡單的示例,幫助你理解基于來簡化微服務(wù)環(huán)境配置管理的方案,并會簡單比較一下與方案的優(yōu)劣。 摘要: 本文我們就如何使用阿里云ACM這樣的配置管理產(chǎn)品在Spring Cloud中替代Spring Cloud Config幫助簡化環(huán)境配置管理做一個簡單的示例,幫助你理解基于ACM來簡化微服務(wù)環(huán)境配置管理的方案,并...
閱讀 2307·2023-04-25 16:42
閱讀 1207·2021-11-22 14:45
閱讀 2346·2021-10-19 13:10
閱讀 2831·2021-09-29 09:34
閱讀 3415·2021-09-23 11:21
閱讀 2107·2021-08-12 13:25
閱讀 2194·2021-07-30 15:15
閱讀 3499·2019-08-30 15:54