新聞中心
為什么Spring仍然會(huì)是云原生時(shí)代優(yōu)秀平臺(tái)之一?
作者:阿里技術(shù) 2021-06-24 15:22:10
開發(fā)
開發(fā)工具
云原生 作為基于Java語言的Spring生態(tài),還能否適應(yīng)新的開發(fā)方式,比如Cloud Native、Serverless、Faas等,它還會(huì)是云原生時(shí)代的最佳平臺(tái)的選擇嗎?

今天和大家聊聊為什么我認(rèn)為Spring仍然會(huì)是云原生時(shí)代優(yōu)秀平臺(tái)之一。
時(shí)間回到2015年,當(dāng)時(shí)我在華盛頓參與SpringOne 2015大會(huì),主題演講是Cloud Native Enterprise。那次大會(huì)的口號(hào)也是Cloud Native,鋪天蓋地的海報(bào)都與Cloud Native有關(guān)。
你可能會(huì)感到奇怪,那個(gè)時(shí)候容器還沒有流行啊,怎么就敢稱為Cloud Native呢?雖然不少同學(xué)對(duì)Cloud Native的理解可能不太一樣,但是越來越多的人相信“Cloud native is about culture, not containers”。可以肯定的是,云原生不等于容器,它是一種軟件開發(fā)的文化,即便后續(xù)有基于V8隔離的Serverless或者WebAssembly FaaS平臺(tái),也還是云原生的范疇。
而在云原生的潮流下,Spring做了很多事情,比如支持分布式架構(gòu)的Spring Cloud,它基本是Java應(yīng)用分布式和云化的必備框架,各個(gè)云廠商都有Spring Cloud的對(duì)接版本,比如Spring Cloud Alibaba、AWS、Azure、GCP等,Spring Cloud極大地簡化了Java應(yīng)用和云服務(wù)的對(duì)接。
可以說,在微服務(wù)逐漸流行的過程中,Spring生態(tài)一直處于領(lǐng)先地位。很多人可能會(huì)疑惑:Spring之前取得的這些成就我們都知道,可這兩年好像并沒有什么發(fā)展,Spring還能繼續(xù)引領(lǐng)該技術(shù)趨勢嗎?
其實(shí),之所以會(huì)有這樣的疑惑,是因?yàn)楫?dāng)我們談到基于云和云原生環(huán)境的開發(fā)時(shí),普遍更關(guān)注的是技術(shù)棧的選擇,而這背后主要是費(fèi)用的問題。
每一位開發(fā)者或中小公司都希望購買更少的云資源干更多的事情,其中最主要的是內(nèi)存和CPU。內(nèi)存消耗要求小,如果能編譯為獨(dú)立可執(zhí)行程序,就盡量選擇一些輕量型的開發(fā)框架;而且要考慮語言高效且全異步化的框架,這樣可以保證充分利用CPU,避免線程等待等造成的浪費(fèi)。
綜合來看,很多人會(huì)更傾向于選擇Rust、Node.js、Golang等技術(shù)棧。而Java啟動(dòng)慢,消耗內(nèi)存多,好像還比較費(fèi)錢,看起來已經(jīng)不太適合接下來的云原生時(shí)代。
那么作為基于Java語言的Spring生態(tài),還能否適應(yīng)新的開發(fā)方式,比如Cloud Native、Serverless、Faas等,它還會(huì)是云原生時(shí)代的最佳平臺(tái)的選擇嗎?
接下來,我將從5個(gè)角度來為你分析一下這個(gè)問題,分別是:Java和JDK的發(fā)展、充滿良性競爭的JVM語言、成熟的面向服務(wù)架構(gòu)的Spring Boot和Spring Cloud、讓事件驅(qū)動(dòng)架構(gòu)更易使用的Spring Reactive。
一、Java和JDK的發(fā)展
我們知道Spring基于的是Java框架,而JDK又是運(yùn)行Java程序的基礎(chǔ)。要探討“Spring還會(huì)不會(huì)是云原生的最佳平臺(tái)之一”這個(gè)問題,我們需要先來看看JDK這個(gè)底座怎么樣,是不是能為Spring與時(shí)俱進(jìn)的發(fā)展提供良好的基礎(chǔ)。
首先是版本迭代?,F(xiàn)在OpenJDK的開發(fā)速度非???,之前是三年出一個(gè)重大版本,現(xiàn)在半年就出一個(gè)版本。好多同學(xué)感嘆現(xiàn)在都快Java 17了,而自己還在用Java 1.8。我們都說軟件開發(fā)要小步快跑,這個(gè)是一個(gè)好的開發(fā)方式:小步快跑、快速反饋、快速迭代開發(fā)。類似的還有JavaScript一年一版,TypeScript一年三版,Java一年兩版,可以說都是非常好的節(jié)奏。
其次是JDK特性的更新。如果你關(guān)注JDK的話就不難發(fā)現(xiàn),越來越多的特性被融入到JDK中,比如類似協(xié)程的輕量級(jí)線程Loom項(xiàng)目、提升Native調(diào)用支持的Panama項(xiàng)目(SIMD支持)、更高級(jí)的GC算法等。
而針對(duì)我們前面提到的Java啟動(dòng)慢、消耗內(nèi)存多的問題,Oracle推出了基于OpenJDK的GraalVM,它可以直接在JVM中運(yùn)行JavaScript、Python、Ruby等語言,是名副其實(shí)的Ployglot JVM。另外,GraalVM還提供了Native Image特性,可以將Java代碼轉(zhuǎn)換為獨(dú)立可執(zhí)行程序。Spring也推出Spring Native項(xiàng)目,可以非常方便將Spring Boot應(yīng)用native-image化,這樣Spring應(yīng)用啟動(dòng)的速度更快,消耗的內(nèi)存也更少。native-image化后的Spring應(yīng)用就可以滿足每一位開發(fā)者或中小公司對(duì)“上云且費(fèi)用更少”的需求。即便是Java的命令行應(yīng)用,GraalVM也有非常好的解決方案——Picocli + GraalVM Native Image + upx,它可以將Java應(yīng)用編譯為更便捷的可執(zhí)行程序。
下圖就是GraalVM多語言和Native Image支持列表,如下:
此外,各個(gè)云廠商也在積極JDK的開發(fā),如AliJDK、Amazon Corretto、Azul等,這些都是對(duì)JDK發(fā)展有非常好的作用。
所以說,對(duì)Spring而言,JDK這個(gè)基礎(chǔ)還是非常穩(wěn)固的。
二、充滿良性競爭的 JVM 語言
JDK并不是只能支持Java這一門編程語言,相反,它可以支持多種,比如Kotlin、Scala、Groovy等,這里我們統(tǒng)一稱之為JVM語言。當(dāng)下,JVM語言正處于一個(gè)充滿良性的競爭狀態(tài)。
我們知道每種語言都有自己擅長的使用場景。在云原生時(shí)代,多語言開發(fā)支持非常重要,開發(fā)人員需要根據(jù)實(shí)際的業(yè)務(wù)場景選擇不同的開發(fā)語言。無論JVM語言或者GraalVM支持的語言,都可以和Spring直接整合,方便開發(fā)人員充分利用Spring技術(shù)棧做開發(fā)。
其中,對(duì)Spring支持最好的語言是Kotlin。Kotlin和Spring的整合已經(jīng)滲透到框架的各個(gè)方面,比如Spring Boot和Kotlin整合,Spring Webflux對(duì)Kotlin Coroutines & Flow的支持,Spring Data、SpringIntegration、SpringCloud Function等也都包含對(duì)Kotlin的支持,這些都實(shí)現(xiàn)了對(duì)Kotlin的深度整合,目的就是讓語言和框架結(jié)合得更好,提升開發(fā)效率。此外,Kotlin和Scala也是與Spring整合得比較好的語言。
因?yàn)镴ava、Kotlin和Scala這三種語言在Spring中的整合非常好,所以接下來我就對(duì)它們具體說明一下,幫助你對(duì)JVM語言當(dāng)前的發(fā)展情況有一個(gè)比較清晰的認(rèn)知。
Java
Java語言的發(fā)展還是非??焖俚?,伴隨著OpenJDK的開發(fā),Java半年就會(huì)推出一個(gè)版本,每個(gè)版本都會(huì)伴隨著語法的升級(jí)、標(biāo)準(zhǔn)庫的升級(jí)等,極大地方便了開發(fā)人員。從Java 9到16,已經(jīng)完成了很多語法和特性方面的提升,比如大家知道var關(guān)鍵字(局部變量類型推導(dǎo))、Text block、Pattern Matching for instanceof、Record、sealed interface等。
Kotlin
雖然說Kotlin不完全是針對(duì)JVM的,它也包括Native、JavaScript等,但是Kotlin對(duì)JVM和Android的支持,目前是眾多Kotlin平臺(tái)中特性最多且穩(wěn)定的。
現(xiàn)在Kotlin的發(fā)展勢頭非常迅速,已經(jīng)孵化了多個(gè)子項(xiàng)目,比如最新的Kotlin Multiplatform Mobile(一套代碼支持多個(gè)手機(jī)平臺(tái))、 Kotlin Compose for Desktop(一套代碼開發(fā)多操作系統(tǒng)的桌面端應(yīng)用)等。當(dāng)然,這些變化中最引入注目的是Kotlin 1.5推出的Kotlin intermediate representation (IR) ,借助于新的IR,Kotlin的代碼可以編譯輸出到各種目標(biāo)平臺(tái)且程序更優(yōu),如大家都關(guān)注的Kotlin WebAssembly。
Scala
Scala 2是2006年3月發(fā)布的,距今已經(jīng)有非常長的時(shí)間了。好的消息是Scala 3.0已經(jīng)月2021年5月發(fā)布啦。Scala 3在添加新特性的同時(shí),去除了Scala 2中一些晦澀的特性,目的是讓Scala更好使用。如果你有興趣,可以關(guān)注下Scala3的官網(wǎng)。
Scala 3還有一個(gè)核心的變化是編譯器的調(diào)整,名稱為TASTy,是 Typed Abstract Syntax Trees的縮寫,結(jié)構(gòu)如下:
借助于TASTy,目前已經(jīng)有Scala.js ,后續(xù)有Scala WebAssembly也不奇怪。
Kotlin和Scala對(duì)函數(shù)編程都非常友好,在這點(diǎn)上都彌補(bǔ)了Java的不足。此外,Kotlin和Scala同時(shí)支持JavaScript編譯輸出,這個(gè)對(duì)基于V8的Serverless平臺(tái)幫助非常大,比如Cloudflare的Serverless平臺(tái)。此外,Kotlin和Scala也在積極探索對(duì)WebAssembly支持,這些都是支持Web開發(fā)的好消息。
當(dāng)然,JVM語言還有很多,如Groovy、Clojure等,也都在積極發(fā)展,這些JVM語言彼此競爭,彼此借鑒,這對(duì)開發(fā)者來說,都是非常好的消息。
Spring依賴的JDK和JVM語言說完了,下面我們來聊聊Spring中非常成功的兩個(gè)項(xiàng)目SpringBoot和Spring Cloud。
Spring Boot和Spring Cloud是非常成功的兩個(gè)項(xiàng)目,基于Java技術(shù)棧的互聯(lián)網(wǎng)公司基本都在使用。此外,近期如果你有關(guān)注Spring頂級(jí)布道師Josh Long的演講的話,就會(huì)發(fā)現(xiàn)他一直在講Spring Reactive,他還編寫了一本書,就叫《Spring Reactive》。
那為什么Spring Boot、Spring Cloud和Spring Reactive會(huì)如此備受關(guān)注呢?
我們知道,對(duì)于云原生來講,有兩種非常重要的架構(gòu)方案,一個(gè)是面向服務(wù)化架構(gòu),另一個(gè)是事件驅(qū)動(dòng)架構(gòu)。面向服務(wù)化架構(gòu)通?;谕降恼?qǐng)求/響應(yīng)模型,Spring Boot、Spring Cloud的目標(biāo)就是支持這一特性;事件驅(qū)動(dòng)架構(gòu)則基于異步化的消息模型和消息路由,而Spring Reactive這個(gè)項(xiàng)目的核心就是支撐這一架構(gòu)。
接下來,我就帶你看看Spring具體是如何支持云原生里這兩種重要的架構(gòu)方案的,借此,你也會(huì)對(duì)Spring里重要的三個(gè)項(xiàng)目Spring Boot、Spring Cloud和Spring Reactive有一個(gè)比較清楚的認(rèn)知。
三、成熟的面向服務(wù)架構(gòu)的Spring Boot和Spring Cloud
通常,云原生下的應(yīng)用都傾向于微服務(wù)設(shè)計(jì),而微服務(wù)設(shè)計(jì)的核心內(nèi)容就是面向服務(wù)化架構(gòu)設(shè)計(jì)和應(yīng)用編程接口(API)管理,Spring Boot和Spring Cloud的目標(biāo)就是支持這一特性的,而且這兩個(gè)項(xiàng)目做得非常成功,基于Java技術(shù)棧的互聯(lián)網(wǎng)公司基本都在使用。
我們知道,服務(wù)化接口最典型的結(jié)構(gòu)就是請(qǐng)求(Request)/響應(yīng)(Response)模式,尤其是Web的Request/Response模式。當(dāng)然了,遠(yuǎn)程RPC的request/response也在此范疇,比如HTTP REST、gRPC和Dubbo。
對(duì)應(yīng)到Spring中面向服務(wù)架構(gòu)設(shè)計(jì),SpringMVC可以非常好地支持Web和HTTP REST API,還包括對(duì)OpenAPI的支持。其他RPC類的通訊,也都有對(duì)應(yīng)的Spring Boot starter支持,在Spring Boot中也有對(duì)應(yīng)的starter組件支持,開發(fā)也非常便捷。如果要暴露其他形式服務(wù),如Web Service和SOAP等傳統(tǒng)服務(wù)形式,也可以通過Spring Web Services(spring-ws)項(xiàng)目達(dá)成。
另一個(gè)特性API管理,主要涉及服務(wù)治理和服務(wù)消費(fèi)端調(diào)用,對(duì)應(yīng)的核心技術(shù)棧主要是Spring Cloud項(xiàng)目。Spring Cloud為服務(wù)化架構(gòu)和API管理提供了多種基礎(chǔ)設(shè)置,如服務(wù)注冊(cè)發(fā)現(xiàn)、復(fù)雜均衡、API Gateway、斷路保護(hù)等,這些技術(shù)棧方便我們更好地管理和治理服務(wù),同時(shí)也讓消費(fèi)端能更好地調(diào)用服務(wù)。
綜合下來,服務(wù)化架構(gòu)和API管理,對(duì)應(yīng)到Spring Boot和Spring Cloud技術(shù)棧,典型的架構(gòu)如下:
如果你的架構(gòu)是面向服務(wù)的,如涉及到服務(wù)編排、服務(wù)治理和API Gateway等,那么Spring Cloud會(huì)是非常好的選擇,特性完備、框架穩(wěn)定、文檔完善、歷經(jīng)過諸如阿里巴巴等親自實(shí)踐。如果你的公司基于Java技術(shù)棧,那么Spring Cloud是實(shí)現(xiàn)微服務(wù)架構(gòu)最好的支持和實(shí)踐。
阿里巴巴從2018年7月開始就開源了Spring Cloud Alibaba,截止至今,它已經(jīng)獲得了超過1.9萬的star數(shù),已經(jīng)超過了所有其他實(shí)現(xiàn)的總和。從X-lab 開放實(shí)驗(yàn)室發(fā)布的《2020年微服務(wù)領(lǐng)域開源數(shù)字化報(bào)告》中,我們也看到Spring Cloud Alibaba已經(jīng)成為最活躍、最受開發(fā)者歡迎、工具鏈最完善的Spring Cloud實(shí)現(xiàn)。大家在選型過程中可以考慮。
四、讓事件驅(qū)動(dòng)架構(gòu)更易使用的Spring Reactive
前面我們講述了Spring對(duì)面向服務(wù)架構(gòu)的支持,還有另外一種架構(gòu)模式,就是事件驅(qū)動(dòng)架構(gòu)。事件驅(qū)動(dòng)架構(gòu)被普遍認(rèn)為是云原生首選的架構(gòu)方案,那么Spring對(duì)這方面支持如何?這就涉及到Spring Reactive這個(gè)項(xiàng)目了,其核心就是支撐事件驅(qū)動(dòng)架構(gòu)。
Spring Reactive是面向異步化消息的,消息或者事件是企業(yè)集成模式(EIP)首推的架構(gòu)模式,你可能聽說過Spring企業(yè)集成(SpringIntegration)這個(gè)項(xiàng)目,其主要就是負(fù)責(zé)企業(yè)集成。Spring Reactive的目的則是讓事件驅(qū)動(dòng)架構(gòu)設(shè)計(jì)也能成為應(yīng)用架構(gòu)的首選,而且要更加簡單。
這里講一個(gè)題外話:我和一些資深的Spring Boot和Spring Cloud程序員交流過,大家對(duì)各種服務(wù)化接口設(shè)計(jì)如數(shù)家珍,甚至包括代碼層級(jí)的細(xì)節(jié),但是一討論到企業(yè)集成模式(EIP),都表示這是Martin Fowler的知名大作,問及大家的系統(tǒng)中是否使用到諸如Apache Camel或者Spring Integration,大家都表示現(xiàn)在面向服務(wù)結(jié)構(gòu)已經(jīng)滿足業(yè)務(wù)需求啦。
那么這里就有一個(gè)問題,如此知名的EIP、ESB或者EDA為何沒有在架構(gòu)設(shè)計(jì)中所采納?是燈下黑被遺忘、還是門檻太高、或者壓根就是一個(gè)純理論,完全脫離實(shí)踐?
在面向服務(wù)化的架構(gòu)設(shè)計(jì)中,基本都是基于服務(wù)接口調(diào)用,并且調(diào)用是同步的,所以服務(wù)編排、API管理起著非常重要的作用。當(dāng)然在面向服務(wù)化的架構(gòu)設(shè)計(jì)中,我們也會(huì)引入一些消息驅(qū)動(dòng)設(shè)計(jì),借助像Kafka或者其他MQ系統(tǒng),處理一些異步化或者數(shù)據(jù)分析的場景,如用戶注冊(cè)后發(fā)一封郵件、用戶登錄觸發(fā)事件進(jìn)行安全審計(jì)、商品信息或價(jià)格修改后觸發(fā)搜索引擎增量索引、用戶下單后觸發(fā)各種通知等等。
面向服務(wù)有其好處,但是要解決非常多的問題,如非阻塞、服務(wù)注冊(cè)和發(fā)現(xiàn)、高性能、易集成等,這也是很多專家提出云原生場景中,事件驅(qū)動(dòng)架構(gòu)才是主流。
事件驅(qū)動(dòng)架構(gòu)不涉及服務(wù)注冊(cè)和發(fā)現(xiàn)這些負(fù)責(zé)的機(jī)制,基于消息的路由也非常容易,異步化消息通訊的性能更高(當(dāng)然你的賬單也更小),各種SaaS服務(wù)集成也更簡單(EventBridge產(chǎn)品)、FaaS觸發(fā)容易等等。如果你想了解更多,可以看看《Building Event-Driven Microservices》這本書。這里貼一下Redhat推薦的基于微服務(wù)思想的事件驅(qū)動(dòng)架構(gòu)設(shè)計(jì),如下:
從這張圖中我們可以看出,所有系統(tǒng)之間的交互都是通過消息進(jìn)行通訊的,微服務(wù)不再是面向接口的請(qǐng)求/響應(yīng)設(shè)計(jì),處理來自不同的應(yīng)用的Request/Response請(qǐng)求,而是以一種異步化的方式不斷地在處理來自Broker的消息。
說到這里,你可能明白了,如果說Cloud Native以事件驅(qū)動(dòng)設(shè)計(jì)架構(gòu)為核心,那么Spring Reactive的目的是讓事件驅(qū)動(dòng)架構(gòu)簡單易用,開發(fā)便捷,這個(gè)就是Spring Boot和Cloud對(duì)面向服務(wù)架構(gòu)的支持是一樣的。此外這兩種架構(gòu)并不是矛盾的,都是可以相互共存和相互補(bǔ)充的。
要實(shí)現(xiàn)更好的事件驅(qū)動(dòng)架構(gòu),兩個(gè)基礎(chǔ)少不了:異步化和消息化。異步化可以解決線程等待的問題,而消息及其消息路由,可以很好地實(shí)現(xiàn)應(yīng)用的松耦合。當(dāng)前越來越多的產(chǎn)品使用異步化消息方案,各種消息產(chǎn)品中間件自不必說,大家熟知的HTTP/2都是基于異步消息通訊的。
那為何要異步化?我們知道消息處理的模型和同步服務(wù)調(diào)用是不一樣的,如消息處理的Event Loop和Actor模型,都是非常高效的消息處理方式,如果我們?cè)谙⑻幚淼倪^程中,還要處理基于線程池的同步服務(wù)調(diào)用,勢必會(huì)影響模型和性能。當(dāng)然也不是完全不能有同步,只是盡量避免過多的服務(wù)同步調(diào)用的場景。
圍繞異步化和消息的場景,Spring要做非常多的工作,我們都知道Java對(duì)異步化支持非常滯后。Java 1.8加入了CompletionStage接口,Java 9添加了Reactive Stream支持介入了Flow。大家一直關(guān)注的輕量級(jí)線程的Loom項(xiàng)目還在開發(fā)中,預(yù)計(jì)要到Java 17才能發(fā)布。
所以目前Java多數(shù)的項(xiàng)目項(xiàng)目都會(huì)選擇Reactive框架,當(dāng)然Spring團(tuán)隊(duì)開發(fā)了Reactor框架,增加了Reactor對(duì)Netty、Kafka等適配,從而保證從底層開始就是異步化,所以這也是起名為Spring Reactive的原因。
接下來就是大家都看到的場景,Spring Webflux、Spring Integration、Spring Data等眾多項(xiàng)目都添加了對(duì)異步化的支持,所有的這些調(diào)整,就是要確保從底層開始就是全異步化的,你可以理解為5G的非獨(dú)立組網(wǎng)和獨(dú)立組網(wǎng)兩種方式,只是Spring選擇了Reactive這種獨(dú)立組網(wǎng)、獨(dú)立生態(tài)的方式,當(dāng)然工作量也是非常大的。這其中就涉及了兩個(gè)非常大的問題:數(shù)據(jù)庫和分布式通訊。
目前大多數(shù)NoSQL產(chǎn)品都提供了異步化的接口,異步化訪問NoSQL產(chǎn)品沒有什么問題。雖然NoSQL發(fā)展很迅猛,但是還是沒有撼動(dòng)數(shù)據(jù)庫的地位,我們都知道Java中數(shù)據(jù)庫訪問的規(guī)范是JDBC,但是JDBC是同步的接口,所以Spring啟動(dòng)了R2DBC項(xiàng)目,目的就是能夠以Reactive異步化接口訪問數(shù)據(jù)庫,目前來說,在Spring框架下使用JDBC和R2DBC的體驗(yàn)幾乎是一致的。
這里我和同學(xué)們同步兩個(gè)消息:Spring 5.3已經(jīng)內(nèi)置R2DBC支持,也就是spring-r2dbc,和spring-jdbc并列。大家都喜歡使用的MySQL數(shù)據(jù)庫,也推出了mariadb-r2dbc 1.0.0穩(wěn)定版,Oracle也推出了R2DBC版本的驅(qū)動(dòng)。當(dāng)然Java中的DB框架,Spring JPA、MyBatis等都添加了對(duì)R2DBC的適配。Hibernate也推出了hibernate-reactive項(xiàng)目(基于Vert.x database),雖然是不是基于R2DBC的,但是也是全異步化的。
另外一個(gè)問題就是分布式通訊,這個(gè)在微服務(wù)架構(gòu)中扮演中非常重要的作用。一直以來Spring主要支持HTTP,但是HTTP協(xié)議主要是針對(duì)瀏覽器設(shè)計(jì)的,在后端服務(wù)之間通訊優(yōu)勢并不明顯,而且性能上也沒有優(yōu)勢。當(dāng)然基于HTTP/2異步消息通訊的gRPC是一個(gè)很好的選擇,但是Spring一直沒有內(nèi)置gRPC支持,當(dāng)然這對(duì)大多數(shù)開發(fā)者來說,這不是什么大問題,第三方的grpc-spring-boot-starter做的也非常好。
如果你關(guān)注Spring發(fā)布的話應(yīng)該知道,Spring 5.2后續(xù)版本選擇RSocket通訊協(xié)議,并將RSocket內(nèi)置到spring-message項(xiàng)目中。為何?RSocket是全異步的二進(jìn)制消息通訊協(xié)議,提供了完備的通訊模型,而且是對(duì)等通訊的,非常匹配事件驅(qū)動(dòng)架構(gòu),這也是Spring Reactive將RSocket納入到Spring核心的原因,當(dāng)然RSocket背后的開發(fā),Spring和阿里團(tuán)隊(duì)起著主導(dǎo)作用。
CNCF下有一個(gè)CloudEvents規(guī)范,主要解決異構(gòu)系統(tǒng)的事件通訊,消息和事件在數(shù)據(jù)結(jié)構(gòu)上是一致的,都是Headers和Payload(data)結(jié)構(gòu),同時(shí)包含消息頭的擴(kuò)展。最新的cloudevents-java SDK 2.1,Spring messaging添加了對(duì)CloudEvents的支持,同時(shí)支持CloudEvent接口的編解碼支持,將消息和事件進(jìn)行了統(tǒng)一和整合,在Spring中處理CloudEvents和消息更簡單。
和企業(yè)集成相關(guān)產(chǎn)品,如Apache Camel,基于Akka的Alpakk、MuleSoft的Mule 4、Spring Integration等,這些產(chǎn)品都提供了對(duì)Reactive的集成,可以說可以和Spring Reactive無縫對(duì)接。
五、總結(jié)
回到文章的問題,為什么Spring仍然會(huì)是云原生時(shí)代最佳平臺(tái)之一?總結(jié)下來,Java和JDK的開發(fā)處以非常好的發(fā)展,JVM語言良性發(fā)展且充滿競爭。成熟的Spring Boot和Spring Cloud已經(jīng)讓面向服務(wù)的架構(gòu)設(shè)計(jì)簡單易用,而Spring Reactive則將事件驅(qū)動(dòng)架構(gòu)更易被使用,同時(shí)可以讓更多的企業(yè)系統(tǒng)完成和Spring Reacitve對(duì)接,無論是IoT設(shè)備、ESB產(chǎn)品、SaaS或者云服務(wù)等。
針對(duì)微服務(wù)的場景,Spring Cloud提供了成熟的面向架構(gòu)服務(wù)基礎(chǔ),Spring Reactive則是面向未來的事件驅(qū)動(dòng)架構(gòu),當(dāng)然這里并不是說,面向服務(wù)的架構(gòu)已經(jīng)過時(shí),事實(shí)上面向服務(wù)的架構(gòu)非常成功,但是在云原生或新的Serverless環(huán)境下,可能事件驅(qū)動(dòng)架構(gòu)可能更合理一些,或者是兩者的配合使用,不用擔(dān)心,Spring在這兩方面都做的非常好。
新聞名稱:為什么Spring仍然會(huì)是云原生時(shí)代優(yōu)秀平臺(tái)之一?
文章URL:http://m.fisionsoft.com.cn/article/djgoejp.html


咨詢
建站咨詢
