spring 、springFramework 、springcloud、springboot區(qū)別聯(lián)系

<meta charset="utf-8">

Spring

Spring是一個(gè)生態(tài)體系(也可以說是技術(shù)體系),是集大成者,它包含了Spring Framework、Spring Boot、Spring Cloud等(還包括Spring Cloud data flow、spring data、spring integration、spring batch、spring security、spring hateoas),可以參考鏈接:https://spring.io/projects,如下圖所示(部分截圖):

image

About spring

Spring Framework

Spring Framework是整個(gè)spring生態(tài)的基石,它可是硬生生的消滅了Java官方主推的企業(yè)級(jí)開發(fā)標(biāo)準(zhǔn)EJB,從而實(shí)現(xiàn)一統(tǒng)天下。Spring官方對(duì)Spring Framework簡(jiǎn)短描述:為依賴注入、事務(wù)管理、WEB應(yīng)用、數(shù)據(jù)訪問等提供了核心的支持。Spring Framework專注于企業(yè)級(jí)應(yīng)用程序的“管道”,以便開發(fā)團(tuán)隊(duì)可以專注于應(yīng)用程序的業(yè)務(wù)邏輯。

筆者要提醒的是,千萬不要把Spring和Spring Framework搞混淆了,很多文章都錯(cuò)誤的定義了spring:spring是一個(gè)一站式的輕量級(jí)的java開發(fā)框架,核心是控制反轉(zhuǎn)(IoC)和面向切面(AOP),針對(duì)于開發(fā)的WEB層(springMVC)、業(yè)務(wù)層(IoC)、持久層(jdbcTemplate)等都提供了多種配置解決方案。這是Spring Framework的定義,至于Spring,是整個(gè)生態(tài)。

但是,無論Spring Framework接口如何簡(jiǎn)化,設(shè)計(jì)如何優(yōu)美,始終無法擺脫被動(dòng)的境況:由于它自身并非容器,所以基本上不得不隨JavaEE容器啟動(dòng)而裝載,例如Tomcat、Jetty、JBoss等。然而Spring Boot的出現(xiàn),改變了Spring Framework甚至整個(gè)Spring技術(shù)體系的現(xiàn)狀(摘自小馬哥的《SpringBoot編程思想》)。

Spring Boot

Spring Boot這家伙簡(jiǎn)直就是對(duì)Java企業(yè)級(jí)應(yīng)用開發(fā)進(jìn)行了一場(chǎng)浩浩蕩蕩的革命。如果稍微有幾年工作經(jīng)驗(yàn)的老油條,應(yīng)該都記得以前的Java Web開發(fā)模式:Tomcat + WAR包。WEB項(xiàng)目基于spring framework,項(xiàng)目目錄一定要是標(biāo)準(zhǔn)的WEB-INF + classes + lib,而且大量的xml配置。如果說,以前搭建一個(gè)SSH架構(gòu)的Web項(xiàng)目需要1個(gè)小時(shí),那么現(xiàn)在應(yīng)該10分鐘就可以了。

Spring Boot能夠讓你非常容易的創(chuàng)建一個(gè)單機(jī)版本、生產(chǎn)級(jí)別的基于spring framework的應(yīng)用。然后,"just run"即可。Spring Boot默認(rèn)集成了很多第三方包,以便你能以最小的代價(jià)開始一個(gè)項(xiàng)目。

我們看看官方對(duì)Spring Boot的定義:

Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring. Spring Boot takes an opinionated view of building production-ready applications.

即Spring Boot為快速啟動(dòng)且最小化配置的spring應(yīng)用而設(shè)計(jì),并且它具有用于構(gòu)建生產(chǎn)級(jí)別應(yīng)用的一套固化的視圖(摘自小馬哥的《SpringBoot編程思想》)。這里的固化的視圖,筆者認(rèn)為可以理解成Spring Boot的約定,因?yàn)镾pring Boot的設(shè)計(jì)是約定大于實(shí)現(xiàn)的。

Spring Cloud

