microXchg微服務(wù)大會(huì)第一日總結(jié):DDD、平臺(tái)以及對(duì)企業(yè)的影響

責(zé)任編輯:editor004

作者: Daniel Bryant

2017-03-06 11:34:23

摘自:INFOQ

microXchg微服務(wù)大會(huì)的開場(chǎng)報(bào)告是由Uwe Friedrichsen呈現(xiàn)的,報(bào)告探討了“彈性功能性服務(wù)設(shè)計(jì)”中的核心理念。

在柏林舉辦的microXchg大會(huì)上,一組軟件開發(fā)實(shí)踐人士分享了關(guān)于微服務(wù)架構(gòu)風(fēng)格的最新理念。討論的話題包括功能性服務(wù)設(shè)計(jì)(Functional Service Design)、集成領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD,Domain-Driven-Design)和REST、使用嵌入技術(shù)(Transclusion)創(chuàng)建基于微服務(wù)架構(gòu)的網(wǎng)站、微服務(wù)運(yùn)行時(shí)平臺(tái)的選擇、微服務(wù)對(duì)企業(yè)和員工的影響,以及如何在物聯(lián)網(wǎng)應(yīng)用中使用微服務(wù)。

microXchg微服務(wù)大會(huì)的開場(chǎng)報(bào)告是由Uwe Friedrichsen呈現(xiàn)的,報(bào)告探討了“彈性功能性服務(wù)設(shè)計(jì)”中的核心理念。InfoQ新聞已經(jīng)報(bào)道了該演講的細(xì)節(jié)內(nèi)容,關(guān)鍵要點(diǎn)包括:微服務(wù)開發(fā)人員應(yīng)該學(xué)會(huì)容錯(cuò)設(shè)計(jì)模式(例如回路熔斷器和艙壁)和緩存,但不能用于改善已經(jīng)很糟糕(過度耦合)的系統(tǒng)設(shè)計(jì);理解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD,Domain-Driven Design)和模塊化的重要性;注重可替換性而非可重用性;對(duì)系統(tǒng)的動(dòng)態(tài)行為建模等。

不要從靜態(tài)領(lǐng)域模型著手,能夠給我們帶來驚喜的是系統(tǒng)的動(dòng)態(tài)行為。

之后Oliver Gierke呈現(xiàn)了他的報(bào)告“DDD和REST:領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)API還是Web”。他在報(bào)告一開始就向聽眾推薦了InfoQ的《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)快速入門》一書,因?yàn)檫@本書提供了很好的DDD核心理念入門。Gierke建議軟件工程師在開發(fā)領(lǐng)域模型時(shí)應(yīng)盡量“使隱藏的概念清晰化”,并推薦通過觀看“在DDD中大規(guī)模使用Value Object”,以進(jìn)一步理解報(bào)告的主題。雖然一些開發(fā)人員可能會(huì)參考數(shù)據(jù)庫模式建立傳統(tǒng)的領(lǐng)域模型,但是DDD類型的模型比簡(jiǎn)單的外鍵關(guān)系等其他模型更能清晰地表達(dá)業(yè)務(wù)理念。

  DDD領(lǐng)域模型比數(shù)據(jù)庫模式揭示了更多的信息。

Gierke明確指出,REST并不等同于“提供HTTP的CRUD”。在設(shè)計(jì)展現(xiàn)給用戶的數(shù)據(jù)(即視圖)時(shí),必須注意要加入對(duì)這個(gè)問題的關(guān)注。報(bào)告中展示了一個(gè)API操作的四層模型,該模型涵蓋了四個(gè)方面的內(nèi)容,它們分別是:借助API的顯式操作、一些事件形式的操作、事件溯源(ES,Event Sourcing)和命令查詢職責(zé)分離(CQRS,Command Query Responsiblility Segregation)。Gierke指出,“超媒體即應(yīng)用狀態(tài)引擎(HATEOAS,Hypermedia As The Engine Of Application State)”這一概念對(duì)于客戶通信而言非常有用,可被用于與支持動(dòng)作和狀態(tài)轉(zhuǎn)移的客戶端交互,而非將它們發(fā)布為獨(dú)立的領(lǐng)域相關(guān)文檔。這或許是通過增加領(lǐng)域知識(shí)的復(fù)雜性來降低客戶端協(xié)議的復(fù)雜性,但是Gierke建議聽眾考慮一下這種權(quán)衡是否有用:

