日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

biz confighash_mode一級(jí)散列二級(jí)散列query_configreturn hit 優(yōu)化配置mempool配置join_config

在ha3 3.0 之前, indexlib 離線build,indexlib實(shí)時(shí)build索引, indexlib 索引加載, 以及在線檢索相關(guān)的配置都揉在cluster 配置里面,cluster 配置比較復(fù)雜, 3.0 對(duì)這些邏輯進(jìn)行了拆分:

  • indexlib 離線build 索引(全量增量), indexlib 實(shí)時(shí)build索引的配置獨(dú)立出來(lái)放到離線的cluster 配置里面,文件名一般以app_cluster.json

  • indexlib 索引加載方式相關(guān)配置放到table的配置里面,文件命名一般也是cluster_name +"_cluster.json" ,與離線build配置文件通過(guò)文件夾路徑進(jìn)行區(qū)分;

  • 在線檢索相關(guān)配置在biz 配置中, 配置結(jié)構(gòu)如下所述

biz config 結(jié)構(gòu)

{

"cluster_config": {...},
"aggregate_sampler_config" : {...},
"rankprofile_config" : {...},
"summary_profile_config" : {...},
"function_config", : {...},
"searcher_cache_config" : {...},
"service_degradation_config" : {...}

}

cluster_config

cluster_config {

"hash_mode" : "",
"query_config" : "",
"join_config" : "",
"return_hit_rewrite_threshold" : "",
"return_hit_rewrite_ratio" : "",
"table_name" : "",
"pool_trunk_size: : 10,
"pool_recycle_size_limit" : 20,

}

文檔的hash方式,用于決定將文檔被歸類(lèi)到哪一個(gè)partition當(dāng)中。 hash_field: 計(jì)算hash的字段, 一般使用pk 比較多, 當(dāng)然也有例外,比方說(shuō)inshop; hash_function: 目前支持三種hash方法,HASH、GALAXY_HASH、KINGSO_HASH。對(duì)于KINGSO_HASH,如果想修改kingSo的hash范圍可以將此項(xiàng)配置成KINGSO_HASH#range的形式,必須配置;

例子:

"hash_mode": 
{
    "hash_field" : "nid",
    "hash_function" : "HASH"
}

表示根據(jù)nid 字段使用HASH 方法計(jì)算hash值,進(jìn)行分partition

首先介紹下HA3引擎的索引由全量(增量)和實(shí)時(shí)索引組成。 全量索引由build service(下文簡(jiǎn)稱(chēng)bs)構(gòu)建,實(shí)時(shí)索引由searcher builder構(gòu)建,兩者都需要讀取swift對(duì)應(yīng)topic的文檔進(jìn)行build。索引文檔的路由由bs的processor完成。它讀取文檔中在hash_mode配置的字段,通過(guò)hash函數(shù)計(jì)算得到一個(gè)值,其范圍[0,65535],發(fā)送到swift相應(yīng)的topic的分區(qū)中[0, 65535]。所以邏輯上索引共分2^16 邏輯partition, 編號(hào)是[0, 65535]。 用戶(hù)可以指定最終生成的物理partition個(gè)數(shù),引擎會(huì)自動(dòng)把連續(xù)的邏輯partition映射到物理partition上。例如有2個(gè)物理partition的索引,包含的邏輯partition的區(qū)間分別是[0,32767]和[32768, 65535],同時(shí)訂閱相同的swift topic分區(qū)就能獲取相應(yīng)的文檔。在線查詢(xún)時(shí)讀取在線對(duì)應(yīng)的hash_mode配置,進(jìn)而查詢(xún)指定的列。 有了上面的背景知識(shí),我們先來(lái)說(shuō)下一級(jí)散列,舉個(gè)淘寶店鋪內(nèi)搜索的例子:hash_mode中配置hash_field為user_id(賣(mài)家id),大賣(mài)家的商品量遠(yuǎn)遠(yuǎn)大于其他小賣(mài)家所擁有的商品量,在bs processor構(gòu)建的時(shí)候會(huì)將user_id計(jì)算一個(gè)hash值,熱點(diǎn)主要表現(xiàn)為以下三點(diǎn):1.bs processor計(jì)算hash之后,大賣(mài)家所在的builder和merger耗時(shí)會(huì)明顯大于其他builder和merger,從而拖慢整體build進(jìn)度;2.索引產(chǎn)出加載到引擎的不同列時(shí),大賣(mài)家所在列的索引明顯大于其他列,引擎需要為了熱點(diǎn)擴(kuò)大全部列的資源,造成了在線資源的浪費(fèi);3.查詢(xún)也表現(xiàn)為大賣(mài)家所在的列查詢(xún)量較多而出現(xiàn)查詢(xún)熱點(diǎn)。所以一級(jí)散列在這種情況下會(huì)導(dǎo)致build時(shí)間拉長(zhǎng),在線資源浪費(fèi)和查詢(xún)熱點(diǎn)等問(wèn)題。

