歡迎您光臨本站 註冊首頁

Spring 社區的首個國產開源項目順利畢業了

←手機掃碼閱讀     admin @ 2019-08-07 , reply:0

Spring Cloud Alibaba 於 2018年7月27日 在 Spring Cloud 孵化器倉庫提交第一次代碼,到 2019年8月1日 在 Alibaba 倉庫發布第一個畢業版本,時間將近整整一年。

一年時間,Spring Cloud Alibaba 完成了從 Spring Cloud 最默默無聞的項目到 Spring Cloud 最火項目的蛻變,並且從孵化器倉庫畢業了!

Spring Cloud Alibaba 的正式畢業離不開社區的幫助,非常感謝 Spring Cloud Alibaba 的 contributor,也非常感謝社區開源愛好者們創建的 issue,每一個 issue 都是對 Spring Cloud Alibaba 的幫助。

 

Spring Cloud Alibaba 畢業過程中的一些小插曲

1、在 5 月底的時候,Spring Cloud Alibaba Team 跟 Spring Cloud Team 有過一次畢業的溝通,並且準備在 Spring Cloud Hoxton 正式發布的時候宣布 Spring Cloud Alibaba 畢業。只不過後來 Spring Cloud 官方調整了項目策略,需要進行倉庫遷移。雙方 team 後續還因此開了一個視頻會議,Spring Cloud Alibaba 因此提前畢業。

2、Spring Cloud Team 希望畢業后的 starter 命名方式跟 spring boot starter 規定的格式一致,以 alibaba-<X>-spring-cloud-starter 的格式進行命令。考慮到孵化器的 starter 都是以 spring-cloud-starter-alibaba-<X> 開頭,Spring Cloud Alibaba 並不想破壞原有的規則。最終雙方討論了好多次才決定沿用老的 starter 命名方式。

3、在倉庫遷移后的幾天時間內,有社區的開源愛好者專門創建 issue 提問為何離開 spring cloud 倉庫,Spring Cloud Alibaba 被各種質疑。後來 Spring Cloud Leader - Spencer Gibb 在 issue 上回復進行了解釋。

4、Spring Cloud Alibaba 本來計劃是 6 月份發布畢業版本,結果拖到了現在。為了引起不必要的輿論風險,我們一直在等待 Spring Cloud Team 官方的公告發布,期間跟 Spring Cloud Team 溝通了好多個晚上(有 12 小時時差)。

 

官方文章解讀

官方文章內容寫得有點多,我們翻譯一下並做個簡單的總結:

 

 

 

 

 

 

 

集成到 Spring Cloud Release Train 帶來的不便:

  • 項目的維護者不能自行發版,從而無法與項目集成的技術組件的 roadmap 保持一致,必須等到 Spring Cloud 的下一個 Release Train 才能發布新的版本更新集成的技術組件。 

  • 項目的維護者沒有辦法看到關鍵的統計數據,如 github 中的關鍵數據, 以及在依賴被下載了多少次。

以下的這些合作,其實與在不在 Spring Cloud Release Train 中沒有關係:

  • Spring Cloud Team 會參與到項目中,進行代碼 review 幫助更好地集成到 Spring Cloud 。

  • Spring Cloud Alibaba Starter 會加入到 start.spring.io 中,供用戶選擇。

  • Spring Team 會將 Spring Cloud Alibaba 項目放在官方介紹頁上https://spring.io/projects/spring-cloud-alibaba,介紹項目重要的一些發版和功能特性。

倉庫遷移對於開發者來說,實際意味著什麼?

  • 從 Spring Cloud 的 github 中遷移並不是意味著這些項目的開發和維護模式有改變,Spring Cloud Alibaba Team & Spring Cloud Team 仍然維護著項目。
  • 新的模式意味著 groupId 會發生改變,甚至有些項目的 artifactId 會改變,項目中的 package name 也會發生變化。需要用戶側代碼修改。
  • 開發人員需要明確地在開發中指明依賴的版本,不能通過 Spring Cloud BOM 繼承依賴。
  • 作為先行者,Spring Cloud Alibaba 將會首先遵循新的策略,Spring Cloud Alibaba 在畢業這個重大的時機遷移是一個合適的時間。未來大家會看到更多的 組件從 Spring Cloud Release Train 中遷移出去。

 

