Kevin Webber在開始演講的時候說,企業(yè)軟件構(gòu)建應(yīng)用程序的形式比較散碎,不夠系統(tǒng),集成很復(fù)雜。傳統(tǒng)的基礎(chǔ)架構(gòu)(Traditional infrastructures)具備主動/被動的粗糙故障轉(zhuǎn)移(crude failover),支持在主動和被動系統(tǒng)之間復(fù)制復(fù)雜的狀態(tài)。
在一個現(xiàn)代化項目中,架構(gòu)師必須做出的最初幾項決定(“第一英里(The First mile)”)是至關(guān)重要的。他不僅談到了關(guān)鍵的架構(gòu)決策,也提及了如何根據(jù)領(lǐng)域驅(qū)動設(shè)計( Domain-Driven Design)的原則來做出這些決策。為了定義所涉及的業(yè)務(wù)過程以及如何將這些過程轉(zhuǎn)換為事件驅(qū)動(event-driven)系統(tǒng),事件風(fēng)暴(Event storming)將關(guān)鍵的利益相關(guān)者聚集到一個協(xié)作的環(huán)境中。團(tuán)隊?wèi)?yīng)該關(guān)注在業(yè)務(wù)中已經(jīng)發(fā)生的最有趣的事件。
在從遺留系統(tǒng)(legacy sysems)到反應(yīng)系統(tǒng)(Reactive systems)的遷移中,其他一些諸如防護(hù)層(ACL)和Strangler模式的概念也同樣有用。
洋蔥架構(gòu)(Onion architecture)與領(lǐng)域驅(qū)動設(shè)計(Domain Driven Design)的概念非常吻合。該架構(gòu)中的以下幾個層可以幫助實現(xiàn)不同方面的需求。
基礎(chǔ)架構(gòu):我們可以使用該層來實現(xiàn)諸如健康檢查、跟蹤和身份驗證等交叉需求(cross-cutting requirements)。 API:用于路由和數(shù)據(jù)驗證 域:管理這個層中的有界上下文 核心:這就是我們管理聚合(Aggregates)的地方Webber討論了云原生對于應(yīng)用程序的意義。應(yīng)用程序需要是容器包裝的、動態(tài)管理的和面向微服務(wù)的。
Webber還談到了微服務(wù)架構(gòu),他推薦道:團(tuán)隊首先應(yīng)該從整體模型開始著手,并使用微服務(wù)作為重構(gòu)技術(shù)將系統(tǒng)分解成多個微服務(wù)。微服務(wù)模型不僅有助于分布式系統(tǒng),也有助于分布式團(tuán)隊。
很多團(tuán)隊專注于在服務(wù)級別上分解系統(tǒng),但卻在數(shù)據(jù)層保持耦合。在這樣的架構(gòu)中,任何數(shù)據(jù)模型都將影響多個服務(wù)。
在會議結(jié)束后,InfoQ與Kevin進(jìn)行了交談,了解了有關(guān)將Java應(yīng)用程序遷移到云基礎(chǔ)架構(gòu)上的更多詳細(xì)信息。
Kevin說到,一旦微服務(wù)有點對點的交互,那么在服務(wù)管理方面就會混亂。重要的是要記住, 如果一個微服務(wù)發(fā)生改變的時候影響了另一個,那么這種情況下它們就不算真正獨立的微服務(wù),兩者應(yīng)該整合為單一的服務(wù)。
微服務(wù)的構(gòu)成可以利用PubSub模型來實現(xiàn),PubSub使用像Kafka之類的服務(wù)器, 先將事件發(fā)送到隊列,再使用諸如Cassandra的NoSQL數(shù)據(jù)庫將事件存儲在事件日志存儲(Event Log Store)中。
如果讀者想要了解更多關(guān)于該話題的細(xì)節(jié),可以在奧萊利(O’Reilly)中查閱Webber的Mini書《Migrating Java to the Cloud》
查看英文原文:Kevin Webber on Migrating Java to the Cloud