二級(jí)散列是在一級(jí)散列的基礎(chǔ)上拓展而來(lái)的功能,二級(jí)散列的作用是在一級(jí)散列的基礎(chǔ)上,把一級(jí)散列到同一列的文檔繼續(xù)按照二級(jí)散列字段散列到不同的列上,比如店鋪內(nèi)搜索,二級(jí)散列中hash_fields配置為user_id(賣(mài)家ID)、nid(寶貝ID),一級(jí)散列是按照賣(mài)家分列,大賣(mài)家的寶貝都落在了引擎的一列上面,二級(jí)散列就是在按照賣(mài)家分列的基礎(chǔ)上,再按照寶貝ID進(jìn)行二級(jí)散列,這樣大賣(mài)家的寶貝就會(huì)落在引擎的多列上。因?yàn)樯⒘惺窃赽s的processor中完成的,所以,1.bs的build和merge階段的數(shù)據(jù)熱點(diǎn)得以消除從而加快build速度;2.引擎中不同列數(shù)據(jù)不存在明顯的熱點(diǎn),可以提升引擎整體的資源利用率;3.在查詢(xún)時(shí)同樣也會(huì)因查詢(xún)分布到不同的列上,減少查詢(xún)熱點(diǎn)的出現(xiàn)。此功能在引擎3.7.2版本開(kāi)始支持。 在autil中提供了二級(jí)列表函數(shù)ROUTING_HASH,其對(duì)應(yīng)的新的hash_mode的配置如下:

"hash_mode" :
{
    "hash_field" : "user_id",
     "hash_fields" : ["user_id", "nid"],  
     "hash_function" : "ROUTING_HASH",
     "hash_params" : {
            "hash_func": "HASH",
            "routing_ratio":"0.25",
            "hot_ranges":"512-1536;8000-10000",
            "hot_ranges_ratio":"0.25;0.5",
      "hot_values":"t1;t2",
      "hot_values_ratio":"0.3;0.4"
        }
}

參數(shù)說(shuō)明:

  1. hash_field與hash_fields: 原先的hash_field仍支持,當(dāng)hash_fields沒(méi)有配置時(shí),hash_filed的內(nèi)容會(huì)動(dòng)填入到hash_fields中。當(dāng)hash_fields配置時(shí),hash_field不生效,hash_field仍需要配置。

  2. hash_function 仍支持原先的三種:HASH、GALAXY_HASH、KINGSO_HASH,新增了ROUTING_HASH作為二級(jí)散列。

  3. hash_params是hash函數(shù)的配置參數(shù),是個(gè)map<string, string>類(lèi)型,在創(chuàng)建hash函數(shù)時(shí)會(huì)傳入。例如使用HASH、GALAXY_HASH、KINGSO_HASH可以不用配置,ROUTING_HASH如果不配置,默認(rèn)實(shí)現(xiàn)等同于HASH。

  4. ROUTING_HASH的hash_params支持的配置項(xiàng):

  • hash_func: 指定routing hash內(nèi)部使用的hash函數(shù),默認(rèn)是HASH, 可以使用NUMBER_HASH方便測(cè)試

  • routing_ratio: 二級(jí)散列的覆蓋率, 上述配置中內(nèi)部二級(jí)散列值的計(jì)算是公式:

(HASH(user_id) %65536 + floor(HAHS(nid)%65536 * routing_ratio) )%65536
  • hot_ranges與hot_ranges_ratio:分別是熱點(diǎn)散列值及對(duì)應(yīng)的覆蓋率,可以針對(duì)特定熱點(diǎn)的散列中指定不同的覆蓋率。主要應(yīng)用場(chǎng)景是已知熱點(diǎn)物理列,對(duì)應(yīng)的0-65535間的散列值已知。

  • hot_values與hot_values_ratio:分別是熱點(diǎn)賣(mài)家及對(duì)應(yīng)的覆蓋率,可以針對(duì)不同的大賣(mài)家設(shè)置不同的覆蓋率。主要的應(yīng)用場(chǎng)景是知道熱點(diǎn)賣(mài)家的原始值。

注意hash mode中hash函數(shù)或hash_params的改動(dòng)都會(huì)導(dǎo)致索引數(shù)據(jù)分布的改變,升級(jí)方案如下:

  1. 針對(duì)所有列都需要查詢(xún)的場(chǎng)景,需要重建全量索引+更新qrs配置才能生效。

  2. 針對(duì)單列或有二級(jí)散列的場(chǎng)景,需要通過(guò)重建機(jī)群+重建全量索引,原因是qrs的hash配置可能與索引使用的hash配置不一致,導(dǎo)致在升級(jí)的過(guò)程中查詢(xún)的列不正確。

