Go語言構(gòu)建高并發(fā)分布式系統(tǒng)實(shí)踐_第1頁
Go語言構(gòu)建高并發(fā)分布式系統(tǒng)實(shí)踐_第2頁
Go語言構(gòu)建高并發(fā)分布式系統(tǒng)實(shí)踐_第3頁
Go語言構(gòu)建高并發(fā)分布式系統(tǒng)實(shí)踐_第4頁
Go語言構(gòu)建高并發(fā)分布式系統(tǒng)實(shí)踐_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、周洋周洋 部門: 360手機(jī)助手 Weibo: johntech-oDate: 2015.04.25gogo語言并發(fā)編程實(shí)踐語言并發(fā)編程實(shí)踐以以360360消息推送系統(tǒng)消息推送系統(tǒng)為例為例如何應(yīng)對的?go語言在基礎(chǔ)服務(wù)開發(fā)領(lǐng)域的優(yōu)勢?我遭遇了哪些挑戰(zhàn)?目錄具有g(shù)o特色的運(yùn)維在高并發(fā),通信交互復(fù)雜,重業(yè)務(wù)邏輯的分布式系統(tǒng)中,Go語言優(yōu)勢體現(xiàn)在:開發(fā)體驗(yàn)好 、一定量級下服務(wù)穩(wěn)定 、性能滿足需要 一定量級下服務(wù)穩(wěn)定:50+內(nèi)部產(chǎn)品,萬款開發(fā)平臺app實(shí)時(shí)長連接數(shù)億量級,日獨(dú)數(shù)十億量級1分鐘內(nèi)億量級廣播,日下發(fā)峰值百億量級400臺物理機(jī),9個(gè)獨(dú)立集群,國內(nèi)外近10個(gè)IDC運(yùn)維管理的go語言編寫的常駐s

2、ervice服務(wù)實(shí)例接近3000個(gè)。業(yè)務(wù)場景多樣:支持聊天場景業(yè)務(wù),穩(wěn)定支持多款聊天業(yè)務(wù)app單通道多app復(fù)用上行通道,回調(diào)支持對智能硬件產(chǎn)品,提供定制化消息推送與轉(zhuǎn)發(fā)服務(wù)性能滿足需要:線上單機(jī)最高160w長連接 (24核 E5-2630 2.30GHz 64G內(nèi)存 )qps在25w(取決于協(xié)議版本,業(yè)務(wù)邏輯,接入端網(wǎng)絡(luò)狀況)測試環(huán)境,可以通過300w長連接壓測(網(wǎng)絡(luò),連接穩(wěn)定,無帶寬限制,實(shí)際可以更高,決定于廣播時(shí)候業(yè)務(wù)內(nèi)存開銷的cpu消耗帶來的心跳或者業(yè)務(wù)延時(shí)能否接受)以以360360消息推送系統(tǒng)為例消息推送系統(tǒng)為例高并發(fā)、通信交互復(fù)雜消息系統(tǒng)簡要架構(gòu)單實(shí)例,單端口,多協(xié)議復(fù)用全雙工,單

3、客戶端,多app復(fù)用服務(wù)單通道適用于復(fù)雜環(huán)境下的網(wǎng)絡(luò)的接入策略協(xié)議完備、簡單、數(shù)據(jù)安全、可擴(kuò)展、省流量接入層消息系統(tǒng)規(guī)模架構(gòu):重業(yè)務(wù)邏輯高并發(fā)、通信交互復(fù)雜Golang開發(fā)開發(fā)C語言開發(fā)語言開發(fā)按用戶來思考問題,按用戶數(shù)量開協(xié)程,對一個(gè)用戶至少有兩個(gè)協(xié)程為其服務(wù)Oneloop per thread原則,人為控制線程數(shù)量,使用epoll+timefd+eventfd來做用戶io控制,超時(shí)控制,對用戶的通知io是阻塞執(zhí)行的,直接設(shè)置deadline,調(diào)度器會(huì)對阻塞的協(xié)成進(jìn)行調(diào)度,deadline到了,阻塞解除,超時(shí)出錯(cuò)對于所有io操作建立的fd映射到指定loop,同時(shí)記錄上下文關(guān)系進(jìn)行回調(diào)設(shè)置,超

