1. 程式人生 > >Dubbo Ecosystem - 從微服務框架到微服務生態

Dubbo Ecosystem - 從微服務框架到微服務生態

_2019_01_10_10_22_06

從微服務框架到微服務生態,這是微服務發展的必然趨勢,也是Dubbo社群滿足開發者更高效的構建微服務體系期望的使命和擔當。

近期,Apache Dubbo PPMC 望陶(社群暱稱:ralf0131)做了主題為《首次直播揭祕 Apache Dubbo Ecosystem:從微服務框架到微服務生態》的直播分享。本文整理自此次分享,通過該內容,您將瞭解到Apache Dubbo Ecosystem的:

  • 產生背景
  • 生態定位和元件選擇原則
  • 體系總覽和層次結構
  • 和Spring Cloud之間的聯絡
  • 直播問答精選

產生背景

微服務的流行,使得越來越多的使用者選擇從單體應用向分散式應用進行轉型。在這個過程中,有許多企業選擇了Dubbo作為分散式應用開發的基礎元件。但是隨著微服務化的逐漸深入,我們也發現,Dubbo目前提供的能力逐漸的無法滿足開發者構建完整微服務的需求。開發者缺少一套完整的圍繞Dubbo的微服務解決方案,例如API gateway、熔斷限流、分散式監控和分散式事務等方面。開發者需要自研,或者調研各類開源的框架。這耗費了大量的時間和精力,且在整合的過程中,各類相容和適配問題也影響到微服務的落地。

因此,我們決定圍繞Dubbo打造一整套微服務的解決方案,涵蓋微服務開發過程中的各方面。這裡面的專案都是會經過Dubbo社群共同評估,和Dubbo高度整合,且在生產中得到過驗證的專案(這裡的專案不僅僅是阿里巴巴開源的),我們把這個生態稱之為Apache Dubbo Ecosystem。希望通過這個生態幫助使用者降低微服務實施的難度,加快業務創新程序。

Dubbo作為一款高效能RPC框架,通過良好的擴充套件機制,已經形成了豐富的核心RPC生態。

0006

從上圖中可以看到,圖中黑色部分為Dubbo重啟之前的RPC生態,綠色代表重啟維護以來新增的生態,紅色是未來計劃新增的模組。這裡面主要包括:

  • 程式設計模型支援Spring-boot方式
  • 服務註冊中心發現支援Nacos,etcd
  • 配置中心支援Apollo,Nacos
  • 系統高可用支援Sentinel,Hystrix
  • 負載均衡支援一致性Hash
  • 路由規則支援標籤路由
  • 協議層支援REST, JsonRPC, Avro, Thrift
  • 序列化層支援fst, kyro
  • 傳輸層支援Netty4

但這裡面有一些問題,開發者只接觸到API,以及服務註冊和配置這一層,接觸不到大部分底層生態的元件,因此無法直接享受到這些底層元件的技術能力。

0008

但是,開發者在實際的微服務開發過程中,需要的不僅僅是RPC和服務註冊發現,而是需要一整套的微服務能力,例如API gateway、熔斷限流、分散式監控和分散式事務等。但在這些方面,開發者由於沒有事實上的推薦方案,調研和選型都比較痛苦,甚至會遇到個別開源專案不再繼續維護給現有架構帶來影響的窘境。所以如何通過Dubbo把這些微服務領域的其他能力整合起來,形成一套完整的解決方案,成為Dubbo社群一個亟待解決的問題。

生態定位和元件選擇原則

起初,Dubbo這個品牌我們定義為一款RPC框架,而事實上,從業界開發者的反饋和調研來看,Dubbo的使用者早已脫離了單純的RPC層面,而是將其作為一個微服務的架構基礎來對待。

因此,我們對Dubbo的定位做過一次更新,Dubbo is more than a RPC framwork. Dubbo不僅僅是RPC框架,而是一個微服務框架,以幫助開發者快速構建高效能的微服務應用。

0011

