在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

百度搜索exgraph圖執(zhí)行引擎設(shè)計與實踐分享

OSC開源社區(qū) ? 來源:百度Geek說 ? 2024-01-16 10:27 ? 次閱讀

百度搜索exgraph圖執(zhí)行引擎設(shè)計重點分成三個部分:圖描述語言、圖執(zhí)行引擎、對接擴展。 圖描述語言是一種基于文本可讀的圖描述語言,用于描述任務(wù)中的算子以及算子之間的依賴關(guān)系,即讓人可以理解,也可以被計算機理解并執(zhí)行。 圖執(zhí)行引擎是exgraph的核心,負責根據(jù)圖描述語言生成的圖語法樹進行高效執(zhí)行。它支持如串行、并行、中斷、選擇等范式,以滿足不同場景下的需求。 對接擴展則提供了與其他協(xié)議框架的接口,方便用戶將exgraph集成到現(xiàn)有的系統(tǒng)中。 總之,exgraph圖執(zhí)行引擎設(shè)計的目標是實現(xiàn)高效、靈活的任務(wù)編排,以滿足復雜邏輯處理需求。

01

背景

搜索展現(xiàn)架構(gòu)承載模版選擇、實時摘要補充、展現(xiàn)數(shù)據(jù)適配、結(jié)果渲染等職責,當前由PHP開發(fā)、HHVM執(zhí)行,對接數(shù)十個產(chǎn)品線,數(shù)百個精細化的展現(xiàn)策略由100+RD共同開發(fā)。隨著搜索業(yè)務(wù)產(chǎn)品日益復雜和生成式大模型產(chǎn)品開發(fā)需要,展現(xiàn)架構(gòu)面臨以下難題:

1、HHVM基礎(chǔ)設(shè)施停止維護,且不支持異步并行支持,架構(gòu)升級難度大;

2、歷史累計的多個展現(xiàn)策略框架分布在各個階段,且各自參數(shù)不同,研發(fā)難度大。

通過調(diào)研,了解到DAG有向無環(huán)圖,將DAG圖中頂點描述為業(yè)務(wù)拆分后的一個個算子,邊及其方向作為執(zhí)行順序,一對一作為串行執(zhí)行,一對多作為并發(fā)執(zhí)行,即使是很復雜的業(yè)務(wù)也可以用這套邏輯進行表達。且代碼實現(xiàn)較簡單,還能用graphviz將DAG圖生成圖片,將整個邏輯可視化。

78d11e08-b396-11ee-8b88-92fbcf53809c.png

△算子化后的邏輯執(zhí)行視圖

好像很完美~~

但似乎還有些問題:

1、對于簡單邏輯,DAG圖不復雜,用graphviz構(gòu)建圖也很簡單,但一旦頂點數(shù)量爆發(fā),可閱讀性急速下降。而不幸的是,搜索的PHP模塊幾百個策略,如果遷移進來,預計會有幾百個頂點,構(gòu)建這個圖以及這個圖的可讀性,依然很差;

2、簡單意味著功能弱。

比如搜索有多種版式:手百內(nèi)、手百外、純NA渲染等,下游頂點根據(jù)上游頂點的執(zhí)行結(jié)果來選擇不同的版式渲染。這種場景下只能呆呆的在每個版式頂點內(nèi)自行判斷是否執(zhí)行,而不能由上游頂點直接選擇一個版式分支執(zhí)行。

78dadae2-b396-11ee-8b88-92fbcf53809c.png

比如執(zhí)行到某個頂點,發(fā)現(xiàn)后續(xù)不用執(zhí)行了,邏輯執(zhí)行沒有好的退場機制。

各個算子間傳遞數(shù)據(jù)怎么處理。

...

02

圖執(zhí)行引擎

DAG能滿足大多數(shù)場景的需要,但依然不夠。所以搜索設(shè)計了一套超集于DAG的圖描述,并在這個描述上,添加邏輯執(zhí)行的高級功能,與web框架進行融合,逐步誕生了exgraph圖執(zhí)行引擎。

exgraph圖執(zhí)行引擎設(shè)計重點分成兩個三個部分:圖描述語言、圖執(zhí)行引擎、對接擴展(用來對接協(xié)議框架)。

78e4f496-b396-11ee-8b88-92fbcf53809c.png ? ?

2.1 圖描述語言

2.1.1 核心語法

