1. 程式人生 > >微服務領域是不是要變天了?Spring Cloud Alibaba正式入駐Spring Cloud官方孵化器!

微服務領域是不是要變天了?Spring Cloud Alibaba正式入駐Spring Cloud官方孵化器!

引言

  微服務這個詞的熱度自它出現以後,就一直是高燒不退,而微服務之所以這麼火,其實和近幾年網際網路的創業氛圍是分不開的。

  與傳統行業不同,網際網路企業有一個特點,那就是市場擴張速度非常之快,可能也就是幾天的時間,一家原本名不經傳的網際網路公司就會人盡皆知,一家獨角獸公司也就誕生了。

  而伴隨著這些,接踵而來的,一般是業務的急速變化與規模的擴張,這就對應用應對變化的能力提出了更高的要求。

  微服務,就是專門治療這種情況的良藥。

  也因此,現在的絕大多數網際網路公司,都逐漸引入了微服務架構,以便於應對發展越來越快的公司業務。

  如今程式設計師聊天,尤其是Java後端猿,你要不懟上幾句微服務,你都不好意思說話。

  而就在今天,2018年10月31日的凌晨,這個偉大的日子裡,Spring Cloud Alibaba正式入駐了Spring Cloud官方孵化器,並在maven中央庫釋出了第一個版本

  可能有的同學會問,為啥要選在凌晨釋出?難道是因為更有儀式感嗎?

  筆者很負責的告訴你,非也,是因為美國特麼的和咱們有時差,-_-。

聊聊Spring Cloud

  說起微服務這個話題,就不得不提到Spring Cloud以及Spring這個神奇的團隊。

  筆者個人一直是Spring團隊的腦殘粉,這不僅僅是因為Spring團隊開源的情懷,更是因為,Spring團隊的程式碼,是唯一讓筆者覺得挑不出什麼毛病的程式碼。

  這在程式設計師身上是很難發生的,尤其是筆者這種有點程式碼潔癖的人,因為程式設計師有個特點,那就是看誰的程式碼都是垃圾,包括從前的自己都不例外。

  這也從側面說明了Spring團隊的強大,以及他們的工匠精神。

  好了,這一波馬屁拍完,該來談談Spring Cloud了。

  Spring Cloud是什麼?

  很多人雖然在用Spring Cloud,但其實並不瞭解Spring Cloud到底是什麼,只知道開發微服務,可以選擇使用Spring Cloud。

  咱們首先來看看Spring Cloud官方的介紹,其實這一句話基本說出了Spring Cloud的本質。

  Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems.Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.

  筆者翻譯:Spring Cloud提供了一些工具,可以讓開發者快速構建基於一些通用模式的分散式應用。分散式應用的協調都遵循“鍋爐板模式”(boiler plate patterns),使用Spring Cloud以後,開發者可以更快的構建實現了這些模式的服務和應用。而這些服務和應用,也可以很好的工作在任何分散式環境,包括開發者自己的筆記本,裸金屬資料中心以及像Cloud Foundry這樣的託管平臺。

  和Spring團隊以往的做法相似,不管是之前的Spring Framework,還是後來的Spring Boot,Spring團隊一直在致力於讓開發者可以“更快更好”的做開發。

  這也是為何Spring團隊在開發者圈子裡口碑一直很好,是因為Spring團隊一直在為開發者服務,而且都是開源專案,可以說,Java之所以能這麼火,Spring團隊功不可沒。

  一波隱晦的商業互捧之後,咱們來具體談一談,Spring Cloud到底都提供了哪些工具。

  從Spring Cloud官方文件裡,我們可以摘取到Spring的核心功能。

Distributed/versioned configuration【分散式以及版本化的配置】

Service registration and discovery【服務註冊與發現】

Routing【路由】

Service-to-service calls【服務呼叫】

Load balancing【負載均衡】

Circuit Breakers【斷路器】