在此基礎之上,我們做了進一步的演進,即從微服務框架演進到微服務生態。但Dubob不可能把微服務領域的所有能力重新再實現一遍,一是資源上無法保證,二是即便完成了,開發者也不一定會採用。最重要的是Dubbo已經社群化,Dubbo Ecosystem也應該由社群的方式來實現。因此,通過和開源的成熟方案做整合,形成一套完成的微服務領域生態,組成Dubbo Ecosystem,開發者無需為現有的系統做出過的的修改,就能快速開發微服務應用。

關於元件選擇的原則,和哪些元件進行整合,並不是大而全的照單全收,而是經過社群挑選,符合以下三點:

  • 已經具備很好的開發者群體和影響力的元件
  • 在生產領域下得到過驗證的元件
  • 在某一方面成為標準或者事實標準的元件

只有滿足上述條件,才會被納入Dubbo Ecosystem。一方面用於減少使用者選型的成本,另一方面Dubbo Ecosystem的元件也不會因為太過龐大而失去意義。總而言之,Apache Dubbo Ecosystem 是圍繞 Apache Dubbo 打造的微服務生態,是經過生產驗證的微服務的最佳實踐組合。

體系總覽和層級結構

作為一個微服務生態,它需要各個方面的元件共同組成。首先,我們需要明確一個微服務生態包含哪些元件才能稱得上生態,以及各自的分工和重要程度。經過梳理,有了以下的Dubbo Ecosystem的層級結構圖,包含從L0、L1、L2和L3的4個層級。

0012

L0層包括了Dubbo的核心RPC和Service Mesh的能力。

RPC的核心能力方面,主要的演進方向是支援Reative,提供響應式程式設計的能力,提升系統整體的吞吐率,並基於一些先進的框架,例如RSocket來實現。

Service Mesh在解決多語言開發維護成本方面具有很大的優勢,另外通過把通用邏輯下沉,把業務邏輯做薄做輕,開發者將釋放更多精力專注到微服務業務邏輯開發中,並且不被語言所限制,因此Service Mesh也是L0層需要支援的一個重點。Dubbo Mesh最新的進展是data plane基於Envoy進行了擴充套件,已經能夠識別到Dubbo的呼叫資料,並且能夠上報Istio,然後基於這些資料執行後續一系列的動作,例如通過K8S進行自動擴容。

L1層包含了服務的註冊發現、配置管理、系統高可用Reliability和Metrics的資料統計。

在服務註冊發現層面,ZooKeeper一直是預設的配置,但是我們也發現,Dubbo目前的URL設計使得註冊到ZooKeeper上的資訊越來越多,裡面有非常多的重複,隨著叢集規模的擴大,ZooKeeper逐漸成為瓶頸。在Dubbo 2.7中,已經支援了註冊中心和配置中心的分離,使得Dubbo擁有了支援主流注冊中心和配置中心的能力,註冊中心的支援列表包括ZooKeeper、Nacos和Etcd,配置中心的支援列表包括Apollo和Nacos,後續還將對接更多主流的註冊發現和配置管理產品。

在系統高可用Reliability層面,阿里巴巴開源的熔斷限流元件Sentinel已經在阿里內部廣泛使用多年,在熔斷限流,流量控制,過載保護等都有非常優秀的表現,並且已經和Dubbo有了非常好的整合。同時,也支援Hystrix。

在Metrics層面,當前Dubbo的統計資料,還沒有標準化,這塊迫切需要一個標準Metrics統計實現。據瞭解,阿里巴巴內部流行的Metrics度量庫(內部名稱:Ali-Metrics)將會在2019年對外開源,作為集團Java應用埋點的事實標準,已經支援的集團內部業務包括:Sunfire監控、流量排程、Ali360、應用中心、菜鳥稜鏡和無人值守釋出等專案,待通過評估,它將成為Dubbo預設的Metrics度量實現。有了標準的Metrics實現,Dubbo接下來還會對接主流的開源監控系統,例如Prometheus。

