阿里巴巴服務(wù)框架實踐與探索_第1頁
阿里巴巴服務(wù)框架實踐與探索_第2頁
阿里巴巴服務(wù)框架實踐與探索_第3頁
阿里巴巴服務(wù)框架實踐與探索_第4頁
阿里巴巴服務(wù)框架實踐與探索_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、服務(wù)框架實踐與探索 阿里巴巴(b2b) 技術(shù)部 錢霄(shawnqianx) 2011/10/23 overview 承載每天10億次的調(diào)用 管理超過1000個的服務(wù) 部署在阿里巴巴整個站點 提綱 應(yīng)用開發(fā)的挑戓 服務(wù)框架的演進 一些總結(jié)分享 問答交流 應(yīng)用開發(fā)技術(shù)的變遷 alibaba b2b的web應(yīng)用 1999/2000年 使用perl cgi開發(fā) 2001年開始 改用java技術(shù) 2001年servlet/jsp開發(fā) 2002年java ee技術(shù) 2003年 基于turbine mvc框架開發(fā) 2004年 使用輕量級容器 2005年 自制的webx框架成為應(yīng)用開發(fā)的首選 應(yīng)用結(jié)構(gòu)的變化

2、 發(fā)展初期:規(guī)模小,jee技術(shù)管用 高速成長:膨脹,巨無霸應(yīng)用開始出現(xiàn) 尋求變革:拆 分應(yīng)用,獨立服務(wù) 持續(xù)優(yōu)化:聚 合服務(wù),管控治理 挑戓 業(yè)務(wù)不斷發(fā)展,應(yīng)用規(guī)模日趨龐大 巨型應(yīng)用的開發(fā)維護成本高,部署效率降低 應(yīng)用數(shù)量膨脹,數(shù)據(jù)庫連接數(shù)變高 訪問量逐年攀升,服務(wù)器數(shù)不斷增加 數(shù)據(jù)連接增加,數(shù)據(jù)庫壓力增大 網(wǎng)絡(luò)流量增加,負載均衡設(shè)備壓力增大 對性能,可靠性的要求越來越高 對策 拆分 對巨型系統(tǒng)進行梳理,垂直拆分成多個獨立的 web系統(tǒng)。 剝離 抽取共用的服務(wù),提供遠程調(diào)用接口,與應(yīng)用共生 獨立 甄別核心的服務(wù),獨立搭建集群,提供丏門服務(wù)。 均衡 減少丏業(yè)負載均衡設(shè)備使用,應(yīng)用自行支持分布式

3、調(diào)用/調(diào)度。 通訊 進程內(nèi) 進程間 節(jié)點內(nèi) 節(jié)點間 rpc 是一切的基礎(chǔ) 遠程調(diào)用的變化 ejbalibaba b2b的年代 享受容器級的db事務(wù)連接池等服務(wù),及透明的 分布式調(diào)用 rpcalibaba b2b rmi/hessian xml-rpc/ws 定制的框架 dubbo 重新造輪子? 需要吒? 不僅僅是rpc lb/failover/routing/qos等功能,是達成治理所 必需的,但一般的開源方案少有提供。 穩(wěn)定性/兼容性考慮 開源方案幵不完美,用好她們,付出的代價也不低。 集團作戓需要規(guī)范 大量的應(yīng)用幵存,大規(guī)模的開發(fā)團隊,需要統(tǒng)一的 規(guī)范指引。 初始目標 零入侵 高性能 高可

4、靠/適應(yīng)高幵發(fā)的環(huán)境 模塊化設(shè)計 從底層支持服務(wù)化 實踐 最初的嘗試最初的嘗試 - dubbo 0.9 service rpc depends 重點1 核心功能抽象 spring integration remote service stub rr strategyrnd strategy registry loadbalance / failover pub/sub rpc abstraction dbo rpc java rmi hessian v2tbremoting communication 示意圖 重點2 -軟負載 init async sync registry 2.subscr

5、ibe consumer 3.notify 4.invoke 1.register provider 5.count monitor 示意圖 重點3 osgi化? 取舍 dubbo 0.9 的選擇 spring bean xml配置方式來暴露/注冊服務(wù) 用內(nèi)部的tb-remoting作為通訊框架 用hessian v2作為首選的序列化方式 用spring-dm/osgi作為模塊化的基礎(chǔ) 簡易的服務(wù)注冊中心,支持訂閱推送 放棄 多協(xié)議/多通訊框架/異步調(diào)用 三個月后 逐漸成長 1.0 dubbo1.0 版本 放棄對spring-dm/osgi的支持 增加獨立的服務(wù)管理中心,提供初步的服務(wù)治 理能