算子:業(yè)務(wù)執(zhí)行的最小單位,通常一個單詞就是一個算子(語法單獨定義的關(guān)鍵詞除外)。

串行組:即兩個算子按照順序執(zhí)行,在圖上表示為用箭頭連接:

78f04544-b396-11ee-8b88-92fbcf53809c.png

△串行組

并發(fā)組:即多個算子并發(fā)的執(zhí)行,在圖上用中括號?[]?包圍:

78f7be0a-b396-11ee-8b88-92fbcf53809c.png

△并發(fā)組

屬性:圖上所有用大括號?{}?包圍的,都是屬性。屬性用于通過圖描述傳遞參數(shù)給代碼。

7905bd3e-b396-11ee-8b88-92fbcf53809c.png

△屬性

算子、串行組、并發(fā)組都是一個執(zhí)行單元,意味著,他們可以互相包含(算子是最小的執(zhí)行單元,不能包含別的執(zhí)行單元)。比如:

7912ba8e-b396-11ee-8b88-92fbcf53809c.png

△互相包含

上面的這個描述,用人話說就是:

1、執(zhí)行a算子

2、并發(fā)地:

執(zhí)行b算子,

執(zhí)行c算子,然后執(zhí)行d算子,然后執(zhí)行e算子

執(zhí)行f算子,然后再并發(fā)地執(zhí)行g(shù)算子和h算子

3、最后再執(zhí)行i算子

子圖:主圖支持通過文件引入的方式,引入另一個圖嵌入到主圖

791e27e8-b396-11ee-8b88-92fbcf53809c.png

△主圖引入sub_graph子圖

通過上面簡單的介紹,你已經(jīng)掌握幾乎全部圖描述語言語法了,可以開始思考,將自己所負責的業(yè)務(wù)如何用圖進行描述了。

另外,為了更好的適配業(yè)務(wù)場景,exgraph還設(shè)計了幾種指令來處理特殊場景。

擴展指令

START指令:圖開始的標記,用做給圖設(shè)置屬性。

7926b07a-b396-11ee-8b88-92fbcf53809c.png

△START指令

目前START指令用來指導創(chuàng)建HTTP的handler,直接讓圖引擎承接http處理、streaming rpc處理請求。

MIDWARE指令:包裝含義。

793830ac-b396-11ee-8b88-92fbcf53809c.png

△MIDWARE指令

可以在執(zhí)行c算子前,先執(zhí)行b算子,并控制是否執(zhí)行c算子;也可以在執(zhí)行c算子前后,執(zhí)行一些通用的邏輯。

SWITCH指令:選擇執(zhí)行分支。

7945c0dc-b396-11ee-8b88-92fbcf53809c.png

△SWITCH指令

可以在?switch_pc_or_wise?算子內(nèi),選擇執(zhí)行哪個分支。

基于圖描述語言,用純文本的方式就可以將業(yè)務(wù)整體描述,很好的解決了DAG圖構(gòu)圖復雜性問題,并允許自定義一些高級用法。

2.2圖執(zhí)行引擎

上面介紹的圖描述語言,讓“人”可以更加簡單的方式了解到程序的執(zhí)行流程,但也僅僅只是個描述而已。

如何讓其按照我們設(shè)定的描述將邏輯跑起來呢?

首先介紹一個重要的、執(zhí)行單元必須實現(xiàn)的接口:

type Job interface{
    DoImpl(*engine.Context) error
}

其中*Context負責傳遞所有信息到各個算子,提供:算子選項(算子{}附帶的內(nèi)容)內(nèi)容獲取、數(shù)據(jù)傳遞等功能。

在上面的章節(jié)中講到算子、串行組、并發(fā)組都是一個執(zhí)行單元,其實就是說,它們都實現(xiàn)了Job接口

exgraph圖執(zhí)行引擎是:將圖解析后的語法樹作為入?yún)ⅲ钆淙炙阕幼裕屗阕影凑疹A定的規(guī)則執(zhí)行起來。

它的執(zhí)行過程近似于:

7950b7bc-b396-11ee-8b88-92fbcf53809c.png

em~~,簡單的有點像把大象放冰箱的過程,但實際遠不止如此。

想一下,如果你執(zhí)行到a算子,發(fā)現(xiàn)沒有必要執(zhí)行b算子了,怎么辦?又或者a有數(shù)據(jù)要傳遞到b算子,怎么辦?

2.2.1 對象容器