本次畢業版本的 release note

1、Greenwich 對應的版本支持此 Greenwich.SR2 版本

2、Finchley 對應的版本支持此 Finchley.SR4 版本

3、Sentinel

  • sentinel 相關依賴的版本更新至 1.6.3。Sentinel 各版本的 release 信息:https://github.com/alibaba/Sentinel/releases
  • #615:支持 Spring Cloud Gateway,spring-cloud-alibaba-sentinel-zuul 重命名為spring-cloud-alibaba-sentinel-gateway。該模塊實現了 Sentinel 適配網關(Spring Cloud Gateway, Netflix Zuul)相關的邏輯 

  • #614:支持 WebFlux,spring-cloud-alibaba-starter-sentinel 內部分別適配了 WebServlet 和 WebFlux 

  • #626:Sentinel OpenFeign 場景下解決了介面繼承場景下調用父類介面方法出錯的 bug

  • #782:Sentinel OpenFeign 場景下解決了介面中存在 default 方法下調用 default 方法出錯的 bug

  •  #741 #615:新增網關和http-method-specify 相關的配置

  • #716:優化了SlotChainBuilder的載入邏輯,確保非網關場景下 HotParamSlotChainBuilder 生效,網關場景下SlotChainBuilder生效 

  • #707:刪除 DataSource 相關的載入日誌,改由 Sentinel 自身的 SPI 實現(未來實現) 

  • #265:添加SentinelHealthIndicator 用於查詢 Sentinel 的健康狀態 

  • Nacos Discovery

    • nacos-client 版本更新至 1.1.1。Nacos 各版本的 release 信息:https://github.com/alibaba/nacos/releases

    • #765:添加心跳相關的配置參數。包括 心跳的周期、心跳超時時間以及實例刪除的超時時間 

    • #669:添加NacosRule 支持權重的 Ribbon 路由規則 

    • #728:支持 ServiceRegistryEndpoint 對當前應用服務狀態的操作/查詢 

    •  #708:支持與 Spring Cloud Config 共同使用

    • #650:適配 ServerIntrospector,可獲取 metadata 以及 secure 信息 

    •  #644:NacosWatch 刪除內部邏輯,只進行HeartbeatEvent 事件的發送 

  • Nacos Config

    • nacos-clinet 版本更新至 1.1.1。Nacos 各版本的 release 信息:https://github.com/alibaba/nacos/releases

    • #652:修復NacosConfigEndpoint 線程不安全的 bug 

  • RocketMQ Binder

    • #541:適配MessageSource,consumer 端可以注入 PollableMessageSource 進行消息的拉取 

    • #709:解決不同 jvm 下 instanceName 相同導致 rebalance 失敗的 bug

  • Dubbo Spring Cloud

    • dubbo 版本更新至 2.7.3。Dubbo 各版本的 release 信息:https://github.com/apache/dubbo/releases

    • #589:ip 獲取策略使用 Spring Cloud 官方的InetUtils 工具獲取 

    • #592:Spring Cloud 註冊中心配置spring-cloud://localhost 成為可選項,默認直接沿用原生的 Spring Cloud 註冊中心 

    • #623:為服務實例的變化新增監聽機制 

    • #591:修復某些場景下啟動報 NPE 的 bug

    • #600:不再強依賴 spring-boot-actuator,成為可選依賴 

  • Seata

    • seata 版本更新至 0.7.1。Seata 各版本的 release 信息,點擊這裡

    • #686:修復負載均衡的 FeignClient 場景下 xid 傳遞失敗的 bug

 