如果說L0和L1是RPC領域的核心元件,那麼L2層開始則更加貼近微服務領域。L2層包含API Gateway、分散式跟蹤Tracing、分散式診斷Diagnosis和分散式事務Transaction等。

  • API Gateway:協議轉換是Dubbo作為一個微服務框架最被詬病的地方。API Gateway除了負載均衡和熔斷限流等能力外,其最核心的能力是協議轉換。例如,一個客戶端如何通過HTTP能夠請求一個Dubbo服務。無論是在內部服務遷移、跨語言呼叫,還是開發給外部第三方介面等場景,這都是比較明顯的需求。業界有Spring Cloud Gateway、Zuul2和Kong等方案,目前傾向於和主流的方案進行整合。
  • 分散式跟蹤:現在已經支援的系統有Zipkin、Spring Cloud Sleuth和Skywalking等,後續會向業內標準靠攏,支援OpenTracing。
  • 分散式診斷:未來會結合Arthas+Tracing的能力,進行分散式應用的快速問題診斷,通過分散式追蹤系統,快速定位到某臺單機,然後結合Arthas的能力對單點問題進行快速診斷。另外,Arthas 4.0將會演進到一個位元組碼框架,為第三方系統提供無侵入的、自定義埋點的能力。

總的來說,L2層的元件的思路將是由Dubbo社群主導,聯合其他社群共建。

L3層的元件則更加開放一些。Scheduling、Event Driven、Authenthentication和Function等方面都還沒有特別明確的方案出來,將會由第三方社群主導,形成開放生態。以Event Driven為例,社群主導使用的是RocketMQ,RocketMQ已經發布了C、C++、Python和Go客戶端,並支援在Spring Boot中快速整合RocketMQ,同時支援Spring Message規範,方便開發者從其它MQ快速切換到RocketMQ。

在運維側,Dubbo Ecosystem的資料會互相打通,各元件統一暴露Observability能力,最終通過Dubbo OPS進行展示和管控。例如,可以通過Dubbo OPS看到Dubbo Ecosystem中的熔斷限流元件提供的熔斷和限流資料,並對限流閾值進行管控等。

0007

在開發側,通過深度融入當前流行的程式設計模型,例如Spring Cloud/Spring Boot,幫助開發者快速上手,進行微服務開發。同時考慮提供IDE外掛等,輕鬆構建腳手架,進一步優化開發體驗。

通過上述層次結構的拆解,疊加上開發和運維側提供的能力,逐步形成了一套完善的微服務體系。

在微服務開發中,多語言共存是一個常態,Dubbo社群一直重視多語言客戶端的支援,目前已經實現了Node.js、PHP、Python和Go 4類語言,詳細的支援列表可以參照上圖。在Dubbo Ecosystem中,除了支援Java 微服務開發外,其他語言會繼續由社群來主導建設。為了評估多語言實現的成熟度,我們計劃提供一個多語言成熟度評估能力矩陣,通過標準的TCK測試用例,來對各種語言的能力進行驗證,通過TCK意味著已經達到了一定成熟度,可以放心的使用。

和Spring Cloud之間的關係

經常會有開發者會拿Dubbo和Spring Cloud進行對比,在這裡我們再次強調一下二者之前並沒有競爭關係。Dubbo可以通過純API、Spring容器啟動(XML)和Spring-boot啟動(註解)等多種方式啟動,從Dubbo開源以來,和Spring一直有著緊密的整合。Spring Cloud也是開發者們賴以進行微服務開發的程式設計方式,幫助開發者快速搭建微服務應用是Dubbo的宗旨,因此Dubbo會盡可能的整合到Spring Cloud開發模式當中,開發者可以使用Spring Cloud輕鬆開發Dubbo微服務應用。

0018

具體而言,阿里巴巴的開源套件將以Spring Cloud Alibaba的形式和Spring Cloud程式設計模型進行深度對接,而Dubbo的RPC將作為核心RPC元件被整合,同時,Dubbo Ecosystem中的元件包括服務發現和配置Nacos、熔斷限流Sentinel和訊息元件RocketMQ等都會被整合進Spring Cloud Alibaba中。另一方面,Spring Cloud Alibaba支援對接阿里雲上的服務例如OSS、ACM和SchedulerX等等。