exgraph中實現(xiàn)了一個并發(fā)安全的對象容器,用戶可以通過*engine.Context提供的接口,方便的設(shè)置和獲取對象,就像這樣:

type a struct {}


func (o *a) DoImpl(ctx *Context) error {
    // 算子a,設(shè)置對象
    var a int = 2023
    ctx.RegisterInstance(&a)
    return nil
}


type b struct {}


func (o *b) DoImpl(ctx *Context) error {
    var a int
     // 通過類型獲取值
    ctx.MutableInstance(&a)
     // 打印2023
    fmt.Println(a)
    return nil
}

對象容器再存入時,將其類型作為標識符,取值時也通過相同類型的變量,通過反射賦值。

2.2.2依賴注入和對象導出

有了對象容器,exgraph設(shè)計了支持基于struct tag的對象依賴注入和導出功能,且采用腳本生成代碼的方式實現(xiàn):

type Operator struct {
    http.Request `inject:""`
    http.Response `inject:"canLost=true,canNil=true"`
    
    *Userinfo `extract:"canNil=true"`
}


type UserInfo struct {
    Name string
}


func (o *Operator) DoImpl(engine.Context) error {
    // 通過inject,算子內(nèi)可以直接獲取到Request對象
    if v, ok := o.Request.Header.Get("xx"); ok {
        // do something
    }
    
    return nil
}

利用struct tag和生成的代碼,用戶在使用算子時,實現(xiàn)了以下功能:

1、inject tag可以直接通過算子屬性獲取對象,省去了繁瑣的取值過程,并支持:canLost=true表示允許對象不存在,canNil=true表示循序?qū)ο笾禐閚il。

2、extract tag則允許用戶直接賦值為算子屬性,由生成的代碼賦值將對象導出到對象容器中,且支持:canNil=true表示允許導出對象值為nil,repace=true表示允許替換對象。

2.2.3 中斷和跳過

為方便程序邏輯執(zhí)行,exgraph內(nèi)置了幾種中斷跳過邏輯:

1、全局錯誤中斷

type a struct {}


func (o *a) DoImpl(ctx *Context) error {
    // 模擬業(yè)務(wù)執(zhí)行遇到了不可兜底的錯誤
    err := errors.New("fatal error") 
     // 調(diào)用Abort函數(shù)即可中斷整個圖執(zhí)行引擎
    ctx.Abort(err)
    return nil
}

2、全局正常中斷

type a struct {}


func (o *a) DoImpl(ctx *Context) error {
    // 發(fā)現(xiàn)沒必要走后面的邏輯
    // 直接中斷整個圖執(zhí)行引擎
    ctx.Exit() 
    return nil
}

3、跳過串行組

type a struct {}


func (o *a) DoImpl (ctx *Context) error {
    // a算子執(zhí)行跳過`a -> b`這個子集串行組
    // 即b算子不再執(zhí)行,但c算子正常執(zhí)行
    ctx.SkipSerialGroup() 
    return nil
}

2.3執(zhí)行優(yōu)化

exgraph執(zhí)行的一個聲明周期內(nèi),大部分對象都允許池化。

2.3.1對象池

對于算子:exgraph內(nèi)部對每個注冊的算子,都是注冊到一個sync.Pool中,算子對象在執(zhí)行完成后,執(zhí)行reset后返回到對象池內(nèi)。

對于放入對象容器的對象:在exgraph執(zhí)行引擎結(jié)束時,會循環(huán)對每個對象檢測是否實現(xiàn)了Release接口,如果實現(xiàn)接口就會調(diào)用,用戶就可以在Release時將對象reset后返回對象池內(nèi)。

2.3.2其他優(yōu)化

exgraph在執(zhí)行每個算子時默認在當前goroutine執(zhí)行,除非用戶顯示的給算子設(shè)置了超時時間a{timeout="1s"}。

依賴注入和對象導出,是基于腳本生成代碼的,而非反射。

03

場景案例

3.1 同路徑不同邏輯

背景:搜索PC和wise(移動端)同模塊執(zhí)行,檢索路徑都為/s

方案:可以用SWITCH選擇模式,通過一個算子來判斷使用哪個分支:

7945c0dc-b396-11ee-8b88-92fbcf53809c.png

3.2PHP策略遷移Go

背景:搜索展現(xiàn)架構(gòu)當前逐步由PHP遷移到Go。在過渡期,PHP代碼遷移到Go之后,需要通過抽樣驗證Go代碼邏輯無誤,即:命中抽樣,執(zhí)行Go代碼,否則執(zhí)行PHP代碼。而且需要遷移的PHP策略很多,如果沒有統(tǒng)一的機制來支持,成本很高。

