San Francisco QCon大會(huì)上,Rafael Schloming提出了“面向服務(wù)的開發(fā)”,他認(rèn)為,想遷移到微服務(wù)的組織必須要尋求一種方法來打破單一的開發(fā)過程,而不僅僅是試圖打破傳統(tǒng)的系統(tǒng)架構(gòu)。將新成立的微服務(wù)團(tuán)隊(duì)看作是內(nèi)部的“衍生品(spinoffs)”,他們具有團(tuán)隊(duì)邊界,并且鼓勵(lì)他們自給自足和自我管理,除此之外,這些團(tuán)隊(duì)必須得到有效工具的支持,以便在生產(chǎn)中調(diào)試、部署和監(jiān)測服務(wù)。
Schloming是Datawire的CTO和首席架構(gòu)師,演講開始時(shí),他問了聽眾一個(gè)問題,將一個(gè)龐大的系統(tǒng)遷移到基于微服務(wù)的應(yīng)用程序時(shí),他們遇到的第一個(gè)難題是什么。常見的回答有:“如何分解一個(gè)大型系統(tǒng)?”、“如何用微服務(wù)構(gòu)建我的應(yīng)用程序?”以及“我需要怎么樣的基礎(chǔ)架構(gòu)才能使我在微服務(wù)中受益?”。根據(jù)他2013年在Datawire開發(fā)微服務(wù)應(yīng)用程序的經(jīng)驗(yàn),Schloming說,最重要的問題也是通常最容易被忽略的問題是“如何分解一個(gè)大型系統(tǒng)?”,因?yàn)殚_發(fā)過程對于建立和保持開發(fā)速度來說至關(guān)重要。
在開發(fā)應(yīng)用程序或服務(wù)時(shí),應(yīng)用程序的交付生命周期可以劃分為三個(gè)階段:原型(prototyping)階段、生產(chǎn)(production)階段以及關(guān)鍵任務(wù)(mission critical)階段。在原型階段,維護(hù)高速的功能交付通常要容易得多,因?yàn)樵谶@個(gè)階段產(chǎn)品穩(wěn)定性不那么重要。當(dāng)產(chǎn)品交付從生產(chǎn)階段轉(zhuǎn)移到關(guān)鍵任務(wù)階段時(shí),為了提高穩(wěn)定性往往會(huì)犧牲速度。對于應(yīng)用程序中的所有組件來說,使用單一交付過程是十分低效的,因?yàn)檫@樣做往往會(huì)導(dǎo)致在單一穩(wěn)定性與速度間側(cè)重點(diǎn)的不同(總是要犧牲其中的一項(xiàng))。
以基于微服務(wù)的系統(tǒng)開發(fā)一個(gè)應(yīng)用程序時(shí)可以使用多個(gè)流程:每個(gè)微服務(wù)產(chǎn)品團(tuán)隊(duì)都可以根據(jù)當(dāng)前該過程在交付生命周期中的階段而選擇合適的流程。微服務(wù)可能是一個(gè)分布式的開發(fā)架構(gòu),但是它們也可以使用分布式的開發(fā)工作流,該工作流由各種的同步開發(fā)過程組成,并且具有不同的速度與穩(wěn)定性間的側(cè)重程度。然而,采用這種工作方式需要組織的變革以及技術(shù)的改變。
站在組織的角度來看,創(chuàng)建一個(gè)圍繞產(chǎn)品開發(fā)自給自足、自治的軟件團(tuán)隊(duì)是頗有裨益的。然而,從單一過程到微過程的轉(zhuǎn)變需要訓(xùn)練、交流和代理(delegation)。微服務(wù)產(chǎn)品團(tuán)隊(duì)中的每個(gè)人都將經(jīng)歷完整的開發(fā)生命周期(從本地編碼到通過持續(xù)交付將代碼部署到生產(chǎn),再到監(jiān)測應(yīng)用程序),這個(gè)過程需要額外的訓(xùn)練。最終,這種變化意味著專家有機(jī)會(huì)成為多面手,從而使得整體系統(tǒng)以及各項(xiàng)操作的實(shí)現(xiàn)更加完善。
在產(chǎn)品團(tuán)隊(duì)中,人們可能不會(huì)使用同一種語言,但是如果這種沖突處理得當(dāng)?shù)脑挘鼤?huì)成為協(xié)作的來源。組織內(nèi)的一個(gè)小團(tuán)隊(duì)可能把握著整個(gè)系統(tǒng)的重要部分,自治是一個(gè)組織在快節(jié)奏的市場環(huán)境中有效規(guī)模化的唯一方法。團(tuán)隊(duì)?wèi)?yīng)該努力確保他們不需要依賴其他團(tuán)隊(duì)來實(shí)現(xiàn)自己的目標(biāo),這其中包括消除對中心化架構(gòu)和運(yùn)營團(tuán)隊(duì)的依賴(即使依賴一個(gè)提供自助訪問架構(gòu)的“平臺(tái)團(tuán)隊(duì)”通常情況下是有好處的)。
Schloming認(rèn)為,要想實(shí)現(xiàn)微服務(wù)的組織變革,最好的方法是把每一個(gè)產(chǎn)品團(tuán)隊(duì)都看作是一個(gè)商業(yè)衍生品。就像現(xiàn)有的開發(fā)團(tuán)隊(duì)可能會(huì)使用諸如Twilio或Stripe這樣的第三方服務(wù)一樣,產(chǎn)品團(tuán)隊(duì)也應(yīng)該使用同樣的方式與內(nèi)部服務(wù)進(jìn)行集成。
關(guān)于微服務(wù)的技術(shù)實(shí)現(xiàn),Schloming概述了產(chǎn)品交付生命每個(gè)周期階段的目標(biāo)。原型階段的目標(biāo):工具以及用戶的快速反饋;生產(chǎn)用戶以及增長(production users and growth)階段的目標(biāo):不影響用戶的前提下增加新功能;以及關(guān)鍵任務(wù)階段的目標(biāo):保證穩(wěn)定性。這樣通常會(huì)形成一個(gè)并行的單一平臺(tái)(基于微服務(wù)的)工作流,該工作流可以隨著產(chǎn)品的成熟而轉(zhuǎn)換。可以使用Docker、Kubernetes和Envoy服務(wù)代理作為底層平臺(tái)組件,這個(gè)實(shí)例就展示了產(chǎn)品生命周期中每個(gè)階段的技術(shù)挑戰(zhàn)。
在原型階段,要在生產(chǎn)過程中獲得組織對實(shí)驗(yàn)性項(xiàng)目的投資是很有挑戰(zhàn)性的(例如,進(jìn)行A/B測試或者canarying的試驗(yàn))。除此之外,從技術(shù)上來說,在本地運(yùn)行微服務(wù)也是具有挑戰(zhàn)性的。克服這一問題的策略是提供自助服務(wù)供應(yīng)(provisioning)和開發(fā)容器,這些容器可以通過連續(xù)的交付流水線部署到遠(yuǎn)程環(huán)境中。Schloming給出了一個(gè)使用Datawire創(chuàng)建的開源工具(forge.sh和telepresence)的例子。forge.sh用于創(chuàng)建一個(gè)輕量級(jí)的開發(fā)環(huán)境,它是產(chǎn)品構(gòu)建和相關(guān)依賴關(guān)系的單一數(shù)據(jù)源。telepresence用于代理遠(yuǎn)程的Kubernetes集群。通過這種方式可以使本地開發(fā)的應(yīng)用程序(以及相關(guān)的調(diào)試工具)與遠(yuǎn)程服務(wù)進(jìn)行交互,就好像它在集群中運(yùn)行一樣。
對于交付生命周期的生產(chǎn)用戶和增長階段,核心挑戰(zhàn)是度量用戶對實(shí)驗(yàn)性功能的影響(并認(rèn)識(shí)到在速度和穩(wěn)定性之間的側(cè)重點(diǎn)),以及測試新特性和降低軟件缺陷的影響。使用多版本部署可以克服這些問題,通過canarying添加新特性(將其部署為新服務(wù)),并隨著所觀測的用戶指標(biāo)的升高,逐漸增加流量。Envoy,是一個(gè)第7層(應(yīng)用層)代理,它是由Matt Klein和Lyft工程團(tuán)隊(duì)構(gòu)建并運(yùn)行的,它可以用于解決上述問題,因?yàn)樗械牧髁慷伎梢酝ㄟ^這個(gè)代理進(jìn)行路由和控制。在過去的6個(gè)月里,由于Istio(它使用Envoy作為服務(wù)網(wǎng)格數(shù)據(jù)平面)和其它“服務(wù)網(wǎng)格(meshes)”的出現(xiàn),人們對這個(gè)概念越來越感興趣了。
最后一個(gè)階段,關(guān)鍵任務(wù)軟件階段圍繞防止軟件功能和應(yīng)用程序可觀察性的倒退而進(jìn)行。克服這一問題的策略包括定義服務(wù)水平目標(biāo)(SLOs)和實(shí)現(xiàn)第7層(應(yīng)用層)的可觀察性。SLOs的創(chuàng)建和執(zhí)行需要通過契約型服務(wù)級(jí)協(xié)議(Service Level Agreements,SLAs),并且需要在整個(gè)組織范圍內(nèi)進(jìn)行應(yīng)用。第7層的可觀測性可以通過Envoy(或者類似的代理)進(jìn)行實(shí)現(xiàn),因?yàn)檫@個(gè)代理在網(wǎng)絡(luò)堆棧層中運(yùn)行,并且可以訪問網(wǎng)絡(luò)中的所有服務(wù)端到服務(wù)端的流量。
Schloming在演講的最后階段總結(jié)道,當(dāng)一個(gè)組織開始進(jìn)行微服務(wù)遷移時(shí),需要注意的是,除了分解整體架構(gòu)之外,還應(yīng)該優(yōu)先對整體流程進(jìn)行分解。將微服務(wù)產(chǎn)品團(tuán)隊(duì)組織為自給自足和自治的“衍生品”是有好處的。除此之外,組織必須創(chuàng)建相關(guān)工具來實(shí)現(xiàn)有效的面向服務(wù)的開發(fā)。
Rafael Schloming主題演講“面向服務(wù)的開發(fā)”(PDF,2MB)中的演示文稿可以在QCon SF網(wǎng)站上進(jìn)行訪問。這個(gè)演講的視頻以及所有的演講視頻會(huì)由InfoQ在接下來的幾個(gè)月內(nèi)整理出來,屆時(shí)可以在相關(guān)網(wǎng)站進(jìn)行訪問。
查看英文原文:Service-Oriented Development: Rafael Schloming Shares Lessons Learned with Building Microservice