HATEOAS被用于給支持動(dòng)作和狀態(tài)轉(zhuǎn)移的客戶端發(fā)出指示。這或許是通過增加領(lǐng)域知識(shí)的復(fù)雜性來降低客戶端協(xié)議的復(fù)雜性,但是你應(yīng)問問自己:“什么會(huì)變更得更頻繁,是業(yè)務(wù)規(guī)則還是所使用的協(xié)議?”

第三個(gè)報(bào)告是由Gustaf Nilsson Kotte呈現(xiàn)的“微服務(wù)網(wǎng)站”,報(bào)告探討了高效構(gòu)建網(wǎng)站的原則,這些網(wǎng)站雖然以單一站點(diǎn)形式交付,但是由多個(gè)微服務(wù)組成。報(bào)告的核心前提是每個(gè)微服務(wù)應(yīng)該提供自己的前端,面向用戶的頁面應(yīng)該使用嵌入技術(shù)構(gòu)建。“頁面片段緩存(ESI,Edge-Side Includes)”可以在服務(wù)器端提供嵌入技術(shù),例如通過Akamai或Varnish。還有一些框架在基于JavaScript的客戶端提供嵌入技術(shù),例如AngularJS和h-include。報(bào)告中展示了每種方法的一些優(yōu)缺點(diǎn)。

  服務(wù)器端嵌入技術(shù)對(duì)比客戶端嵌入技術(shù)

Kotte在對(duì)報(bào)告做總結(jié)時(shí)指出,基于微服務(wù)的網(wǎng)站應(yīng)以持續(xù)集成、去中心化管理和優(yōu)化移動(dòng)設(shè)備和蜂窩網(wǎng)絡(luò)的性能為目標(biāo)。在不考慮全局客戶端依賴的情況下嵌入(Transclusing)服務(wù)器端資源,這可作為一種分解網(wǎng)頁(和微服務(wù))的方法,這個(gè)方法可以推動(dòng)上述目標(biāo)的達(dá)成。更多信息可以閱讀Kotte在近期撰寫的“微服務(wù)網(wǎng)站”一文。

此后,Dustin Huptas做了名為“AaaS,任何事情即服務(wù)。我們應(yīng)如何選型?”的演講。他提請(qǐng)聽眾注意,雖然一些服務(wù)提供商提供了以“某事即服務(wù)”命名的部署平臺(tái),但是應(yīng)該慎重選擇最適合自身應(yīng)用的解決方案。Huptas認(rèn)為單體應(yīng)用和經(jīng)典的SOA應(yīng)用最適合運(yùn)行在物理的基礎(chǔ)設(shè)施和基礎(chǔ)設(shè)施即服務(wù)(IaaS,Infrastructure as a Service)上,基于微服務(wù)的應(yīng)用最適合使用Iaas、平臺(tái)即服務(wù)(PaaS,Platform as a Service)以及新出現(xiàn)的功能即服務(wù)(FaaS,F(xiàn)unction as a Service),而“無服務(wù)”類型應(yīng)用最適合使用PaaS和FaaS。

  架構(gòu)/技術(shù)即服務(wù)模型。

Huptas給出了一種“自適應(yīng)IT立方體”,并探討了從任一部署平臺(tái)遷移到其它平臺(tái)時(shí)所應(yīng)考慮的架構(gòu)、技術(shù)和企業(yè)(包括文化和過程)問題。必須注意要使用漸進(jìn)的方式做遷移,而且遷移行動(dòng)必須得到企業(yè)的認(rèn)同。例如,軟件應(yīng)用的遷移或更新應(yīng)該具有長(zhǎng)期的承諾。