檢索(query)相關(guān)配置, 主要是設(shè)置默認(rèn)檢索的索引名, 查詢(xún)多個(gè)詞之間的默認(rèn)關(guān)系以及是否開(kāi)啟multi_term 優(yōu)化。

  • default_index

默認(rèn)進(jìn)行查詢(xún)的索引名稱(chēng),如果在query中未指明查詢(xún)的索引名稱(chēng)時(shí),將在該索引中查找; 比方說(shuō)query=nid:1 指定了在nid索引下查找, query='mp3'未指定索引名稱(chēng),會(huì)使用默認(rèn)的index。

  • default_operator

查詢(xún)多個(gè)單詞時(shí),多個(gè)單詞之間缺省的關(guān)系。例如這里配置為“AND”即表示求多個(gè)單詞查詢(xún)結(jié)果的交集。像 "query=a b" 將被作為 "query=a AND b"進(jìn)行查詢(xún)。如果查詢(xún)的時(shí)候單個(gè)語(yǔ)被分詞器拆分成多個(gè)詞,這多個(gè)詞之間也是按照該配置項(xiàng)指定的關(guān)系進(jìn)行查詢(xún);

  • multi_term_optimize

multi_term_optimize: 是否啟用multiterm query 優(yōu)化, 比方說(shuō)a|b a&b之類(lèi)的query,默認(rèn)query 解析等價(jià)于a OR b, a AND b, 都是binary query,有兩層,qrs 處理query 開(kāi)銷(xiāo)較大,尤其是|或者&的term 較多的情況,比方說(shuō)主搜海選個(gè)性化召回query,開(kāi)啟這個(gè)優(yōu)化選項(xiàng)之后會(huì)變成一個(gè)多term的單層query,通過(guò)op 標(biāo)識(shí)是OR 還是AND邏輯。

例子: "query_config" : {

"default_index" : "phrase",
"default_operator" : "AND",
"multi_term_optimize" : true

},

表示默認(rèn)查詢(xún)的索引是phrase, 多關(guān)鍵默認(rèn)關(guān)系是AND, 并且query解析開(kāi)啟multi_term優(yōu)化。

優(yōu)化searcher 序列化到qrs doc數(shù)的一組配置,默認(rèn)情況qrs 查詢(xún)searcher, searcher 需要返回start+hit個(gè)數(shù)個(gè)文檔(searcher 排序出top(start+hit)), 當(dāng)start+hit 比較大的時(shí)候searcher 序列化以及qrs 上反序列話成本比較大,事實(shí)上在多列場(chǎng)景每列數(shù)據(jù)分布較均勻, 適當(dāng)減少searcher上返回的條數(shù)對(duì)最終整體效果基本沒(méi)影響(保證所有searcher 返回的條數(shù)大于start+hit再乘以合適的系數(shù)), 在爬蟲(chóng)或者rank service架構(gòu)下start+hit 往往比較大, 這個(gè)時(shí)候開(kāi)啟比較合適。

  • return_hit_rewrite_threshold : start + hit 大于這個(gè)閾值時(shí), 開(kāi)啟這個(gè)優(yōu)化;

  • return_hit_rewrite_ratio: 為了盡量不有損效果,searcher上實(shí)際排序出來(lái)的條數(shù)以及序列化之后的條數(shù),(start+hit)/partition之后的值會(huì)按照業(yè)務(wù)場(chǎng)景乘以一個(gè)大于1的系數(shù) 限制條件:return_hit_rewrite_ratio 合理取值范圍是(1,partition_count); 對(duì)于類(lèi)似inshop 路由到單列的查詢(xún), 會(huì)自動(dòng)不做這個(gè)優(yōu)化處理;

優(yōu)化后search上序列化的條數(shù)為(start+hit)/partition_count*return_hit_rewrite_ratio. 當(dāng)列數(shù)越多的是以后優(yōu)化效果越明顯;

  • pool_trunk_size

用來(lái)控制pool分配的trunk大小,以M為單位,默認(rèn)為10M。

  • pool_recycle_size_limit

觸發(fā)pool回收的大小,以M為單位,默認(rèn)為20M。