這裡的深度整合主要包括兩個方面,一方面Dubbo自身的服務通過REST協議暴露,自動和Spring Cloud中的元件,例如Feign和Ribbon等的整合。另一方面,Dubbo框架中的元件可以被進一步抽象,變成Spring Cloud生態中的一環,例如Dubbo的load balance元件可以單獨抽出來,提供類似Ribbon負載均衡同樣的能力。

總結

1、Apache Dubbo Ecosystem 是圍繞 Apache Dubbo 打造的微服務生態,是經過生產驗證的微服務的最佳實踐組合,將把微服務領域中具備很好影響力的,在生產領域下得到過驗證的,或在某一方面成為事實標準的元件納入生態。

2、Apache Dubbo Ecosystem將圍繞Dubbo打造4層體系,L0和L1專注RPC核心,L2專注微服務核心,L3圍繞微服務周邊打造豐富生態。

3、Apache Dubbo和Spring Cloud沒有競爭關係,Apache Dubbo Ecosystem中的元件將以Spring Cloud Alibaba的形態深度整合到Spring Cloud體系當中,幫助使用者提升微服務開發體驗。

直播問答精選
Q1:Dubbo Ecosystem會有獨立的官網麼?

A1:Dubbo Ecosystem目前不會單獨設立官網,我們會在 http://dubbo.apache.org 上線一個入口,介紹Dubbo Ecosystem的所有元件、各自的關係及推薦的整合方案。

Q2:請介紹下Dubbo Ecosystem的roadmap?

A2:Dubbo Ecosystem的發展將分為4個階段,第一階段是補全生態內的元件、Spring Cloud Alibaba對Dubbo 的支援、在官網建立入口、建立Dubbo OPS對微服務進行統一管控,第二階段支援雲原生,第三階段引入Rsocket框架,第四階段支援更多語言,不僅在RPC層提供多語言的支援,也會在整個微服務層提供多語言支援。

Q3:Dubbo2.7什麼時候釋出,Dubbo2.7是否相容2.6和Dubbox(2.8.4),Dubbo3.0什麼會有預覽版?

A3:Dubbo2.7目前還在測試中,測試通過後會發到社群進行討論和投票,然後再發布,預計1月會發布。Dubbo2.7會對2.6進行相容,Dubbox已經合併到Dubbo,所以也是相容的。在Github社群,Dubbo3.0的分支已經開出來了,Dubbo3.0會聚焦在Reative的實現,目前在調研的是RSocket框架,現在還沒有確定的釋出計劃。

Q4:Dubbo in Action的書什麼時候出版?

A4:這個問題是社群的issue之一,並被置頂。該書的章節已經確定了,但各章節的內容還沒寫完,我們希望社群的同學可以參與進來一起來寫,認領相關的章節,提交PR,成為該書的作者之一。該書的出版目的是為了幫助開發者更好的使用Dubbo來構建微服務體系。

直播嘉賓:望陶,社群暱稱ralf0131,Apache Dubbo PPMC Member,Apache Tomcat PMCMember,阿里巴巴技術專家,同時作為2018雙11中介軟體隊長及穩定性負責人蔘與了今年的雙11的全程支援,平時會關注大規模分散式系統、RPC框架和微服務領域。

相關開源專案地址:

APache Dubbo

https://github.com/apache/incubator-dubbo

APache RocketMQ

https://github.com/apache/rocketmq

Nacos

https://github.com/alibaba/nacos

Sentinel

https://github.com/alibaba/Sentinel

Arthas

https://github.com/alibaba/arthas

Spring Cloud Alibaba

https://github.com/spring-cloud-incubator/spring-cloud-alibaba

還不過癮?
來Apache Dubbo Meetup廣州站現場,和Dubbo社群成員面對面,報名連結

Dubbo_Meetup_