獨家解讀:Dubbo Ecosystem - 從微服務框架到微服務生態

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

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

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

產生背景

微服務的流行,使得愈來愈多的用戶選擇從單體應用向分佈式應用進行轉型。在這個過程當中,有許多企業選擇了Dubbo做爲分佈式應用開發的基礎組件。可是隨着微服務化的逐漸深刻,咱們也發現,Dubbo目前提供的能力逐漸的沒法知足開發者構建完整微服務的需求。開發者缺乏一套完整的圍繞Dubbo的微服務解決方案,例如API gateway、熔斷限流、分佈式監控和分佈式事務等方面。開發者須要自研,或者調研各種開源的框架。這耗費了大量的時間和精力,且在整合的過程當中,各種兼容和適配問題也影響到微服務的落地。spring

所以,咱們決定圍繞Dubbo打造一整套微服務的解決方案,涵蓋微服務開發過程當中的各方面。這裏面的項目都是會通過Dubbo社區共同評估,和Dubbo高度集成,且在生產中獲得過驗證的項目(這裏的項目不只僅是阿里巴巴開源的),咱們把這個生態稱之爲Apache Dubbo Ecosystem。但願經過這個生態幫助用戶下降微服務實施的難度,加快業務創新進程。apache

Dubbo做爲一款高性能RPC框架,經過良好的擴展機制,已經造成了豐富的核心RPC生態。編程

從上圖中能夠看到,圖中黑色部分爲Dubbo重啓以前的RPC生態,綠色表明重啓維護以來新增的生態,紅色是將來計劃添加的模塊。這裏面主要包括:架構

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

但這裏面有一些問題,開發者只接觸到API,以及服務註冊和配置這一層,接觸不到大部分底層生態的組件,所以沒法直接享受到這些底層組件的技術能力。負載均衡

可是,開發者在實際的微服務開發過程當中,須要的不只僅是RPC和服務註冊發現,而是須要一整套的微服務能力,例如API gateway、熔斷限流、分佈式監控和分佈式事務等。但在這些方面,開發者因爲沒有事實上的推薦方案,調研和選型都比較痛苦,甚至會遇到個別開源項目再也不繼續維護給現有架構帶來影響的窘境。因此如何經過Dubbo把這些微服務領域的其餘能力整合起來,造成一套完整的解決方案,成爲Dubbo社區一個亟待解決的問題。框架

生態定位和組件選擇原則

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

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

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

關於組件選擇的原則,和哪些組件進行集成,並非大而全的照單全收,而是通過社區挑選,符合如下三點:

  • 已經具有很好的開發者羣體和影響力的組件
  • 在生產領域下獲得過驗證的組件
  • 在某一方面成爲標準或者事實標準的組件

只有知足上述條件,纔會被歸入Dubbo Ecosystem。一方面用於減小用戶選型的成本,另外一方面Dubbo Ecosystem的組件也不會由於太過龐大而失去意義。總而言之,Apache Dubbo Ecosystem 是圍繞 Apache Dubbo 打造的微服務生態,是通過生產驗證的微服務的最佳實踐組合。

體系總覽和層級結構

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

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中的熔斷限流組件提供的熔斷和限流數據,並對限流閾值進行管控等。

在開發側,經過深度融入當前流行的編程模型,例如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微服務應用。

具體而言,阿里巴巴的開源套件將以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負載均衡一樣的能力。

總結

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

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

三、Apache Dubbo和Spring Cloud沒有競爭關係,Apache Dubbo Ecosystem中的組件將以Spring Cloud Alibaba的形態深度集成到Spring Cloud體系當中,幫助用戶提高微服務開發體驗。

直播問答精選

Q1:Dubbo Ecosystem會有獨立的官網麼?

A1:Dubbo Ecosystem目前不會單獨設立官網,咱們會在 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

github.com/apache/incu…

APache RocketMQ

github.com/apache/rock…

Nacos

github.com/alibaba/nac…

Sentinel

github.com/alibaba/Sen…

Arthas

github.com/alibaba/art…

Spring Cloud Alibaba

github.com/spring-clou…

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

Dubbo_Meetup_


**歡迎關注「[阿里巴巴中間件官方微博]」 ※一個集乾貨與前衛的技術號**

**歡迎關注「阿里巴巴中間件」官方公衆號,與技術同行**

相關文章
相關標籤/搜索