輔表相關(guān)配置,典型應(yīng)用場(chǎng)景:寶貝數(shù)據(jù)除了存儲(chǔ)寶貝本身信息外,還要存儲(chǔ)會(huì)員維度(member)信息,如果不通過(guò)輔表的方案, 就要把所需要的會(huì)員信息冗余到寶貝上,同一會(huì)員的寶貝會(huì)都存儲(chǔ)相同的信息(這個(gè)需要離線處理好),會(huì)浪費(fèi)一些存儲(chǔ), 還有個(gè)問(wèn)題就是會(huì)員信息更新的時(shí)候所有的寶貝都需要更新;另外一個(gè)方案則是通過(guò)輔表來(lái)實(shí)現(xiàn), 寶貝和會(huì)員表分開(kāi)索引, 在線的是時(shí)候通過(guò)會(huì)員表的pk(寶貝里面存儲(chǔ)了member_id的正排,跟數(shù)據(jù)庫(kù)機(jī)制類(lèi)似), 查詢(xún)得到對(duì)應(yīng)的會(huì)員信息(當(dāng)然具體實(shí)現(xiàn)上也有一些優(yōu)化的手段,后面配置會(huì)說(shuō)明), 這種方案的好處比較明顯, 會(huì)員表沒(méi)有冗余存儲(chǔ),更新也不成問(wèn)題, 但是也有限制, 會(huì)員表信息不能作為檢索條件, 只能用于過(guò)濾排序或者展示, 實(shí)際使用上可以做一些折中,將會(huì)員表中需要檢索的字段冗余到寶貝表上, 其余的存儲(chǔ)在輔表上。

  • join_infos 描述了當(dāng)前cluster關(guān)聯(lián)的輔表的信息

  • join_field 用于與輔表關(guān)聯(lián)的字段。主表中的join_field有如下幾個(gè)限制: a. join_field必須與輔表的關(guān)聯(lián)字段完全一致 b. join_field目前不能是多值類(lèi)型 c. join_field僅支持整數(shù)類(lèi)型以及string類(lèi)型 d. 輔表中的primary key索引字段必須是join_field

  • join_cluster 關(guān)聯(lián)輔表的cluster name

  • strong_join 是否是強(qiáng)關(guān)聯(lián)。當(dāng)某次查詢(xún)需要取該輔表的attribute時(shí),若某篇doc關(guān)聯(lián)失敗( 即通過(guò)join attribute查輔表pk index失敗),如果開(kāi)啟了強(qiáng)關(guān)聯(lián),則會(huì)丟棄該doc; 否則,默認(rèn)會(huì)保留該doc,即使關(guān)聯(lián)失敗。

  • use_join_cache 是否開(kāi)啟join docid cache功能。join docid cache是主表docid到輔表docid的映射(可認(rèn)為是一個(gè)特殊的attribute),對(duì)用戶(hù)是透明的,用于輔表性能優(yōu)化(開(kāi)啟了這個(gè)功能不需要再做輔表的pk 檢索,直接在cache 中拿到輔表的docid)。從2.8版本開(kāi)始每個(gè)join_cluster分別配置。

  • check_cluster_config 是否開(kāi)啟檢查配置路徑的功能,如果設(shè)為true,開(kāi)啟功能,會(huì)根據(jù)cluster_name去讀取相應(yīng)路徑下的配置文件,如果關(guān)閉功能,則跳過(guò)讀取配置文件,自動(dòng)填充table_name為cluster_name。默認(rèn)值為true。

配置例子:

"join_config" : {                                             
         "join_infos" : [                                     
                {
                    "join_field" : "company_id",              
                    "join_cluster" : "company",               
                    "strong_join" : true,                      
                    "use_join_cache" : true,
     "check_cluster_config": true
                }
            ]
        },

aggregate_sampler_config

aggregate_sampler_config配置統(tǒng)計(jì)時(shí)的相關(guān)參數(shù),支持2種統(tǒng)計(jì)模式:普通統(tǒng)計(jì)和批量統(tǒng)計(jì), 通過(guò)aggBatchMode標(biāo)識(shí),這部分為可選配置,默認(rèn)為普通統(tǒng)計(jì)模式。

普通統(tǒng)計(jì)是指每seek出一個(gè)結(jié)果就統(tǒng)計(jì)一次,它的參數(shù)含義如下:

"aggregate_sampler_config" :
 {
        "aggThreshold" : 0,
        "sampleStep" : 1
 }

  • aggThreshold 統(tǒng)計(jì)的閾值,當(dāng)已經(jīng)統(tǒng)計(jì)的個(gè)數(shù)小于這個(gè)數(shù)字時(shí),抽樣所有的。否則按照每sampleStep個(gè)數(shù),抽取一次;

  • sampleStep 抽樣統(tǒng)計(jì)時(shí),每次抽樣統(tǒng)計(jì)的跨度;

當(dāng)aggBatchMode 為true時(shí)表示批量統(tǒng)計(jì), 指seek出所有結(jié)果后再一次性統(tǒng)計(jì),例子如下:

"aggregate_sampler_config" : {
  "aggBatchMode" : true,
  "aggThreshold" : 1000,
  "batchSampleMaxCount" : 1000
}