方案:用MIDWARE指令,用CommonDealPhpOrGoStrategy算子作為判斷包裝,判斷命中抽樣時,允許執(zhí)行DemoStrategy1算子,并帶標識到PHP,不執(zhí)行PHP相應(yīng)邏輯。

否則不執(zhí)行DemoStrategy1而執(zhí)行PHP相應(yīng)邏輯。

關(guān)鍵的是,遷移后的Go算子都不需要做特殊處理,正常遷移代碼加上MIDWARE就能支持以上功能。

795e76fe-b396-11ee-8b88-92fbcf53809c.png








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RPC
    RPC
    +關(guān)注

    關(guān)注

    0

    文章

    111

    瀏覽量

    11536
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    452

    瀏覽量

    26687
  • DAG
    DAG
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8157

原文標題:百度搜索exgraph圖執(zhí)行引擎設(shè)計與實踐

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    百度搜索、文庫等全新升級!以智能體為支點,撬動時代紅利

    個體的時代機遇。 百度移動生態(tài)是大模型應(yīng)用生長的熱土,也是智能體浪潮的潮頭。無論用戶、客戶,還是生態(tài)伙伴,都能享受到低門檻、多場景、高價值的智能體生態(tài)機遇。 百度搜索、文心一言APP、百度文庫等最新升級 大會上,
    的頭像 發(fā)表于 05-31 09:02 ?2818次閱讀
    <b class='flag-5'>百度搜索</b>、文庫等全新升級!以智能體為支點,撬動時代紅利

    發(fā)現(xiàn)百度搜索頁的網(wǎng)站前加了圖標

    `發(fā)現(xiàn)百度搜索頁的網(wǎng)站前加了圖標今天在搜索內(nèi)容時,發(fā)現(xiàn)很多知名網(wǎng)站都在網(wǎng)站名前加了ICO圖標。如下圖:再看了一下我們的bbs.elecfans.com,發(fā)現(xiàn)并沒有此圖標,看來這個得研究一下。感覺百度
    發(fā)表于 01-05 23:16

    百度回應(yīng)否認搜索漏洞 卻私下悄悄更正

    百度是國內(nèi)用戶網(wǎng)上搜索的第一入口,近日,《證券日報》記者發(fā)現(xiàn),百度搜索新聞結(jié)果極不穩(wěn)定。 對此,百度方面作出回應(yīng)稱,經(jīng)過技術(shù)排查定位,百度
    發(fā)表于 08-24 10:05 ?550次閱讀

    如何消滅百度搜索的廣告

    最近學了不少消滅百度廣告和家號的小tips,可以安利給你們。 先說個簡單的,小伙伴們上網(wǎng)肯定經(jīng)常遇到這種家號內(nèi)容:
    的頭像 發(fā)表于 01-29 10:46 ?4293次閱讀

    百度沈抖:家號不是營銷號平臺 百度問心無愧

    百度召開家號2019內(nèi)容創(chuàng)作者盛典,百度副總裁沈抖出席并發(fā)布演講。 就在前一天,一篇名為《搜索引擎百度已死》的文章刷屏,文中提到
    發(fā)表于 05-04 16:58 ?1496次閱讀

    百度回應(yīng)搜索引擎半數(shù)文章出自家號:屬于特例

    百度召開家號2019內(nèi)容創(chuàng)作者盛典,家號總經(jīng)理阮瑜出席并接受了新浪科技的采訪。就在前一天,一篇名為《搜索引擎百度已死》的文章刷屏,文中提
    的頭像 發(fā)表于 05-04 17:00 ?2943次閱讀

    百度開發(fā)者搜索Beta體驗 完全無廣告

    最近,百度上線了一個全新的搜索產(chǎn)品——百度開發(fā)者搜索。顯而易見,這是一個面向開發(fā)者的搜索引擎,而它給用戶最直觀的感受,可能就是完全沒有廣告了
    的頭像 發(fā)表于 01-28 09:58 ?1959次閱讀

    百度、英偉達聯(lián)合舉辦搜索創(chuàng)新大賽 搜索引擎變革 搜索+AI

    近日,百度文心一言宣布向全社會開放,首日,百度搜索就有超3億次需求由生成式智能引擎解決;百度搜索“AI伙伴”當日訪問用戶數(shù)突破400萬。 在這樣的背景下,9月7日,以“新
    的頭像 發(fā)表于 09-07 19:32 ?1030次閱讀

    百度攜手 NVIDIA 舉辦“第二屆百度搜索創(chuàng)新大賽”火熱進行中,五大賽道等你挑戰(zhàn)!

    百度搜索攜手 NVIDIA 共同發(fā)起的第二屆百度搜索創(chuàng)新大賽,今年以「新搜索 · 新奇點」為主題,正火熱進行中! 作為一項全國性的科技競賽,百度搜索創(chuàng)新大賽被譽為
    的頭像 發(fā)表于 09-28 18:25 ?759次閱讀
    <b class='flag-5'>百度</b>攜手 NVIDIA 舉辦“第二屆<b class='flag-5'>百度搜索</b>創(chuàng)新大賽”火熱進行中,五大賽道等你挑戰(zhàn)!

    百度發(fā)布全新AI互動式搜索 簡單搜索AI升級

    搜索APP。百度旗下簡單搜索17日大升級,簡單搜索,首個AI互動式搜索引擎,能聽會看,聰明懂你。全新的
    的頭像 發(fā)表于 10-17 12:34 ?1331次閱讀

    百度搜索推出AI拜年新能力 AI春節(jié)儀式感拉滿

    春節(jié)AI拜年新體驗,百度搜索春節(jié)期間推出AI拜年大禮包!
    的頭像 發(fā)表于 02-05 10:38 ?2.2w次閱讀

    百度搜索推出AI拜年新能力

    隨著人工智能技術(shù)的迅猛發(fā)展,百度搜索始終站在技術(shù)前沿,致力于為用戶提供更加智能化、便捷的服務(wù)。百度搜索重磅推出了AI拜年新能力,在春節(jié)期間,讓用戶能夠更加輕松地表達祝福、傳遞情感。
    的頭像 發(fā)表于 02-05 10:54 ?6116次閱讀

    百度搜索重磅推出AI圖片助手

    近日,百度搜索全新上線了一款名為“百度AI圖片助手”的智能工具,該工具賦予了用戶一鍵處理圖片的強大能力。無論是搜索中的圖片還是用戶自主上傳的圖片,均可輕松實現(xiàn)涂抹消除、去水印以及畫質(zhì)修復等功能。
    的頭像 發(fā)表于 05-06 10:20 ?1469次閱讀

    2024百度移動生態(tài)萬象大會:百度搜索11%內(nèi)容已AI生成

    萬象大會上百度集團資深副總裁、百度移動生態(tài)事業(yè)群組(MEG)總經(jīng)理何俊杰公布了一項統(tǒng)計數(shù)據(jù):百度搜索已有11%的搜索內(nèi)容是由AI生成的。同
    發(fā)表于 05-30 18:58 ?413次閱讀

    百度搜索AI生成內(nèi)容占比達11%

    在2024年舉辦的百度移動生態(tài)萬象大會上,百度集團資深副總裁、百度移動生態(tài)事業(yè)群組總經(jīng)理何俊杰分享了一系列令人矚目的數(shù)據(jù)。他透露,百度搜索
    的頭像 發(fā)表于 05-31 09:24 ?733次閱讀
    主站蜘蛛池模板: 日韩啪啪网| 男人午夜网站| 一级毛片aaa片免费观看| 人人爱爱人人| 小雪被老外黑人撑破了| 欧美性黑人极品hd网站| 婷婷五月五| bt在线天堂| xx日本69| 欧洲成品大片在线播放| 天天狠天天透| 禁漫画羞羞动漫入口| 老色批网站| 国产福利影视| 天堂在线观看视频| 亚州怡红院| 免费一区二区视频| 精品你懂的| 56pao强力打造| 色婷丁香| 深夜视频在线免费观看| 中日韩黄色大片| 成人免费无毒在线观看网站| 最新在线视频| 日本成人免费在线视频| 色片视频网站| 亚洲成色www久久网站| av大片| 亚洲精品aaa揭晓| 久久香蕉综合色一综合色88| 国产精品青草久久久久福利99 | 日本一区二区在线不卡| 女人的天堂网站| 丁香五月网久久综合| 色婷婷六月丁香在线观看| 天天爱天天做久久天天狠狼| 91视频精品| 永久看片| 曰本性l交片视频视频| 1314亚洲人成网站在线观看| 日本免费一区二区在线观看|