4、時(shí)控制使用timefd通過channel與其他用戶通信使用eventfd事件通知的方式,根據(jù)epoll獲取的fd綁定的回調(diào)函數(shù)和參數(shù)進(jìn)行回調(diào)操作對外的通信采取阻io或者也可以go出去,不阻塞主循環(huán)對外通信信全局消息list,在映射到的eventloop上開連接池進(jìn)行消耗推薦使用開發(fā)體會(huì)的對比如何應(yīng)對的?go語言在基礎(chǔ)服務(wù)開發(fā)領(lǐng)域的優(yōu)勢?我遭遇了哪些挑戰(zhàn)?目錄具有g(shù)o特色的運(yùn)維問題與瓶頸問題與瓶頸單機(jī)內(nèi)存占用高達(dá)69GGC 36s 瓶頸散列在協(xié)程里面的iobuffer和對象不復(fù)用問題與瓶頸問題與瓶頸 瓶頸散列在協(xié)程里面的io問題與瓶頸奔放的協(xié)程使用網(wǎng)絡(luò)環(huán)境不好引起激增問題與瓶頸23s的GC 瓶頸

5、散列在協(xié)程里面的io問題與瓶頸奔放的協(xié)程使用接口響應(yīng)速度降低,重試增多,壓力倍增問題與瓶頸23s的GC 瓶頸散列在協(xié)程里面的io問題與瓶頸奔放的協(xié)程使用內(nèi)存暴漲問題與瓶頸io阻塞,協(xié)程激增 瓶頸問題與瓶頸問題與瓶頸如何應(yīng)對的?go語言在基礎(chǔ)服務(wù)開發(fā)領(lǐng)域的優(yōu)勢?我遭遇了哪些挑戰(zhàn)?目錄具有g(shù)o特色的運(yùn)維go語言程序開發(fā)需要找到一種平衡,既利用協(xié)程帶來的便利性又做適當(dāng)集中化處理套路:任務(wù)池集中數(shù)據(jù)合并請求、連接池+pipeline 利用全雙工特性經(jīng)驗(yàn)一性能優(yōu)化性能優(yōu)化:io集中處理通信庫性能優(yōu)化:io集中處理通信庫性能優(yōu)化:數(shù)據(jù)集中處理性能優(yōu)化:數(shù)據(jù)集中處理go語言開發(fā)追求開銷優(yōu)化的極限,謹(jǐn)慎引入其

6、他語言領(lǐng)域高性能服務(wù)的通用方案關(guān)注:內(nèi)存池、對象池使用與代碼可讀性與整體效率的權(quán)衡經(jīng)驗(yàn)二性能優(yōu)化內(nèi)存池性能優(yōu)化:通用方案性能優(yōu)化對象池性能優(yōu)化:通用方案如何應(yīng)對的?go語言在基礎(chǔ)服務(wù)開發(fā)領(lǐng)域的優(yōu)勢?我遭遇了哪些挑戰(zhàn)?目錄具有g(shù)o特色的運(yùn)維go語言原生提供的各組工具,構(gòu)建分布式系統(tǒng)配套設(shè)施方面,提供了便利配套設(shè)施= 測試 + 調(diào)優(yōu) + 監(jiān)控 + 運(yùn)維便利 = 原生profiling工具 + 開協(xié)程模擬測試終端+協(xié)程協(xié)作模擬業(yè)務(wù)go語言運(yùn)維管理方面的獨(dú)特魅力具有g(shù)o語言特色的運(yùn)維可視化平臺Profiling可視化 將常規(guī)排查問題從手工經(jīng)驗(yàn)化,變成流程化的過程 比較不同時(shí)間維度,兩次上線后,進(jìn)程的各

