前一篇提到了我們為什么要替換PHP語言采用Java語言。而Java語言的框架選型上來說有太多的選擇,常見的有Dubbo,SpringCloud等。我們選擇了SpringCloud Alibaba。替換PHP語言到SpringCloudAlibaba是個大工程,主要是業務遷移部分。討論之初我也確認過是否遷移原有的業務,得到的明確答復是 遷移。 那么這么來說也就簡單了,復雜的就是工期問題了。
SpringCloudAlibaba是什么?
SpringCloud Alibaba是Alibaba結合自身的微服務實踐開源的一套微服務全家桶,在SpringCloud項目中進行孵化並且畢業。既然是SpringCloud的項目那么阿里雲其實包含其商業化的產品。例如Nacos在阿里雲就有其商業化的版本 MSE。同時SpringCloud Alibaba的相關組件是經歷過雙十一大促考驗的產品。穩定性較高。
SpringCloud Alibaba與SpringCloud
SpringCloud Alibaba是SpringCloud的子項目,其實很多相關的文章都提到了SpringCloud Alibaba與SpringCloud的關系,其中有很多的論點都比較有意思。大家可以去搜索一下。
SpringCloud Alibaba是依賴SpringCloud相關的標准實現的一套微服務的全家桶。結合阿里巴巴的相關實踐與阿里雲的相關服務實現的一些組件得以更快的實現相關產品業務。
SpringCloud Alibaba主要功能
- 分布式配置
分布式系統的外部配置管理,配置中心可視化、分環境配置控制。配置動態更新能力。 - 服務注冊與發現
適配SpringCloud標准的服務注冊與服務發現管理。 - 服務限流與降級
可通過控制台進行實時的修改限流降級的規則,實時的Metrics監控。支持多種協議 - 消息驅動
基於RocketMQ實現消息驅動的業務場景開發。 - 分布式事物開源Seata使用@GlobalTransactional注解,零侵入的實現分布式事物的支持。
SpringCloud Alibaba核心組件
Nacos (配置中心與服務注冊與發現)
Nacos實現了服務的配置中心與服務注冊發現的功能,Nacos可以通過可視化的配置降低相關的學習與維護成本,實現動態的配置管理與分環境的配置中心控制。同時Nacos提供了基於http/RCP的服務注冊與發現功能。
Sentinel (分布式流控)
Sentinel是面向分布式微服務架構的輕量級高可用的流控組件,以流量作為切入點,從流量控制,熔斷降級,系統負載保護等維度幫助用戶保證服務的穩定性。常用於實現限流、熔斷降級等策略。
RocketMQ (消息隊列)
RocketMQ基於Java的高性能、高吞吐量的消息隊列,在SpringCloud Alibaba生態用於實現消息驅動的業務開發,常見的消息隊列有Kafka、RocketMQ、RabbitMQ等,相關的比較文檔可以自行去翻閱。
Seata (分布式事物)
既然是微服務的產品,那么肯定會用到分布式事物。Seata就是阿里巴巴開源的一個高性能分布式事物的解決方案。
Dubbo (RPC)
Dubbo已經在圈內很火了,SpringCloud Alibaba基於上面提到的Nacos服務注冊中心也同樣整合了Dubbo。
其他
SpringCloud Alibaba還有一些其他的組件選擇,例如schedulerX、SMS、OSS等。但是由於其主要是阿里雲的商業化產品就不再過多的進行介紹。集成其商業化產品時才能用到。
總結
SpringCloud Alibaba是基於SpringCloud標准由阿里巴巴實現的微服務全家桶,可插拔的方式實現組件的替換,在某些場景中我們需要的組件可以自由進行選擇。例如需要分布式鏈路跟蹤我們可以增加sleuth組件用於實現分布式鏈路跟蹤業務等。
很多人提到SpringCloudAlibaba的商業問題,記得當年SpringCloudAlibaba推出第一版的時候我也評論了...賣產品全家桶。不可否認是有那么一些,但是其實它本身的很多組件又不一定非要選擇商業版本。這個可以自由進行選擇。