最后就是大名鼎鼎的Spring Cloud了,Spring Cloud事實(shí)上是一整套基于Spring Boot的微服務(wù)解決方案。它為開發(fā)者提供了很多工具,用于快速構(gòu)建分布式系統(tǒng)的一些通用模式,例如:配置管理、注冊(cè)中心、服務(wù)發(fā)現(xiàn)、限流、網(wǎng)關(guān)、鏈路追蹤等。

如下圖所示,很好的說明了Spring Boot和Spring Cloud的關(guān)系,Spring Boot是build anything,而Spring Cloud是coordinate anything,Spring Cloud的每一個(gè)微服務(wù)解決方案都是基于Spring Boot構(gòu)建的:

image

spring.io

如下圖所示,是spring主頁介紹Spring Cloud的配圖,我們可以看到,分布式微服務(wù)每一個(gè)環(huán)節(jié),Spring Cloud都提供了對(duì)應(yīng)的組件支持:

image

Spring Cloud

說明:Spring Cloud的組件非常多,完整的組件可以參考鏈接:https://spring.io/projects/spring-cloud。

總結(jié)

筆者參與的項(xiàng)目也是基于Spring Cloud體系搭建的微服務(wù)。筆者認(rèn)為Spring Cloud的名氣要大于它的作用,可能這句話會(huì)帶來不少爭(zhēng)議。Spring Cloud本身沒有問題,有問題的是它的適配方案。你俯瞰一下Spring Cloud的整個(gè)微服務(wù)生態(tài),你會(huì)發(fā)現(xiàn)真的不可替代的組件又有幾個(gè)?甚至它的一些組件,筆者壓根不會(huì)考慮將它引入項(xiàng)目中,比如:

Spring Cloud Sleuth:它是鏈路追蹤解決方案,很明顯,我只會(huì)考慮Skywalking、Pinpoint、CAT。

Spring Cloud Config:它是一個(gè)配置中心解決方案,無論是攜程的apollo、還是百度的disconf,都遠(yuǎn)比它強(qiáng)大好用的多。

另外,Spring Cloud netflix的核心組件hystrix已經(jīng)停更,你可否還記得dubbo當(dāng)年停更被噴成什么樣?

網(wǎng)關(guān)也并不是非Spring Cloud netflix下的zuul不可。非Spring Cloud生態(tài)下還有優(yōu)秀的kong、Traefik、soul都是非常不錯(cuò)的選擇。

最后就是Spring Cloud生態(tài)組件的穩(wěn)定性和性能。用Spring Cloud微服務(wù)生態(tài)組件或多或少會(huì)碰到這樣那樣的問題。你甚至?xí)岩桑@個(gè)東西居然是和Spring Framework以及Spring Boot一起屬于spring生態(tài)的。畢竟,后兩者使用過程中你是幾乎碰不到問題的。Spring Cloud的一些方案給我的感覺更像一個(gè)半成品,如果你的公司使用Spring Cloud來搭建微服務(wù),那么肯定需要一個(gè)團(tuán)隊(duì)來維護(hù)用到的Spring Cloud組件。至于性能嘛,各服務(wù)之間默認(rèn)通過HTTP調(diào)用,所以性能你懂的。另外,Spring Cloud netflix這一套組件雖然由netflix貢獻(xiàn),但是我敢肯定絕對(duì)是閹割版,以它的hystrix來說,相當(dāng)多的缺陷,我可不認(rèn)為hystrix在高并發(fā)下能工作的很好。

Spring Cloud還有一個(gè)尷尬的處境就是,大公司基本上不會(huì)引入這一套架構(gòu),比如阿里,有自己一套完整的微服務(wù)解決方案,美團(tuán)也全部都是自研,還有很多公司的網(wǎng)關(guān)也是自研。綜上,筆者得出的結(jié)論是:Spring Boot是大勢(shì)所趨,而且它就像當(dāng)年Spring Framework干掉EJB一樣,干掉WEB容器+WAR的開發(fā)模式,統(tǒng)一現(xiàn)在的Java企業(yè)級(jí)應(yīng)用開發(fā)標(biāo)準(zhǔn)。至于Spring Cloud?請(qǐng)謹(jǐn)慎選擇每一個(gè)引入項(xiàng)目的組件,畢竟它的每一個(gè)微服務(wù)組件都面對(duì)很多優(yōu)秀的開源可替代方案。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容