批量統(tǒng)計(jì)開(kāi)關(guān)

  • aggThreshold,批量統(tǒng)計(jì)的閾值,totalhits小于等于aggThreshold時(shí),統(tǒng)計(jì)所有的結(jié)果。

  • totalhits大于aggThreshold時(shí),批量統(tǒng)計(jì)的最大抽樣個(gè)數(shù),此時(shí)的步長(zhǎng)公式是 (totalhits + batchSampleMaxCount - 1) / batchSampleMaxCount。

densemap功能開(kāi)關(guān)

"aggregate_sampler_config" : {
    "enableDenseMode" : false
}

  • enableDenseMode,值為"true"和"false",與性能有關(guān)的選項(xiàng),根據(jù)業(yè)務(wù)特點(diǎn)選擇開(kāi)啟或關(guān)閉。如果業(yè)務(wù)場(chǎng)景待統(tǒng)計(jì)的groupkey比較豐富,可以打開(kāi),性能會(huì)有提升。默認(rèn)為"false"。

    注:開(kāi)啟該選項(xiàng)前,務(wù)必要進(jìn)行壓測(cè)!

table_name

表名, 用于search上獲取schema等;

rankprofile_config

主要負(fù)責(zé)定義算分的插件,這部分為可選配置,主要配置插件so 名稱(chēng)以及用到score 插件名稱(chēng)

  • modules.module_name 插件的模塊名稱(chēng)

  • modules.module_path 插件動(dòng)態(tài)鏈接庫(kù)的名稱(chēng)

  • modeles.parameters 用戶(hù)自定義參數(shù),傳遞給插件的so使用

  • rankprofiles.rank_profile_name rank_profile名稱(chēng),可以在查詢(xún)語(yǔ)句中指定使用哪個(gè).

  • rankprofiles.score_name so中score的名稱(chēng)

  • rankprofiles.total_rank_size 這個(gè)表示該scorer算分時(shí)接受的最大文檔數(shù)量(單partition上要除以partition_count)

例子:

"rankprofile_config" : {
        "modules" : [
            {
                "module_name" : "fake_scorer",               
                "module_path" : "libfakescorer.so", 
                "parameters" : {
                    "key" : "value"                 
                }
            }
        ],
        "rankprofiles" : [
            {
                "rank_profile_name": "DefaultProfile", 
                "scorers" : [
                    {
                        "scorer_name" : "FakeScorer",
                        "module_name" : "fake_scorer",
                        "parameters" : {               
                            "key" : "value"
                        },
                        "rank_size" : "300"            
                    }
                ],
                "field_boost" : {                      
                    "phrase.title" : 1000,
                    "phrase.body" : 100
                }
            }
        ]
    }

summary_profile_config

  • required_attribute_fields summary返回結(jié)果中,不在summary_schema中的attribute字段;主要應(yīng)用于輔表,即主表查詢(xún)結(jié)果里返回輔表字段。

  • modules.module_name 插件的模塊名稱(chēng)。

  • modules.module_path 插件動(dòng)態(tài)鏈接庫(kù)的名稱(chēng)。

  • modules.parameters 用戶(hù)自定義參數(shù),傳遞給插件的so使用。

  • summary_profiles.summary_profile_name summary_profile的名稱(chēng),可以在查詢(xún)語(yǔ)句中指定使用哪個(gè)。

  • summary_profiles.extractors summary extractor處理鏈的配置,extract summary時(shí),按順序過(guò)一遍所有的extractor。

  • summary_profiles.parameters 用戶(hù)自定義參數(shù),傳遞給summary_profile使用。

  • summary_profiles.field_configs 需要建立摘要的field的定義。

  • summary_profiles.max_summary_length highlight_prefix 可以指定關(guān)鍵字高亮顯示,摘要的長(zhǎng)度限制等。

配置例子:

"summary_profile_config" : {
        "required_attribute_fields" : ["aux_field1", "aux_field2", "attr_field"],1
        "modules" : [
            {
                "module_name" : "ha3_summary_eg",       
                "module_path" : "libha3_summary_eg.so", 
                "parameters" : {
                    "key" : "value"                     
                }
            }
        ],
        "summary_profiles" : [
            {
                "summary_profile_name": "DefaultProfile", 
                "extractors" :[                           
                   {
                      "extractor_name" : "SmartSummaryExtractor",
                      "module_name" : "ha3_summary_eg",
                      "parameters" : {                    
                          "key": "value"
                      }
                   },
                   {
                      "extractor_name" : "DefaultSumamryExtractor",
                      "module_name" : "",
                      "parameters" : {}
                   }
                ],
                "field_configs" : {                       
                    "TITLE" : {                           
                        "max_snippet" : 1,
                        "max_summary_length" : 40,
                        "highlight_prefix": "<font color=red>",
                        "highlight_suffix": "</font>",
                        "snippet_delimiter": "..."
                    },
                    "BODY" : {
                        "max_snippet" : 2,
                        "max_summary_length" : 100,
                        "highlight_prefix": "<font color=red>",
                        "highlight_suffix": "</font>",
                        "snippet_delimiter": "..."
                    }
                }
            }
        ]
    }