Thanks for the contributors: @Rivers-Shall, @ly641921791, @JevonYang, @cdfive, @eacdy, @pyhblacksky, @george510257, @AbelSara, @slievrly, @pigxcloud, @lovepoem, @liudaomanbu, @lujian0571, @jsbxyyx, @pengzai170, @hero-zhanghao, @wzlee, @xingfudeshi

 

Roadmap

Spring Boot Admin 是一個開源社區項目,用於管理和監控 SpringBoot 應用程序。但是它沒有跟 Spring Cloud 做深度的整合。我們希望做一個 Spring Cloud Admin,它能提供如下功能:

    • 增加服務治理控制台,整合微服務控制能力

    • 服務查詢、管理

    • 配置管理

    • 限流降級等

    • 項目管理/監控

    • 參考 Spring Cloud Azure Playground http://azure-spring-cloud.azurewebsites.net/ ,創造 Spring Cloud Alibaba Playground,把一些最佳實踐,視頻教程,自動生成項目等功能放上去。

  • 增加 Spring Cloud Alibaba 最佳實踐項目。

  • 針對 Spring Cloud Alibaba 各種特性,開發對應的實戰 Demo。

  • 替換 Spring Cloud 服務調用客戶端 OpenFeign & Ribbon。開發更通用的服務調用客戶端,替換 Spring Cloud 服務調用客戶端 OpenFeign & Ribbon。

 

Committer 機制

 

項目遷移到 Alibaba 自身的 GitHub 倉庫后,不像在 spring-cloud-incubator 倉庫中那樣沒有許可權發展 committer。我們現在有許可權發展 contributor 成為 committer。任何人只要在 Spring Cloud Alibaba 項目上提交了 Pull Request 並且被 merge,就可以成為 contributor;contributor 晉陞為為 committer,需要這些條件:

1、至少提交 5 個有分量的 Pull Request

2、參與 issue 列表的維護及重要 feature 的討論

3、參與 code review

希望有越來越多的開源愛好者能夠成為 Spring Cloud Alibaba 的 contributor 或 committer,讓我們共同完善 Spring Cloud 生態。

 

畢業後用戶側代碼修改

倉庫遷移必定涉及到代碼修改。我們總結修改點有 3 點:

1、包名 package name

2、版本號 version number

3、如果用到了 Spring Cloud Alibaba 內部類,需要 reimport 這些類(少部分情況才需要改,大部分情況這些類都被 AutoConfiguration 屏蔽了)

以使用 Spring Cloud Alibaba Bom 和 Spring Cloud Nacos Discovery 為例,了解修改點到底有哪些:

 

孵化器對應的 bom 和 starter 版本依賴:


<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-alibaba-dependencies</artifactId>    <version>0.9.0.RELEASE</version>    <type>pom</type>    <scope>import</scope></dependency>
<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

 

畢業對應的版本依賴:


<dependency>    <groupId>com.alibaba.cloud</groupId>    <artifactId>spring-cloud-alibaba-dependencies</artifactId>    <version>2.1.0.RELEASE</version>    <type>pom</type>    <scope>import</scope></dependency>
<dependency>    <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

我們在 GitHub 上提供了一個項目 ,點擊這裡,了解更多,用於對比畢業版本跟孵化器版本開發項目的區別。該項目使用了 Nacos Config & Nacos Discovery & Sentinel 功能,master 分支是畢業版本,incubator 分支是孵化器版本。這是使用 diff 命令比較兩個分支代碼的不同點:

結論: 我們發現只有 pom 里的包名和版本號不一致,代碼層面無需任何修改。

版本的對應關係:

 

 

 

 

 

項目地址:https://github.com/alibaba/spring-cloud-alibaba

 

本文作者:方劍,花名洛夜,GitHub ID @fangjian0423,開源愛好者,阿里巴巴高級開發工程師,阿里雲產品 EDAS 開發,Spring Cloud Alibaba 開源項目負責人。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108868/spring-cloud-alibaba-graduation
Spring 社區的首個國產開源項目順利畢業了已經有212次圍觀

http://coctec.com/news/all/show-post-211809.html