Distributed messaging【分散式訊息】

  不難發現,其實上面這些功能,就是開發微服務架構下的分散式應用,會經常用到的。

  不過,Spring團隊厲害的地方就在於,他們很少會重複造輪子,而是讓別人幫他們來造輪子。

  比如最早的Spring framework,Spring只是提供了IOC和AOP的核心功能,而具體的MVC框架、ORM框架、快取等等,Spring都只是提供了很好的支援和相容,並不會去自己實現一個。

  當然,除非是對方做的不夠好,比如Spring MVC,就是因為當初的Struts2有著諸多的缺陷,才應運而生,並且很快就替代掉了Struts2,成為了主流的MVC框架。

  同樣,Spring Cloud也是如此,Spring Cloud的核心並沒有實現任何上述功能,讓我們來看看Spring Cloud官方文件的一段介紹。

  Many of those features are covered by Spring Boot, on which Spring Cloud builds. Some more features are delivered by Spring Cloud as two libraries: Spring Cloud Context and Spring Cloud Commons. Spring Cloud Context provides utilities and special services for the ApplicationContext of a Spring Cloud application (bootstrap context, encryption, refresh scope, and environment endpoints). Spring Cloud Commons is a set of abstractions and common classes used in different Spring Cloud implementations (such as Spring Cloud Netflix and Spring Cloud Consul).

  筆者翻譯:

  這些功能(就是上面列舉的功能)大部分是由Spring Boot覆蓋的,而Spring Cloud基於Spring Boot構建。Spring Cloud作為兩個libraries提供了更多的功能。這兩個libraries分別是,Spring Cloud Context和Spring Cloud Commons。

  其中Spring Cloud Context提供了一些工具,以及一個Spring Cloud應用的ApplicationContext的特殊服務,比如bootstrap上下文(關於這個傢伙,後面有機會筆者會詳細介紹)、加密、重新整理、環境端點這些功能。

  而Spring Cloud Commons則是一組抽象和在不同Spring Cloud實現(比如Spring Cloud Netflix和Spring Cloud Consul)中使用的通用類。

  可以看出,Spring Cloud其實是一套規範,而不是一個可以拿來即用的框架,而Spring Cloud Netflix以及Spring Cloud Consul,才是Spring Cloud規範的實現。

  當然了,從今天開始,Spring Cloud的實現又多了一種,Spring Cloud Alibaba,-_-

  那麼,接下來,咱們就來談談Spring Cloud Alibaba。

讓微服務領域變天的Spring Cloud Alibaba

  文章的標題起的有點欠抽,不過筆者本人始終信奉一句話,管它三七二十一,先吹了再說,-_-。

  看過前面內容的同學,應該已經非常清楚的知道,Spring Cloud Alibaba和Spring Cloud的關係,Spring Cloud Alibaba(以下簡稱SCA)和Spring Cloud Netflix(以下簡稱SCN)一樣,都是Spring Cloud規範的一套實現。

  為什麼筆者要扯上SCN?

  因為所謂的“變天”,其實就和SCN有關。

  雖然這句話說出來可能火藥味有點濃,但筆者還是要說,SCA的宗旨,就是要替代SCN,成為Spring Cloud規範的預設實現方案,有種宮廷劇嬪妃爭寵的既視感,-_-。

  為什麼筆者會有如此信心?這其實並不是盲目的自信,而是有據可依的。

  首先,不得不承認的是,目前絕大多數的Spring Cloud開發者,使用的都是SCN,但這些開發者大部分都有一個特點,那就是規模和流量都較小,一般能有20個微服務左右的規模,已經算是比較大的了。

  但是SCA中的元件,基本都是由阿里內部中介軟體轉化而來,經歷過多次雙十一的考驗,這也就意味著,SCA有著充足的場景,驗證了它對於高併發的抗壓能力。

  當然了,SCN或許也有這樣的客戶,只是筆者不知道而已,但這並不妨礙SCA的強大,因為十幾億人口的大國,全世界都沒有幾個,而中國是其中一個,因此,雙十一所面對的流量高峰,足以讓全世界顫抖。

  此外,僅從國內來說,SCA在地域和語言上也有著絕對的優勢,畢竟,SCA有中文文件,而相信絕大多數沒有自虐傾向的程式設計師,還是更傾向於看中文文件,而不是英文吧,-_-。

  最後,從各個元件上來說,SCA也有很多優勢,不過因為內容太多,此處不再詳表,後續筆者會專門寫文章去逐個元件對比介紹。

  因此,筆者對SCA的未來還是非常看好的。

  不過說了這麼多,有的同學可能要抱怨了,“我信你個鬼,你這個死作者壞得很,只顧吹牛,SCA到底都有啥啊?到現在都沒說。”

  咳咳,接下來,筆者就簡單羅列下,當前SCA版本所支援的功能列表。

  開源元件(spring-cloud-alibaba開頭):

  •   服務發現(Service Discovery)
  •   配置管理(Configuration Management)
  •   高可用防護(Safeguarding for High Availability)

  商業服務(spring-cloud-alicloud開頭):

  •   服務發現(ANS——Application Naming Service)
  •   配置管理(ACM——Application Configuration Management)
  •   物件儲存服務(OSS——Object Storage Service)

  同時,接下來的時間裡,SCA還會以最快的速度支援以下功能。

  開源元件(spring-cloud-alibaba開頭):

  •   訊息佇列(RocketMQ)

  商業服務(spring-cloud-alicloud開頭):

  •   任務排程(SchedulerX)
  •   日誌服務(SLS)

結語

  寫到這裡,筆者該吹的基本上都吹完了。

  筆者大概能猜到,你們此時的內心獨白,或許是這樣的。

  “我信你個鬼,你個死作者壞得很,害我看了這麼多廢話。”

  筆者只想告訴你,若干年以後,你一定會慶幸你看了這篇文章,讓你知道了Spring Cloud Alibaba。