function_config

配置集群用到的function_expression插件信息,這部分為可選配置。具體參數(shù)含義如下:

"function_config" : 
     {
        "modules" : [
            {
                "module_name" : "func_module_name",                          
                "module_path" : "libfunction_expression_plugin.so",          
                "parameters" : 
                {
                             "config_path" : "pluginsConf/one_function.json"
                }
            }
        ]
    }

searcher_cache_config

searcher cache是用于cache第一階段查詢(xún)的結(jié)果

"searcher_cache_config" :
   {
       "max_size" : 1024, /* M byte */
    "max_item_num" : 200000,
    "inc_doc_limit" : 1000,
    "inc_deletion_percent" : 1,
    "latency_limit" : 1, /* ms */
    "min_allowed_cache_doc_num" : 0,
    "max_allowed_cache_doc_num" : 50000
 }

  • max_size max_size用于指定Searcher Cache的最大內(nèi)存使用空間,單位為 M 字節(jié),默認(rèn)值為 1024 M bytes。

  • max_item_num max_item_num用于指定Searcher Cache的初始化時(shí)item的個(gè)數(shù)。cache的底層是一個(gè)hash table,max_item_num用于初始化hash_table,而cache中實(shí)際的item個(gè)數(shù)是運(yùn)行時(shí)根據(jù)實(shí)際的item大小和cache總的內(nèi)存限制決定的,因此這個(gè)配置值只是一個(gè)幫助cache初始化的值,一般情況下可以忽略這個(gè)配置項(xiàng),默認(rèn)值是200000。

  • inc_doc_limit 在有增量的情況下,如果某個(gè)query命中了Searcher Cache,那么需要將cache中結(jié)果和在增量部分(相對(duì)于該query上一次進(jìn)cache時(shí)增量的doc)中查詢(xún)的結(jié)果進(jìn)行合并后返回給用戶(hù),當(dāng)從增量部分查到的結(jié)果數(shù)大于 inc_doc_limit 時(shí),則將該query在cache中的結(jié)果主動(dòng)失效,下次查詢(xún)?cè)搎uery時(shí)重新填充cache。默認(rèn)值是1000。

  • inc_deletion_percent 增量的刪除會(huì)導(dǎo)致原本在cache中的部分結(jié)果可能已經(jīng)失效(被刪除或更新),當(dāng)失效的doc占cache中緩存的結(jié)果總數(shù)的百分比超過(guò) inc_deletion_percent% 時(shí),同樣需要將這個(gè)cache結(jié)果主動(dòng)失效,而且當(dāng)前這次查詢(xún)會(huì)被當(dāng)成是一次cache miss,從而重新查詢(xún)當(dāng)前query并填充cache。默認(rèn)值是1。

  • latency_limit Searcher Cache只會(huì)緩存 (rank_latency + rerank_latency) > latency_limit 的query的查詢(xún)結(jié)果,因?yàn)楸籧ache住的query的latency越大,cache對(duì)性能提升的效果越明顯。單位時(shí)ms,默認(rèn)值是1ms。

  • min_allowed_cache_doc_num和max_allowed_cache_doc_num 分別用于設(shè)置允許進(jìn)入cache的結(jié)果數(shù)的最小值、最大值,以便應(yīng)對(duì)極端場(chǎng)景下走cache的開(kāi)銷(xiāo),默認(rèn)值是0和std::numeric_limits<uint32_t>::max()

service_degradation_config

service_degradation_config是控制服務(wù)降級(jí)的配置,用于在服務(wù)異常或者流量暴增的情況下維護(hù)系統(tǒng)的穩(wěn)定運(yùn)作,示例如下:

"service_degradation_config" : 
 {
     " condition" : {
                      "worker_queue_size_degrade_threshold" : 100,
                      "worker_queue_size_recover_threshold" : 10,
                      "duration" : 1000
                    },
     "request" : {
                      "rank_size" : 5000,
                      "rerank_size" : 200
                 }
 }

