
從微服務架構到微服務生态,這是微服務發展的必然趨勢,也是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生态。
從上圖中可以看到,圖中黑色部分為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架構,而是一個微服務架構,以幫助開發者快速建構高性能的微服務應用。
在此基礎之上,我們做了進一步的演進,即從微服務架構演進到微服務生态。但Dubob不可能把微服務領域的所有能力重新再實作一遍,一是資源上無法保證,二是即便完成了,開發者也不一定會采用。最重要的是Dubbo已經社群化,Dubbo Ecosystem也應該由社群的方式來實作。是以,通過和開源的成熟方案做內建,形成一套完成的微服務領域生态,組成Dubbo Ecosystem,開發者無需為現有的系統做出過的的修改,就能快速開發微服務應用。
關于元件選擇的原則,和哪些元件進行內建,并不是大而全的照單全收,而是經過社群挑選,符合以下三點:
- 已經具備很好的開發者群體和影響力的元件
- 在生産領域下得到過驗證的元件
- 在某一方面成為标準或者事實标準的元件
隻有滿足上述條件,才會被納入Dubbo Ecosystem。一方面用于減少使用者選型的成本,另一方面Dubbo Ecosystem的元件也不會因為太過龐大而失去意義。總而言之,Apache Dubbo Ecosystem 是圍繞 Apache Dubbo 打造的微服務生态,是經過生産驗證的微服務的最佳實踐組合。
體系總覽和層級結構
作為一個微服務生态,它需要各個方面的元件共同組成。首先,我們需要明确一個微服務生态包含哪些元件才能稱得上生态,以及各自的分工和重要程度。經過梳理,有了以下的Dubbo Ecosystem的層級結構圖,包含從L0、L1、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負載均衡同樣的能力。
總結
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-dubboAPache RocketMQ
https://github.com/apache/rocketmqNacos
https://github.com/alibaba/nacosSentinel
https://github.com/alibaba/SentinelArthas
https://github.com/alibaba/arthasSpring Cloud Alibaba
https://github.com/spring-cloud-incubator/spring-cloud-alibaba還不過瘾?
來Apache Dubbo Meetup廣州站現場,和Dubbo社群成員面對面,報名連結