單機(jī)40萬(wàn)QPS,搜狗WF框架,今年最值得學(xué)習(xí)的開(kāi)源代碼
共
2331字,需瀏覽
5分鐘
·
2020-09-24 11:32
職業(yè)生涯的前五年,基本上都在做即時(shí)通訊業(yè)務(wù),由于業(yè)務(wù)的特殊性,吞吐量極大,時(shí)延不這么敏感,團(tuán)隊(duì)內(nèi)部單獨(dú)開(kāi)發(fā)了一套純異步omni框架。學(xué)習(xí)omni框架內(nèi)核,對(duì)職業(yè)生涯的提升極大,協(xié)議設(shè)計(jì)與實(shí)現(xiàn),底層網(wǎng)絡(luò)通信,多線程同步與互斥,同步RPC,異步RPC,服務(wù)器框架… 掌握了一套R(shí)PC內(nèi)核原理與細(xì)節(jié),基本上國(guó)內(nèi)大部分公司的offer能手到擒來(lái)。很多朋友問(wèn),如何學(xué)習(xí)RPC內(nèi)核知識(shí)?代碼面前,沒(méi)有秘密,看源碼,寫demo,單步調(diào)試,比聽(tīng)任何大神吹牛,比看任何理論書(shū)籍,都來(lái)得直接。又有朋友問(wèn),目前開(kāi)源的brpc以及thrift,都太重了,有沒(méi)有更輕量級(jí)的服務(wù)端框架呢?這里,我強(qiáng)烈推薦,搜狗開(kāi)源的輕量級(jí)高性能服務(wù)器引擎WF:(2)demo簡(jiǎn)單,單步調(diào)試容易;(3)doc比較全,doc與src同步更新,比起行業(yè)內(nèi)一些“為了開(kāi)源而開(kāi)源”的KPI項(xiàng)目,顯得有誠(chéng)意多了;個(gè)人覺(jué)得搜狗的WF框架,是目前國(guó)內(nèi)開(kāi)源的服務(wù)器引擎中最適合學(xué)習(xí)的。這里,把自己的學(xué)習(xí)心得,以及大家可能關(guān)心的問(wèn)題,簡(jiǎn)單聊一聊。什么是WF,它是一個(gè)娛樂(lè)級(jí)框架,還是一個(gè)工業(yè)級(jí)框架?WF,是搜狗開(kāi)源的C++服務(wù)器引擎框架。WF的設(shè)計(jì)目標(biāo)是:輕量級(jí),高性能。輕量級(jí),是指簡(jiǎn)潔,搜狗幾乎所有的C++后端服務(wù),包含但不限于搜索,輸入法,廣告等都是基于這個(gè)框架,每天處理超過(guò)百億的請(qǐng)求,它是一個(gè)已經(jīng)經(jīng)過(guò)多年線上考驗(yàn)的工業(yè)級(jí)框架。大伙可以看下,用WF如何搭建http服務(wù)器:
這一段代碼單步執(zhí)行下來(lái),IO線程,工作線程,任務(wù)隊(duì)列,線程同步互斥機(jī)制,超時(shí)處理機(jī)制,異常處理機(jī)制… 對(duì)于一個(gè)服務(wù)器框架,基本就拿下七八成。
大伙可以看下,WF的單機(jī)壓測(cè)表現(xiàn):
你沒(méi)有看錯(cuò),單機(jī)每秒50W的QPS,特別是高并發(fā)壓測(cè)的情況下,比nginx和brpc表現(xiàn)都要好。
(1)測(cè)試硬件:CPU 40 core @ 2.20GHz,內(nèi)存192G,網(wǎng)卡25000Mb/s;(2)并發(fā)配置:nginx auto進(jìn)程數(shù)為40,brpc配置nthreads為40,WF配置16個(gè)poller線程與20個(gè)handler線程;除了輕量級(jí)與高性能,WF還有哪些特點(diǎn)?除了核心設(shè)計(jì)目標(biāo)的兩點(diǎn),WF還有以下優(yōu)勢(shì):相比go語(yǔ)言的簡(jiǎn)單,天下苦C++久矣,雖然C++后續(xù)也推出了各種簡(jiǎn)易用法,但并不是所有用戶了解與掌握,目前WF的標(biāo)準(zhǔn)是C++11,把很多復(fù)雜性都進(jìn)行了屏蔽。用戶再也不用關(guān)注連接池、線程池、文件句柄,以及各種異步通知機(jī)制,WF都進(jìn)行了封裝與細(xì)節(jié)屏蔽。使用WF,用戶只需要關(guān)注兩個(gè)核心概念:任務(wù)(task)與任務(wù)流(series)。大部分RPC框架著重解決通信的問(wèn)題,而計(jì)算與任務(wù)調(diào)度框架需要用戶自己實(shí)現(xiàn),而WF框架則將二者融為一體,一并解決了。WF把網(wǎng)絡(luò),CPU,磁盤IO,GPU,計(jì)時(shí)器,計(jì)數(shù)器都進(jìn)行了封裝,統(tǒng)一當(dāng)成資源,使用者可以任意進(jìn)行調(diào)度與組合,而不需要關(guān)注其底層的epoll,pthread,aio,cuda,timer_fd,count計(jì)數(shù)等。(3)架構(gòu)層次良好,非常方便業(yè)務(wù)邏輯的實(shí)現(xiàn)WF對(duì)于業(yè)務(wù)邏輯處理進(jìn)行了抽象:任務(wù)和任務(wù)流是WF的基石,WF本身就是一套完備的、可以收斂的、容易控制的業(yè)務(wù)邏輯任務(wù)流模型。除了輕量級(jí),簡(jiǎn)單易用之外,其文檔和demo非常齊全,對(duì)于新手及其友好。而且碰到代碼中不明白的地方,可以直接聯(lián)系開(kāi)發(fā)小組,作者會(huì)直接和大家交流,避免二手消息。
這也是推薦WF成為大家學(xué)習(xí)上手的框架,很重要的原因。
可能有朋友會(huì)問(wèn),說(shuō)框架太宏觀,研究WF,具體能學(xué)到哪些技術(shù)內(nèi)容呢?(1)學(xué)習(xí)錯(cuò)誤處理:為了提升性能,WF沒(méi)有使用異常,研究WF能系統(tǒng)性學(xué)習(xí)錯(cuò)誤處理,幫助我們寫出極高質(zhì)量的代碼;畫外音:捫心自問(wèn),去掉異常,你寫的代碼會(huì)不會(huì)隨時(shí)崩潰。(2)學(xué)習(xí)超時(shí)處理:各種通信超時(shí),任務(wù)超時(shí),你真的理解其內(nèi)核么?超時(shí)的原因與處理,WF是學(xué)習(xí)利器。(3)學(xué)習(xí)異步IO:Linux支持非常高效的異步IO系統(tǒng)調(diào)度,如何使用這些異步IO去實(shí)現(xiàn)框架,去封裝任務(wù),實(shí)現(xiàn)業(yè)務(wù)邏輯任務(wù)流化,看看WF的玩法。(4)學(xué)習(xí)協(xié)議設(shè)計(jì):學(xué)習(xí)如何利用WF框架,實(shí)現(xiàn)brpc和thrift,實(shí)現(xiàn)自己自定義的client/server協(xié)議,實(shí)現(xiàn)自己的RPC系統(tǒng)。(5)學(xué)習(xí)計(jì)時(shí)器與計(jì)數(shù)器:很有朋友timer和count用的非常多,但它底層是怎么實(shí)現(xiàn)的,值得深入研究。(6)學(xué)習(xí)服務(wù)治理:WF有一套完整的服務(wù)治理方案,包含服務(wù)路由,熔斷與恢復(fù),負(fù)載均衡,服務(wù)主備。可用于實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)與服務(wù)網(wǎng)格(service mesh)系統(tǒng)。畫外音:這一部分,可以查看源碼的upstream子模塊。今年,看的最清爽的代碼,最適合了解通信內(nèi)核,RPC內(nèi)核,調(diào)度框架內(nèi)核的引擎,強(qiáng)烈推薦給大家。歡迎大家Fork,歡迎大家標(biāo)星。地址:https://github.com/sogou/workflow畫外音:WF還有很多優(yōu)秀的設(shè)計(jì),等待大家去挖掘。
瀏覽
71
欧美成人无码一区二区三区
|
国产精品永久无码AV毛片18禁
|
午夜青草
|
网站首页操B的视頻
|
操屄123|