隨后,Daniel Bryant(即這篇新聞的作者)做了題目為“微服務(wù):對(duì)企業(yè)和員工的影響”的報(bào)告。報(bào)告的核心內(nèi)容指出了采用微服務(wù)時(shí)存在著很多挑戰(zhàn),這些挑戰(zhàn)主要圍繞著企業(yè)、過程和人員方面的問題。Bryant建議在實(shí)現(xiàn)一個(gè)基于微服務(wù)的應(yīng)用時(shí),企業(yè)應(yīng)該聚焦于定義和溝通清晰的目標(biāo)(包括商業(yè)價(jià)值和技術(shù)策略),在整個(gè)企業(yè)和技術(shù)棧上做優(yōu)化反饋,并確保在企業(yè)中清晰地定義職責(zé)。

  策略愿景的溝通。

Bryant建議企業(yè)在設(shè)定目標(biāo)前必須對(duì)狀態(tài)有一個(gè)清晰的認(rèn)識(shí),并建議使用 Wardley映射和價(jià)值流程分析工具。強(qiáng)大的技術(shù)領(lǐng)導(dǎo)力(在整個(gè)團(tuán)隊(duì)中共享)同樣非常重要。此外,“InnerSource”模型有助于更好地應(yīng)用從大規(guī)模開源項(xiàng)目中獲得的經(jīng)驗(yàn)教訓(xùn)。為顯示業(yè)務(wù)價(jià)值、架構(gòu)質(zhì)量和操作的有效性,必須將度量和信號(hào)“添加”到微服務(wù)中。Bryant在對(duì)演講做總結(jié)時(shí),建議在采用DevOps方法的開始階段就要定義好職責(zé),并指出持續(xù)集成通常是驅(qū)動(dòng)軟件交付過程持續(xù)改進(jìn)的催化劑,尤其當(dāng)構(gòu)建基于微服務(wù)應(yīng)用的集成復(fù)雜度與日俱增。

第一日大會(huì)以Fred George的主題演講“家庭中的物聯(lián)網(wǎng)和微服務(wù)”結(jié)束。George指出,我們當(dāng)前生活在一個(gè)“智能代理時(shí)代”,充斥著智能助手技術(shù),例如Apple Siri,Google Home和Microsoft Cortana。這些物聯(lián)網(wǎng)技術(shù)的主要?jiǎng)?chuàng)新點(diǎn)并非在于語音識(shí)別技術(shù)上,而是在于可以由終端用戶創(chuàng)建的后臺(tái)服務(wù)交互。

George展示了自己家中部署的物聯(lián)網(wǎng)技術(shù),其中包括 Amazon Echo、Phillips的物聯(lián)網(wǎng)燈泡、Apple TV和具備物聯(lián)網(wǎng)功能的交換機(jī)。這些設(shè)備的控制軟件是使用Ruby和Java開發(fā)的微服務(wù),它們通過Docker Swarm部署,并使用RabbitMQ事件總線作為通信手段。將所有物聯(lián)網(wǎng)設(shè)備黏合在一起的軟件開發(fā)技術(shù)原則包括:即時(shí)(just-in-time)設(shè)計(jì)、實(shí)現(xiàn)極小化的面向行為服務(wù)、將動(dòng)作和結(jié)論作為全局事件進(jìn)行發(fā)布,以及基于硬件的冪等性和冗余性構(gòu)建可靠性。

microXchg大會(huì)于今年2月16日到17日在柏林召開??梢栽诖髸?huì)的YouTube頻道上看到所有報(bào)告的視頻記錄。

查看英文原文: microXchg Microservices Conference Day One Summary: DDD, Platforms, and Organisational Impact

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)