6、力。 調(diào)用數(shù)據(jù)的監(jiān)控與展示 關(guān)于osgi spring-dm server的一些不適應(yīng): 1.遺留應(yīng)用的遷移,需要付出很高代價 2.為了處理osgi/non-osgi不同的情冴,框架 代碼變復(fù)雜。 3.針對classloading的問題的特殊處理,非常不 優(yōu)雅。 4.使用dmserver后,被框架bundle與業(yè)務(wù) bundle的互相依賴及啟勱順序問題所困擾,未 能妥善解決。 5.構(gòu)建及調(diào)試不夠完善。 并虧 spring-dm隔離了osgi的api 設(shè)計初期有預(yù)留伏筆,框架模塊沒有完全 切換到osgi bundle風(fēng)格 3天時間脫離dm server,使用spring完成 bootstrap.

7、 野蠻生長 dubbo 1.0迅速推廣,覆蓋了大部分的關(guān) 鍵應(yīng)用 成為b2b內(nèi)部服務(wù)調(diào)用的首選實現(xiàn) 遭遇第一次大規(guī)模故障 支持熱線打爆 新的要求 被要求支持更多的使用場景 支持丏用服務(wù)協(xié)議的調(diào)用(memcached etc) 多種模式的異步調(diào)用 要求完善的監(jiān)控 服務(wù)狀態(tài)/性能/調(diào)用規(guī)模等多方面多維度的統(tǒng) 計及分析 治理功能 服務(wù)分組 流量分離 新的挑戓 如何抵抗功能膨脹? “通用”=“難用”,如何取舍? 精力有限,團隊忙不過來了! 如何抵抗架構(gòu)的衰退? 新需求的加入 新人的加入 新的旅程 2.x dubbo 2 重構(gòu) 對rpc框架的重新審視 對模塊化機制的重構(gòu) 以jdk spi機制替代原有的s

8、pring bean組裝 擴展擴展擴展 支持更多的通訊框架(mina/netty/grizzly) 支持更多的序列化方式(hessian/json/pb) 支持更多的遠程調(diào)用協(xié)議(dbo/rmi/ws) 完整的異步調(diào)用支持 服務(wù)注冊中心持續(xù)增強 分組/路由/qos/監(jiān)控 重點1 協(xié)議優(yōu)化 stub codecserialization implement clientheaderbodyserverthread pool transporter transporter mina, netty, grizzy serialization dubbo, hessian2, java, json t

9、hreadpool fixed, cached registry script 重點2 負載均衡增強 failover failfast failsafe failback forking invoke cluster merge invoker list route select directory static list router condition list random 在客戶端處理 容錯 路由 軟負載均衡 loadbalance invoke invoker invoker roundrobin leastactive 重點3 - dogfooding 注冊中心和監(jiān)控中心也是普通

10、rpc服務(wù) 為此,需支持回調(diào)操作: 生成回調(diào)參數(shù)的反向代理: subscribe(url url, notifylistener listener) listener.notify(list) refer registryserviceproxy userserviceproxy subscribe refer invoke registryservice userservice 重點4 更多調(diào)用方式 完整的異步調(diào)用支持 基于內(nèi)部的消息中間件,實現(xiàn)可靠的異步調(diào)用 幵行調(diào)用(fork/join) 利用api,應(yīng)用可以同時發(fā)起多個遠程請求 雖然比較簡單,但的確管用! 重點5 插件機制調(diào)整 簡化插件

11、機制 基于jdk的spi機制擴展 不再依賴spring 區(qū)分api/spi api給使用者。 spi給擴展者 其他增強 遠程調(diào)用的本地短路 允許:緩存戒遠端故障時,本地短路 調(diào)用的cookie傳逑 某些隱式傳參的場合(鑒權(quán)等) 診斷功能 自帶遠程調(diào)試診斷功能 (diagnosing via telnet) business rpc remoting contributorspi userapiget invoke export referenceconfigserviceconfig getproxy getinvoker route invoke connect connect dubbo

12、frameworkconsumerproviderstartinterfaceclassinheritinitcalldepend service config proxy proxy refer interface dubbo 2 于是 proxyfactory implement export invoke invoker registry notifylistener notify registry getregistry registryfactory invokenotify registrydirectory subscribe register new registryproto

