摘要:已經(jīng)準備好向容器遷移了嗎如果你正考慮從現(xiàn)有非容器化的系統(tǒng)上將服務(wù)遷移到基于容器的環(huán)境中,那么你一定想知道該如何實現(xiàn)它。這篇博文將簡要介紹成功將傳統(tǒng)應(yīng)用程序遷移到容器的指導原則。單體架構(gòu)大多數(shù)傳統(tǒng)設(shè)計的應(yīng)用程序都是單體架構(gòu)。
已經(jīng)準備好向容器遷移了嗎?如果你正考慮從現(xiàn)有非容器化的系統(tǒng)上將服務(wù)遷移到基于容器的環(huán)境中,那么你一定想知道該如何實現(xiàn)它。有什么正確的方法?有沒有最好的方法?或者說,有沒有某種直接遷移過程(lift-and-shift process)可以適用于所有的應(yīng)用程序?
通常來講,上述問題都有肯定的答案。雖然因各公司的具體情況不同,遷移到容器和微服務(wù)的具體細節(jié)會各有差異,但是對于實現(xiàn)應(yīng)用程序從傳統(tǒng)基礎(chǔ)設(shè)施到容器環(huán)境的無縫遷移來說,還是有一些普適性原則和最佳實踐經(jīng)驗值得大家遵循。
這篇博文將簡要介紹成功將傳統(tǒng)應(yīng)用程序遷移到容器的指導原則。
微服務(wù)——它們是什么?在處于項目遷移的最初規(guī)劃階段,關(guān)于容器化,最需要注意的是容器系統(tǒng)架構(gòu)是基于(或應(yīng)該基于)微服務(wù)的。那么,微服務(wù)是什么?
實際上,界定什么是微服務(wù)、什么不是微服務(wù),這其間的標準是有些模糊的。這種情況其實是一種必然,因為不同的設(shè)計容器化應(yīng)用程序的方法(我們稍后會提到),正是基于不同的定義微服務(wù)的方法。
從總體上來說,微服務(wù)可以描述為一個基本的、功能分離的服務(wù),它由應(yīng)用程序的其他部分調(diào)用。我們可以把從數(shù)據(jù)庫中檢索數(shù)據(jù)的服務(wù)看作是一個微服務(wù),既可以將數(shù)據(jù)發(fā)送到存儲設(shè)備,也可以處理用戶輸入。
例如,在線上商店中,訪問庫存數(shù)據(jù)庫是由一個微服務(wù)處理,客戶的購物車由一個微服務(wù)更新,交易再由一個微服務(wù)完成,并且還有一個微服務(wù)處理信用卡的授權(quán),而這些微服務(wù)都是獨立的。
而對于同一家店,可以由多個微服務(wù)工作,一個微服務(wù)處理所有的數(shù)據(jù)庫訪問(庫存、客戶和銷售),一個微服務(wù)處理購物車和交易,而第三個微服務(wù)用做運輸物流。這種特定的微服務(wù)結(jié)構(gòu),在很大程度上是一種設(shè)計選擇,它取決于系統(tǒng)整體架構(gòu)。
你當前的架構(gòu)是什么?不過,在開始構(gòu)建容器化應(yīng)用程序之前,還需要著留意一下你當前的架構(gòu)。宏觀上,非容器化的應(yīng)用程序可以大體分為兩類:單體架構(gòu)和SOA架構(gòu)(服務(wù)導向架構(gòu))。當前架構(gòu)不同,進行容器化重構(gòu)的方法就不同,因此我們先將它們區(qū)分開來,再討論設(shè)計選擇以及整體的重構(gòu)策略。
單體架構(gòu)大多數(shù)傳統(tǒng)設(shè)計的應(yīng)用程序都是單體架構(gòu)。它們可能由單個包含了支持的庫、服務(wù)以及配置文件的程序,或者少量帶支持資源的程序組成。然而,在這兩種情況下,大部分甚至全部的核心功能都包含在一個或幾個二進制文件中,其中服務(wù)就包含于這些在二進制文件定義的應(yīng)用程序邊界內(nèi)進行操作和通信的功能中。桌面級的應(yīng)用程序傳統(tǒng)上講是單體的,大多數(shù)基于網(wǎng)絡(luò)的應(yīng)用程序也是如此。
在桌面或局域網(wǎng)環(huán)境中,單體架構(gòu)通常是十分有效的。它的安裝和更新相當容易,并且單體的設(shè)計能夠輕松地監(jiān)控組件,而且桌面/LAN的使用一般不會對應(yīng)用程序的資源造成太大的壓力。然而,在云或互聯(lián)網(wǎng)的環(huán)境中,單體應(yīng)用程序可能相對過于龐大、笨拙、緩慢,它們不僅難以更新,且不能夠處理大量的流量。另外,它們也不適用持續(xù)交付以及大多數(shù)構(gòu)成DevOps的實踐。
如果想重構(gòu)容器的單體架構(gòu)應(yīng)用,那可能需要在概念層面上進行全盤的重新設(shè)計。即便應(yīng)用程序的架構(gòu)已經(jīng)相當清晰地定義了其內(nèi)部服務(wù),并且保證了它的離散性,實際拆分成微服務(wù)時可能還需要對這些服務(wù)的邊界以及它們彼此通信的方式進行大規(guī)模的更改。對于大多數(shù)的單體應(yīng)用程序,許多服務(wù)都需要重新定義,甚至需要從頭開始定義。
SOA架構(gòu)有一些大型的非容器應(yīng)用程序可能已經(jīng)具有了基于服務(wù)的架構(gòu)。例如,銷售點的應(yīng)用程序可能包含了獨立的程序用來處理銷售、庫存、客戶記錄、訂單、運輸、差異、稅收、應(yīng)收賬款以及應(yīng)付賬款。每一個模塊都是一個多帶帶的程序,具有明確的應(yīng)用程序邊界,而且這種跨邊界的模塊間通信和基于容器的應(yīng)用程序十分相似。
如果有進行細分的需要,這種架構(gòu)(假設(shè)它是令人滿意的)可以作為進一步分解成微服務(wù)的基礎(chǔ)。進一步分解可以是基于現(xiàn)有的模塊分解成更小的服務(wù),也可以是基于抽象的廣義服務(wù)(比如訪問單個數(shù)據(jù)庫或打印收據(jù)的微服務(wù)),或者兩者都是。另一方面,如果現(xiàn)有模塊已經(jīng)是小容量、功能分散且組織良好的,那么只需要進行極少的修改就可以將其遷移到容器中。
對于單體應(yīng)用你要怎么做?在這一點上,應(yīng)該弄清楚的是,將單體應(yīng)用程序分解成微服務(wù)通常是一個復雜而極具挑戰(zhàn)的工作。就像之前說的那樣,首先是根據(jù)微服務(wù)重新定義架構(gòu)。這里的重新定義以及實際細分成微服務(wù)本身的過程通常稱為分解(decomposition)。關(guān)于分解有一些基本的模式。在很多情況下,了解這些模式的基礎(chǔ)和基本性質(zhì)比選擇哪種模式更重要,而在實際生產(chǎn)中,根據(jù)系統(tǒng)的功能要求,將單體應(yīng)用程序分解成微服務(wù)時常常涉及到多種模式。
根據(jù)用例分解用例是指用戶在執(zhí)行任務(wù)時通常會采取的一組操作。用戶既可以是實際的人,可以是應(yīng)用程序的另一部分,也可以是外部的應(yīng)用程序。用例的關(guān)鍵要素是它是與任務(wù)相關(guān)聯(lián)的一組可定義的動作。在線上商店的例子中,一組客戶操作(如選擇和購買商品)就可以是一個用例,單純的內(nèi)部操作也可以是用例,例如在銷售之后更新庫存、客戶信息以及交易數(shù)據(jù)庫。
根據(jù)功能分解根據(jù)功能分解是分解的另一種常見模式。例如,銷售交易可以是一個由功能定義的單元,而信用授權(quán)可以作為由功能定義的另一個服務(wù)。你可以根據(jù)諸如差異跟蹤、運輸和自動補貨這些功能來定義功能域。功能分解和用例分解非常相似,不過它的定義更多的是由需要執(zhí)行的行為決定而非執(zhí)行的對象。
根據(jù)資源分解在多數(shù)情況下,根據(jù)資源定義特定的微服務(wù)無疑是最好的方案。例如,你可以定義一個單一的微服務(wù)來處理所有與具體某個數(shù)據(jù)庫或一組數(shù)據(jù)庫的交互,或者處理所有與持久存儲器的交互。在許多方面,設(shè)備驅(qū)動程序是基于資源的微服務(wù)。如果通過某種類似于設(shè)備驅(qū)動程序的通用服務(wù)來和資源進行交互是有意義的,那么將該服務(wù)定義為微服務(wù)也可能有實際價值。
分解途徑確定了分解單體應(yīng)用的整體模式后,就可以開始將其分解成微服務(wù)。你的最終目標應(yīng)該是將整個應(yīng)用程序縮成一組微服務(wù)層級的容器,它們和原始的單體應(yīng)用一樣,提供相同的一組服務(wù)(能夠根據(jù)需要添加或改進功能),可以根據(jù)需要進行管理和部署,而且相比之下有更出色的速度、流量以及靈活性。
比較好的一點是,你并不需要一下子把它拆散??梢詫⑶懊嬲f的大型SOA架構(gòu)作為中間階段。你可以在開始的時候?qū)误w應(yīng)用程序拆成大型的基于服務(wù)的塊,然后再將其細分成越來越小的服務(wù),直到最終達到期望目標級別的微服務(wù)。而這里還有另一種方案,你可以從定義明確的服務(wù)入手,先將這些服務(wù)拆分成基于容器的微服務(wù),然后再以類似先前的方法,分幾次拆分應(yīng)用程序的其余部分。
無論采取哪種方法,一定要牢記一點,那就是要明確定義微服務(wù),而且這些定義在應(yīng)用程序的整體功能和架構(gòu)上都應(yīng)該是有實際意義的。只要你遵循了這些原則,相信你的遷移工作就會成功。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/11808.html
摘要:已經(jīng)準備好向容器遷移了嗎如果你正考慮從現(xiàn)有非容器化的系統(tǒng)上將服務(wù)遷移到基于容器的環(huán)境中,那么你一定想知道該如何實現(xiàn)它。這篇博文將簡要介紹成功將傳統(tǒng)應(yīng)用程序遷移到容器的指導原則。單體架構(gòu)大多數(shù)傳統(tǒng)設(shè)計的應(yīng)用程序都是單體架構(gòu)。 已經(jīng)準備好向容器遷移了嗎?如果你正考慮從現(xiàn)有非容器化的系統(tǒng)上將服務(wù)遷移到基于容器的環(huán)境中,那么你一定想知道該如何實現(xiàn)它。有什么正確的方法?有沒有最好的方法?或者說,...
摘要:云幫能解決什么問題新一代企業(yè)平臺讓開發(fā)人員輕松地開發(fā)部署和運維應(yīng)用,讓架構(gòu)師和運營人員利用熟知和可靠技術(shù)打造一個受控的運行環(huán)境。有助于加速企業(yè)級應(yīng)用服務(wù)于市場,實現(xiàn)內(nèi)部資源的有效利用。 云幫是什么? 云幫 是一款基于容器技術(shù)的應(yīng)用管理平臺。社區(qū)版針對個人、企業(yè)完全免費,您可以自由的下載與傳播,但需要遵循我們的社區(qū)版協(xié)議。 云幫從哪里來? 云幫是 北京好雨科技有限公司 結(jié)合容器技術(shù)整合的...
摘要:私有是趨勢還是熱潮那么,為何這些科技巨頭會紛紛進軍私有領(lǐng)域呢這只是一種風尚潮流還是必然的趨勢在一些觀點看來,是趨勢性的可能性要更高一些。這么想來,公有云巨頭與傳統(tǒng)私有供應(yīng)商之間的合作便是有跡可循了。而另一方面,又是公有云領(lǐng)域中的絕對王者。如果單純以收入進行衡量的話,公有云市場的巨頭們?yōu)閬嗰R遜(AWS)、微軟Azure、谷歌云、阿里云、騰訊云和百度云等。從2017年Q2到2018年Q2這一段時...
摘要:但是很多企業(yè)已經(jīng)從僅限私有云的方法轉(zhuǎn)變?yōu)榛旌显品绞?。當人員將應(yīng)用程序耦合到私有云中的服務(wù)通常是時,也會相對復雜。各企業(yè)的開發(fā)人員和架構(gòu)師們從私有云遷移混合云的轉(zhuǎn)變中所學到的將為他們做好迎接新未來做準備。在最近的幾年中,云計算的發(fā)展逐漸步入正軌,且得到了快速發(fā)展。一方面,阿里、AWS等國內(nèi)外知名廠商在云服務(wù)的業(yè)務(wù)領(lǐng)域收入呈現(xiàn)出爆發(fā)式的增長;另一方面由于云計算的市場投入,越來越多的政府、行業(yè)以及...
閱讀 2275·2021-11-22 14:56
閱讀 10116·2021-09-08 10:45
閱讀 1986·2019-08-30 13:54
閱讀 2873·2019-08-29 16:54
閱讀 2014·2019-08-29 14:20
閱讀 1782·2019-08-29 12:25
閱讀 1860·2019-08-29 12:17
閱讀 1057·2019-08-23 18:29