配置服務(wù)降級(jí)主要分為兩部分,服務(wù)降級(jí)的檢測(cè)標(biāo)準(zhǔn)以及判斷為服務(wù)降級(jí)后的降級(jí)措施:

  • 檢測(cè)標(biāo)準(zhǔn):檢測(cè)服務(wù)需要降級(jí)的主要依據(jù)是當(dāng)前worker的工作隊(duì)列長(zhǎng)度,當(dāng)長(zhǎng)度持續(xù)duration ms大于worker_queue_size_degrade_threshold時(shí),服務(wù)進(jìn)入降級(jí)狀態(tài),在降級(jí)狀態(tài)下持續(xù)duration ms小于worker_queue_size_recover_threshold時(shí),恢復(fù)為不降級(jí)狀態(tài)。特別的,在降級(jí)狀態(tài)下,如果隊(duì)列長(zhǎng)度小于worker_queue_size_recover_threshold,則該query不降級(jí),這樣在降級(jí)狀態(tài)下隊(duì)列長(zhǎng)度會(huì)在worker_queue_size_recover_threshold上下波動(dòng)。

  • 降級(jí)措施:目前只支持改寫(xiě)請(qǐng)求的rank_size以及rerank_size,即粗排和精排的條數(shù),通過(guò)減小計(jì)算規(guī)模來(lái)降低請(qǐng)求的消耗時(shí)間,在rank_service架構(gòu)下只有rank_size 生效。

multi_call_config

ha3 3.2.0之前的版本參考如下流控配置,從3.2.0開(kāi)始流控邏輯做了較大重構(gòu),字段由"anomaly_process_config"改為"multi_call_config",例如:

"multi_call_config" : {
    "probe_percent" : 0.3,
    "latency_upper_limit_percent" : 0.4,
    "begin_degrade_latency" : 100,
    "full_degrade_latency" : 150,
    "et_trigger_percent" : 0.8,
    "et_wait_time_factor" : 5,
    "et_min_wait_time" : 30,
    "retry_trigger_percent" : 0.6,
    "retry_wait_time_factor" : 3
}

具體配置選項(xiàng)參考gig文檔。老版本配置說(shuō)明如下: 服務(wù)穩(wěn)定性可以在每個(gè)cluster里單獨(dú)配置,具體的配置項(xiàng)如下:

"anomaly_process_config" : 
   {
       "flowControlEnabled" : true,
       "earlyTerminationEnabled" : true,
       "retryQueryEnabled" : true,
       "flowControl" : {
           "sample_interval" : 100,
           "min_sample_count" : 10,
           "heavy_load_arpc_error_ratio" : 0.5,
           "light_load_arpc_error_ratio" : 0,
           "max_flow_redirect" : 1,
           "queue_size_threshold" : 5,
           "flow_control_categories" : [1,2,3,4,5,6,7,8,9,10,11]
       },
       "detection" : {
           "early_termination_trigger_result_percent" : 0.8,
           "early_termination_wait_time_factor" : 3,
           "retry_query_trigger_result_percent" : 0.8,
           "retry_query_wait_time_factor" : 1
       }
   }

  • searcher流量控制功能開(kāi)關(guān)

  • 查詢(xún)提前結(jié)束功能開(kāi)關(guān)

  • 重查功能開(kāi)關(guān)

  • 流量控制的相關(guān)配置,目前其也包含searcher健康狀態(tài)監(jiān)控的相關(guān)參數(shù)

  • 健康狀態(tài)的更新間隔,單位ms

  • 最少需要sample查詢(xún)個(gè)數(shù)。這個(gè)參數(shù)主要判斷ARPC錯(cuò)誤的比例,如果一個(gè)健康狀態(tài)更新間隔現(xiàn),查詢(xún)數(shù)量不夠,則繼續(xù)累積。

  • 當(dāng)ARPC查詢(xún)錯(cuò)誤個(gè)數(shù)大于這個(gè)比例時(shí),searcher的健康狀態(tài)需要降級(jí)。

  • 當(dāng)ARPC查詢(xún)錯(cuò)誤個(gè)數(shù)小于這個(gè)比例時(shí),searcher的健康狀態(tài)需要升級(jí)。

  • 最多找備份searcher的個(gè)數(shù)。當(dāng)一列中的一個(gè)searcher處理不健康時(shí),需要把分配給這個(gè)searcher的部分流量導(dǎo)到其它同列searcher中。這個(gè)參數(shù)決定當(dāng)找多個(gè)同列searcher的結(jié)點(diǎn)仍沒(méi)有找到健康結(jié)點(diǎn)時(shí),則丟失流量

  • queue_size是每次查詢(xún)從searcher機(jī)器上帶回來(lái)searcher的隊(duì)列長(zhǎng)度。根據(jù)這個(gè)隊(duì)列長(zhǎng)度,QRS或PROXY會(huì)更新searcher的健康狀態(tài)。這個(gè)值主要用于配置searcher健康狀態(tài)更改需要滿(mǎn)足條件。具體的算法如下:searcher的健康狀態(tài)共為11級(jí),每一級(jí)健康狀態(tài)的更新條件是不一樣的。例如示例中queue_size_threshold為5,其健康狀態(tài)更新的隊(duì)列長(zhǎng)度對(duì)應(yīng)的數(shù)組為q=[5,10,15,20,25,30,35,40,45,50,55], searcher健康度降級(jí):queue_size >= q[10-H_c+1], searcher健康度升級(jí):queue_size < q[10-H_c],其中H_c是searcher當(dāng)前處于健康值0<= H_c <= 10

  • 健康狀態(tài)更新的隊(duì)列長(zhǎng)度對(duì)應(yīng)數(shù)組的高級(jí)控制配置項(xiàng),<10>是一個(gè)簡(jiǎn)單線性展開(kāi)的配置方法。當(dāng)配置這個(gè)數(shù)組時(shí),將覆蓋<10>

  • 配置觸發(fā)查詢(xún)提前結(jié)束檢測(cè)應(yīng)滿(mǎn)足的結(jié)果個(gè)數(shù)比例,例如查10列的內(nèi)容,如果8列結(jié)果已經(jīng)返回,則開(kāi)始觸發(fā)查詢(xún)提前結(jié)果檢測(cè)。

  • 查詢(xún)提前結(jié)束應(yīng)等待的時(shí)間。假設(shè)查詢(xún)提前結(jié)束檢測(cè)被觸發(fā)時(shí)使用的時(shí)間為T(mén),如果再等待3t的時(shí)間,結(jié)果還不完整,則這時(shí)會(huì)提前結(jié)束查詢(xún)處理并返回結(jié)果。如果在等待的期間結(jié)果已經(jīng)完整,則結(jié)果正常返回。t為第一個(gè)正常返回結(jié)果所需的時(shí)間。

  • 配置觸發(fā)查詢(xún)重查檢測(cè)應(yīng)滿(mǎn)足的結(jié)果個(gè)數(shù)比例,例如查10列的內(nèi)容,如果8列結(jié)果已經(jīng)返回,則開(kāi)始觸發(fā)重查檢測(cè)。

  • 配置查詢(xún)重查應(yīng)等待的時(shí)間。假設(shè)查詢(xún)重查檢測(cè)被觸發(fā)時(shí)使用的時(shí)間為T(mén),如果再等待t的時(shí)間,結(jié)果還不完整,則這時(shí)會(huì)向同列另一個(gè)searcher發(fā)送查詢(xún)請(qǐng)求。如果在等待的期間結(jié)果已經(jīng)完整,則結(jié)果正常返回。t為第一個(gè)正常返回結(jié)果所需的時(shí)間。