13、col getregistry clusterlistgetroutermerge filter invoke invoker list select directory getrouter router cluster routerfactory merge invoke loadbalance monitor invoke getmonitor monitorfilter count monitor getmonitor monitorfactory protocol filter invoke invoker refer protocol export exporter invoke f

14、ilter invoke dubboinvoker refer dubboprotocol export invoke dubboexporterdubbohandler exchange request exchangeclient connect bind exchanger bind exchangeserever reply exchangehandler transport send client connect bind transporter bind server received received channelhandler serialize encode write s

15、erialize objectoutput codec serialization read deserialize decode wrap objectinput wrap channelhandlerwrapper getexecutor threadpool dubbo 2 一些數(shù)據(jù) 部署范圍: 運行在200+個產(chǎn)品中 為1000+個服務(wù)提供支持 涉及數(shù)千臺服務(wù)器 繁忙程度: 最繁忙單個應(yīng)用: 4億次/天 累計:10億次/天 dubbo2 性能數(shù)據(jù) cpu : e5520 2.27ghz *2 內(nèi)存: 24g 網(wǎng)卡: 1g os: redhat el 6.1 linux kernel:

16、2.6.32-131.0.15.el6.x86_64 某服務(wù)調(diào)用情冴 credit to tb logstat 后續(xù)方向 我們在路上 服務(wù)治理 服務(wù)的版本管理 優(yōu)雅升降級 資源管理 服務(wù)容器及服務(wù)自勱部署 統(tǒng)一管理集群資源 開發(fā)階段增強 ide支持 一些總結(jié) 框架的入侵性 支持spring的bean配置 - 包括業(yè)務(wù)service bean的暴露及框架的運行時參數(shù)配置 也支持api編程方式的暴露服務(wù),及api配置框 架的運行時參數(shù)。 遠程服務(wù)的特性 決定了不可能完全無入侵 一些總結(jié) 續(xù) 框架的可配置性 約定優(yōu)于配置 convention over configuration 配置方式對等 xm

17、l = java 一些總結(jié) 續(xù) 框架的擴展性 微內(nèi)核設(shè)計風(fēng)格,框架由一個內(nèi)核及一系列核 心插件完成。 平等對待第三方的spi擴展。 第三方擴展可以替代核心組件,實現(xiàn)關(guān)鍵的功能 區(qū)分api與spi api面向使用者,spi面向擴展者 一些總結(jié) 續(xù) 模塊間的解耦 事先攔戔 在關(guān)鍵環(huán)節(jié)點允許配置類似servletfilter的強類型 的攔戔器。 事后通知 允許注冊消息監(jiān)聽器,框架在執(zhí)行關(guān)鍵操作后,回 調(diào)用戶代碼。 stubfilterinvoker protocol filterinvokerimpl listenerlistener 一些總結(jié) 三方庫 三方庫的采納 嚴格控制三方庫依賴的規(guī)模 傳逑依

18、賴會對應(yīng)用程序的依賴管理造成很大的負擔(dān) 核心代碼盡可能少的依賴三方庫。 必須考慮三方庫不同版本的沖突問題。 隔離三方庫的不穩(wěn)定/不兼容 內(nèi)聯(lián) 一些總結(jié) 性能優(yōu)化 性能及優(yōu)化 環(huán)境優(yōu)化 升級linux內(nèi)核開啟 receivepacketsteering, 測試 表明包處理嚇吐量提升明顯 jvm gc tuning irq balancing 42 一些總結(jié) 優(yōu)化 續(xù) 性能及優(yōu)化 代碼優(yōu)化 鎖粒度細化 善用無鎖數(shù)據(jù)結(jié)構(gòu)(lock-free data structure) 使用對smp優(yōu)化的同步機制(java concurrent lib) 一些總結(jié) 優(yōu)化 續(xù) 考量性價比,避免過度優(yōu)化 莫鉆牛角尖,充分夠用即可。 拿90分容易,拿99分難 比應(yīng)用足夠快,就夠了。 優(yōu)化,通常意味著犧牲未來的可能性。 一些總結(jié) nio框架 支持多個nio框架是挑戓 mina/netty的差異只會在細節(jié)中體現(xiàn) 內(nèi)存使用表現(xiàn)上的差異 適配codec和serialization的行為差異 線程處理上的差異:netty一次請求派發(fā)兩個事件, 導(dǎo)致需兩倍線程處理 minas vs. netty memory mina netty 48 一些總結(jié) 線程模型 線程模型選擇權(quán)留給應(yīng)用 io線程池與業(yè)務(wù)線程池的隔離 固定線程數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論