SpringOne 2017:与Pivotal聊大会、Spring、Reactor、WebFlux及其他
在舊金山舉行的SpringOne平臺(tái)大會(huì)上,我們采訪了來(lái)自Pivotal的Pieter Humphrey和Simon Basle。
\\InfoQ:歡迎二位。你們能介紹一下你們是做什么的嗎?
\\Pieter:我負(fù)責(zé)Spring團(tuán)隊(duì)產(chǎn)品和市場(chǎng)方面的工作,比如提供視頻在YouTube頻道上播放,等等。\\Simon:我是Reactor項(xiàng)目的軟件工程師。\\InfoQ:這次大會(huì)令人印象深刻。你們帶來(lái)了很多很好的內(nèi)容,你們是怎么找到這些講師的?又是如何評(píng)選演講內(nèi)容的?以及如何向潛在的與會(huì)者進(jìn)行宣傳的?
\\Pieter:我們的挑戰(zhàn)在于如何找到合適的主題,包括開(kāi)源項(xiàng)目、基礎(chǔ)設(shè)施開(kāi)發(fā)相關(guān)的主題和應(yīng)用開(kāi)發(fā)相關(guān)的主題。在之前,我們還沒(méi)有經(jīng)歷過(guò)這些。對(duì)于大多數(shù)人來(lái)說(shuō),他們習(xí)慣了參加開(kāi)發(fā)者大會(huì)或者基礎(chǔ)設(shè)施大會(huì)。要把這兩種大會(huì)結(jié)合在一起,你需要面對(duì)一大幫人,他們有不同的興趣點(diǎn),他們可能會(huì)說(shuō)“我對(duì)這個(gè)不感興趣”,或者“為什么不能多講一些這方面的內(nèi)容”,所以要讓每個(gè)人都滿意是很難的。不過(guò)我覺(jué)得事情在往好的方面發(fā)展,人們開(kāi)始意識(shí)到基礎(chǔ)設(shè)施即代碼,這是他們需要關(guān)注的東西。所以,把這些東西放在一個(gè)大會(huì)上就沒(méi)有那么難了,比如用于應(yīng)用開(kāi)發(fā)的基礎(chǔ)設(shè)施、敏捷、案例學(xué)習(xí)。這就是我們面臨的最大的一個(gè)挑戰(zhàn)。\\InfoQ:這個(gè)世界正朝著DevOps的方向發(fā)展,我發(fā)現(xiàn)DevOps的發(fā)展有跡可循,我覺(jué)得這是不是要?dú)w功于CloudFoundry提供的DevOps CI/CD能力?
\\Pieter:是的,不僅僅是CloudFoundry,Kubernetes也是以容器管理為中心。事實(shí)上,CI/CD是很重要的,我們?cè)谡務(wù)撨@些平臺(tái)時(shí),你可能是以人們能夠很好地實(shí)施CI/CD為前提。我們的產(chǎn)品在很大程度上也依賴了好的CI/CD。這是一個(gè)巨大的挑戰(zhàn)。\\InfoQ:你能介紹一下CloudFoundry是如何助力DevOps的嗎?
\\Pieter:Concourse在前期取得了一定的成功。Jenkins服務(wù)器是有狀態(tài)的,所以無(wú)法將配置提交到代碼版本控制系統(tǒng)上。而Concourse是無(wú)狀態(tài)的,開(kāi)發(fā)人員可以將配置管道提交到系統(tǒng)中,可以在任何時(shí)候重新創(chuàng)建worker節(jié)點(diǎn)。在開(kāi)發(fā)人員看來(lái),這是Concourse的優(yōu)點(diǎn)之一。這種方式相當(dāng)流行,管道即代碼,基礎(chǔ)設(shè)施即代碼,一切皆代碼。\\InfoQ:不過(guò)我們從演講中聽(tīng)到,Pivotal CloudFoundry處理了很多DevOps管道細(xì)節(jié),你能解釋一下PCF是怎么做到的嗎?
\\Pieter:我們看到Kubernetes在市場(chǎng)上很受歡迎,而在Kubernetes之前好幾年,我們就已經(jīng)在CloudFoundry中嵌入了一個(gè)容器管理系統(tǒng)。不管怎么說(shuō),Pivotal的應(yīng)用服務(wù)是對(duì)應(yīng)用的高度抽象,PKS(我們正在開(kāi)發(fā)的Kubernetes服務(wù))就對(duì)容器進(jìn)行了抽象。如果你是一名開(kāi)發(fā)者,而且你只喜歡CloudFoundry好的一面,你的應(yīng)用程序是無(wú)狀態(tài)的,并且只有服務(wù)層,那么PAS就能夠滿足你的需求。但如果你想加入數(shù)據(jù)庫(kù),或者要使用ElasticSearch,或者想要控制TCP流量、自定義端口,那么Kubernetes會(huì)是更好的選擇。這是一個(gè)不斷演化的過(guò)程,我們并不想做出萬(wàn)金油式的產(chǎn)品,我們知道一種方案只適用于某一部分場(chǎng)景。\\InfoQ:Reactor API似乎發(fā)展得很快,涵蓋了很多內(nèi)容,而且越來(lái)越健壯和成熟。你們是怎么做到的?你們是如何添加新特性的?你們是怎么知道這些特性有沒(méi)有用的?你們是如何實(shí)現(xiàn)它們的?
\\Simon:實(shí)現(xiàn)是最困難的部分!因?yàn)槲覀兊挠脩粼絹?lái)越多,他們的應(yīng)用場(chǎng)景也在不斷變化,他們會(huì)說(shuō)“如果能夠提供這種操作就好了”。我們歡迎來(lái)自社區(qū)的反饋。但我們首先要看看通過(guò)組合已有的操作是否能夠滿足用戶的需求。這個(gè)庫(kù)真的很強(qiáng)大,我們有很多基本特性,通過(guò)組合它們可以實(shí)現(xiàn)復(fù)雜的異步操作管道。但有時(shí)候會(huì)有人說(shuō)“這太難調(diào)試了,或許你們可以提供新的操作”,這些建議我們也會(huì)采納。當(dāng)然,除此之外,也會(huì)有bug修復(fù)、特性改進(jìn)和優(yōu)化。 也有一些代碼提交者不是Pivotal的員工,他們也會(huì)向我們提供反饋。比如David Karnok,他負(fù)責(zé)RxJava的開(kāi)發(fā),同時(shí)也參與了Reactor項(xiàng)目。最初,他重度參與到項(xiàng)目中,設(shè)計(jì)了所有的下一代反應(yīng)式組件。他現(xiàn)在仍然很活躍,大家可以在拉取請(qǐng)求上看到他給出的批注。 Reactor沒(méi)有像RxJava那樣的歷史包袱,這是Reactor好的一面,但兩者都有它們好的地方,所以David繼續(xù)活躍在Reactor項(xiàng)目上當(dāng)然是一個(gè)好跡象。\\InfoQ:為什么我們需要兩個(gè)反應(yīng)式項(xiàng)目?如果我是一名Spring開(kāi)發(fā)者,我為什么要選擇RxJava?
\\Simon:它們其實(shí)是不一樣的,RxJava面向的是另一波人。事實(shí)上,RxJava仍然支持Java 6,這也是Android大量使用RxJava的主要原因,而Reactor的目標(biāo)并不在Android上。如果你是做Android開(kāi)發(fā),那么可以使用RxJava,而如果是做后端的Spring開(kāi)發(fā),那么可以選擇Reactor。但它們都遵循相同的反應(yīng)式流規(guī)范,選擇在于你自己。Spring內(nèi)部使用了Reactor,但如果你要使用RxJava Route和Flowable,那也沒(méi)有問(wèn)題。\\InfoQ:我經(jīng)常覺(jué)得需要用到Flux操作,Java的可擴(kuò)展性讓我在必要的時(shí)候可以自己實(shí)現(xiàn)這類功能。是否可以使用Reactor來(lái)創(chuàng)建組件生成新的Flux?
\\\Simon:我們的目標(biāo)是提供一系列高效的操作來(lái)滿足大家的需求。如果你們看過(guò)Reactor的源代碼,你會(huì)發(fā)現(xiàn)一些新的東西。我們使用了一些高級(jí)的模式,用戶不需要自己去實(shí)現(xiàn)操作,因?yàn)槟菢犹闊┝?#xff0c;我們提供了一組反應(yīng)式流API,可以幫助用戶來(lái)實(shí)現(xiàn)操作。但如果這些仍然無(wú)法滿足你們的需求,那么就有點(diǎn)麻煩了。David寫了一些有關(guān)RxJava2的Wiki,解釋了他的實(shí)現(xiàn)模式,但那個(gè)很復(fù)雜,不到萬(wàn)不得已最好不要那么做。如果你們實(shí)在找不到你們需要的操作,可以嘗試換一種方式來(lái)解決問(wèn)題。或許可以進(jìn)行組合操作,或者使用命令式的方式來(lái)處理。如果非要一個(gè)新的操作不可,那么可以在我們的問(wèn)題跟蹤系統(tǒng)里提交請(qǐng)求。
\\在今天的一個(gè)演講中,有人建議增加一個(gè)zip操作,在第一個(gè)流結(jié)束時(shí)不結(jié)束zip操作,有點(diǎn)類似左連接zip。目前還沒(méi)有這樣的操作,所以或許可以考慮增加一個(gè)。
\\\InfoQ:我想你應(yīng)該知道,如果能夠通過(guò)現(xiàn)有的操作來(lái)組合出任意一種新的操作,那么你們的工作也就完成了。
\\Simon:是的,問(wèn)題在于我們要知道需要提供哪些操作。要知道,命令式編程習(xí)慣會(huì)影響到我們尋找正確的解決方案。\\InfoQ:在演講中,你們?cè)趶?qiáng)調(diào)Spring Web MVC和Spring WebFlux的互操作性,我想這樣可以降低學(xué)習(xí)門檻,我可以開(kāi)發(fā)一個(gè)Web MVC Controller,然后把它變成WebFlux Controller,只需要把返回類型改成Flux。這是出于技術(shù)決策還是市場(chǎng)決策的考慮?
\\Simon:我們嘗試為不熟悉反應(yīng)式編程的開(kāi)發(fā)者提供良好的開(kāi)發(fā)者體驗(yàn)。如果你有一個(gè)MVC Controller,返回的是Flux類型,框架會(huì)知道怎樣處理它。我們想盡可能逐步為開(kāi)發(fā)者提供這種簡(jiǎn)單的開(kāi)發(fā)體驗(yàn)。剛開(kāi)始先邁出一小步,先從Web MVC開(kāi)始,將返回類型改成Flux。如果這樣沒(méi)問(wèn)題,就繼續(xù),或者可以直接切換到WebFlux,進(jìn)入新的世界。\\Pieter:是的,這更多是一種技術(shù)上的決策,我們嘗試著從用戶的角度看待問(wèn)題,逐步幫助他們轉(zhuǎn)向新的思維。\\InfoQ:我覺(jué)得這是一個(gè)非常好的決策,學(xué)習(xí)反應(yīng)式開(kāi)發(fā)方式最難的部分就是如何克服陡峭的學(xué)習(xí)前,事實(shí)上,可以說(shuō)它是一門新的編程語(yǔ)言。我們很感激你們所做的每一件。之前你們面向?qū)ο?#xff0c;后來(lái)又面向流,跨度非常大。
\\Pieter:是的。另一方面,我們也想說(shuō)的是,并非所有的東西都是反應(yīng)式的。我們可以做出自己的選擇,這個(gè)世界不是非黑即白。\\InfoQ:我發(fā)現(xiàn)大會(huì)有很多內(nèi)容是關(guān)于流程的,比如敏捷,Vaughn Vernon還提到了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),還有整個(gè)系列是關(guān)于DevOps的。
\\Pieter:我們?cè)囍嘧鲆恍┘軜?gòu)方法論方面的演講。我們是Pivotal實(shí)驗(yàn)室,所以會(huì)有很多演講是關(guān)于敏捷、測(cè)試驅(qū)動(dòng)開(kāi)發(fā)、CI/CD。我希望能夠看到更多這樣的內(nèi)容,談?wù)撛O(shè)計(jì)、架構(gòu)、新的工具,開(kāi)發(fā)者們?nèi)琊囀晨实叵肼?tīng)到這類演講,所以我們會(huì)關(guān)注這一塊。\\InfoQ:與會(huì)者的組成是怎樣的?
\\Pieter:他們大部分都來(lái)自美國(guó),60%是開(kāi)發(fā)者,40%來(lái)自其他領(lǐng)域,如Ops、IT管理、管理層,等等。我們也為他們準(zhǔn)備了特定的內(nèi)容,比如案例學(xué)習(xí)、技術(shù)故事等。\\InfoQ:SpringOne大會(huì)未來(lái)有什么計(jì)劃?2018年將在哪里召開(kāi)?
\\Pieter:下一屆將會(huì)在華盛頓舉行,明年的9月24日至27日。我們想多去幾個(gè)地方,東海岸、西海岸、東海岸中部,時(shí)間根據(jù)具體情況而定,一般在每年的最后一個(gè)季度。今年我們賣出了3000張票,也賣出了贊助廣告位,地點(diǎn)在莫斯康會(huì)展中心。今年的規(guī)模是去年的兩倍。你們可以看到基礎(chǔ)設(shè)施即代碼正在發(fā)展,你也看到有些與會(huì)者不僅僅是來(lái)看應(yīng)用開(kāi)發(fā)相關(guān)的內(nèi)容,也是來(lái)看基礎(chǔ)設(shè)施開(kāi)發(fā)的相關(guān)內(nèi)容。\\InfoQ:對(duì)我的開(kāi)發(fā)工作來(lái)說(shuō),Spring已經(jīng)變得與Java同樣重要,我無(wú)法想象不使用Spring將會(huì)是怎樣的一番景象。相信大部分Java開(kāi)發(fā)者也有同感,Pivotal為開(kāi)發(fā)社區(qū)做的事情是非常有意義,而對(duì)于Pivotal來(lái)說(shuō)這又意味著什么呢?
\\Pieter:是的。我們要教會(huì)客戶如何實(shí)施敏捷,如果進(jìn)行測(cè)試驅(qū)動(dòng)開(kāi)發(fā),如何開(kāi)發(fā)自己的平臺(tái)。我們走向商業(yè)化的動(dòng)機(jī)主要來(lái)自那些正在尋找CloudFoundry和Bosh這樣平臺(tái)的用戶,在擺脫了應(yīng)用程序開(kāi)發(fā)的桎梏,他們還要做很多其他的事情,而這也這是我們的機(jī)會(huì)。我們的策略就是為開(kāi)發(fā)者提供足夠的價(jià)值,把他們留在我們的編程范式里,在我們的平臺(tái)上可以很容易地運(yùn)行他們的應(yīng)用。對(duì)于小公司來(lái)說(shuō),他們或許不需要我們的產(chǎn)品,但大企業(yè)或許能從我們的平臺(tái)中看到價(jià)值。\\查看英文原文:SpringOne 2017 - Chat with Pivotal about the Conference, Spring, Reactor, WebFlux and Other Goodies
總結(jié)
以上是生活随笔為你收集整理的SpringOne 2017:与Pivotal聊大会、Spring、Reactor、WebFlux及其他的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spring的Bean的初始化
- 下一篇: JAVA入门[23]-SpringBoo