cava_config

ha3 高級(jí)語(yǔ)言腳本相關(guān)配置, ha3 支持用戶(hù)通過(guò)cava腳本寫(xiě)插件,下面是相關(guān)配置

"cava_config" : {
        "enable" : true, (1)
        "ha3_cava_conf" : "../binary/usr/local/etc/cava/config/cava_config.json", (2)
        "lib_path" : "cava/lib",(3)
        "source_path" : "cava/src",(4)
        "code_cache_path" : "cava/cache",(5)
  "pool_trunk_size" : 10, //MB (6)
  "pool_recycle_size_limit" : 20, //MB (7)
  "alloc_size_limit" : 40, //MB  (8)
  "init_size_limit" : 1024, //MB (9)
  "module_cache_size" : 100000   (10)
    }

  • (1)是否啟用cava功能

  • (2)cava語(yǔ)言配置

  • (3)平臺(tái)方提供的公共庫(kù),upc時(shí)編譯生效

  • (4)業(yè)務(wù)方提供的自定義插件,可以復(fù)用平臺(tái)方提供的公共庫(kù),upc時(shí)編譯生效

  • (5)提前編譯進(jìn)code cache的插件代碼,不會(huì)被cache淘汰,并且不能被別人引用

  • (6)cava內(nèi)存池trunk_size,默認(rèn)值10MB,無(wú)需用戶(hù)修改

  • (7)cava內(nèi)存池recycle_size,默認(rèn)值20MB,無(wú)需用戶(hù)修改

  • (8)cava query級(jí)別能分配的最大內(nèi)存

  • (9)cava 整體最多可以使用多大內(nèi)存,不包括上述query級(jí)別的內(nèi)存

  • (10)最多緩存query里面?zhèn)鬟fsource code的個(gè)數(shù),超過(guò)則開(kāi)始LRU淘汰

關(guān)于cava 的詳細(xì)介紹后續(xù)會(huì)有單獨(dú)章節(jié)來(lái)介紹

turing_options_config

turing_options_config可以覆蓋圖化相關(guān)的配置例如

"turing_options_config":{ "graph_config_path": “ssss”, // 圖的路徑 "dependency_table":[“a”,"b"] //依賴(lài)表等 }