7、種狀態(tài) 對于優(yōu)化上線的效果,可評估(上線新功能發(fā)現(xiàn)問題與后續(xù)確定KPI神器)具有g(shù)o語言特色的運(yùn)維:以項(xiàng)目為例性能可視化具有g(shù)o語言特色的運(yùn)維可視化平臺 Profiling可視化 將常規(guī)排查問題從手工經(jīng)驗(yàn)化,變成流程化的過程 比較不同時(shí)間維度,兩次上線后,進(jìn)程的各種狀態(tài) 對于優(yōu)化上線的效果,可評估(上線新功能發(fā)現(xiàn)問題與后續(xù)確定KPI神器) 通信庫狀態(tài)可視化最接近業(yè)務(wù)場景的百萬級別壓測后臺架構(gòu)迭代所有實(shí)例組通信數(shù)據(jù)監(jiān)控性能監(jiān)控與調(diào)優(yōu)架構(gòu)迭代壓測平臺拆分多實(shí)例l緩解GC壓力(gc時(shí)間減少40%)按業(yè)務(wù)類型聚類,廣播(io密集),多播,點(diǎn)對點(diǎn)(內(nèi)部通信密集),聊天室(cpu密集)分層服務(wù),按層次擴(kuò)展

8、改為分集群(Set/Cell思想),各自獨(dú)立,又具備全被全部功能子集群l按業(yè)務(wù)拆分(助手,衛(wèi)士,瀏覽器)l按功能拆分(push,聊天,嵌入式產(chǎn)品)l按IDC拆分 (zwt,bjsc,bjdt,bjcc,shgt,shjc,shhm,Amazon Singapore)拆解后帶來管理成本,引入(zookeeper + deployd)/ (Keeper + Agent) 對各節(jié)點(diǎn)進(jìn)行管理 l監(jiān)控集群l控制組件行為(用戶重定向)l連接監(jiān)控push具有g(shù)o語言特色的運(yùn)維: 配置管理具有g(shù)o語言特色的運(yùn)維配置文件管理與監(jiān)控后臺-生成配置文件-全部服務(wù)器-調(diào)用deployd接口,重啟或者reloadzoo

9、keeper- 動(dòng)態(tài)修改配置文件 - 各個(gè)服務(wù)器上實(shí)例通過sdk訂閱profiling 接口 后臺定期獲取-調(diào)用go pprof生成文件-存儲通信庫實(shí)時(shí)數(shù)據(jù)http接口- 后臺定期獲取- 進(jìn)入數(shù)據(jù)庫,展示具有g(shù)o語言特色的運(yùn)維工具 - 生成項(xiàng)目公共文件夾下的.go 配置文件客戶端sdk - keeper通信 告知身份- 原子性的換掉全局配置文件客戶端sdk-集成profiling功能- keeper調(diào)用并存儲客戶端sdk- 自定義信息(通信庫信息) - keeper調(diào)用并存儲keeper本地保持所有客戶端狀態(tài)信息,按時(shí)間和需求獲取其他富信息,提供接口給后臺所有組件都必須通過網(wǎng)絡(luò)啟動(dòng),通過agent調(diào)用命令行架構(gòu)迭代總結(jié)回顧go語言在基于并發(fā)協(xié)作的,重業(yè)務(wù)邏輯的基礎(chǔ)服務(wù)方向非常適用 適用 = 開發(fā)體驗(yàn)好 + 服務(wù)穩(wěn)定 + 性能滿足需要go語言程序開發(fā)需要找到一種平衡,既利用協(xié)程帶來的便利性又做適當(dāng)集中化處理套路 = 按請求和業(yè)務(wù)邏輯并行+任務(wù)池集中數(shù)據(jù)合并請求 + 連接池集中收發(fā)go語言開發(fā)追求開銷優(yōu)化的極限,謹(jǐn)慎引入其他語

溫馨提示

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

評論

0/150

提交評論