中臺已死,平臺長青
共 11258字,需瀏覽 23分鐘
·
2024-08-03 10:01
??目錄
1 背景
2 客戶第一
3 性能和成本
4 功能設計
5 研發(fā)效率
6 運營效率
7 技術文檔
8 發(fā)展的思考
01
02
-
如果對系統(tǒng)實現(xiàn)不熟悉的外包同學能解決問題,那么文檔也能解決,如果文檔能解決,那么我們就不需要提供咨詢支持的外包同學。 -
如果文檔解決不了,那么咨詢外包同學也很難解決,他會成為任務分包的角色,這時候任務還是會落到背后的開發(fā)同學身上,此時必然打擾到開發(fā)同學,打亂原定的工作計劃,且會讓客戶覺得 helper 并不專業(yè)。 -
服務告警和運維處理涉及系統(tǒng)穩(wěn)定性,對值班同學和技術產(chǎn)品的自動運維能力要求較高,交給外包有一定風險。
-
每個人都有機會熟悉全系統(tǒng)所有模塊。 -
對客戶價值有更直接的認識。 -
促進用戶手冊建設。 -
更容易對不合理的設計提出挑戰(zhàn)。
03
-
架構優(yōu)化,譬如:二級和三級扇出架構、微服務合并。 -
新技術應用,譬如:新 rpc 框架、協(xié)程、SIMD 并行指令。 -
空間換時間,譬如:業(yè)務緩存、計算緩存、jemalloc 內(nèi)存池。 -
數(shù)據(jù)結構優(yōu)化,譬如:用塊鏈代替稀疏位圖、貼合 cacheline 的內(nèi)存結構。 -
策略簡化,譬如:多次查詢改成單次,再通過更好的檢索策略補充效果。 -
實現(xiàn)細節(jié),譬如:去掉拷貝、去掉鎖、復用對象。
-
設備選型: -
高內(nèi)存高計算型的服務,使用 AMD 設備,并且不開 NUMA。 -
無須實時訪問磁盤的服務,選用非 SSD 磁盤。 -
配額最小化:CPU/磁盤/內(nèi)存,全部最小化配置。 -
自動化調(diào)度:通過 123 平臺(注:內(nèi)部容器服務管理平臺)的調(diào)度配置,配置自動縮容閾值。 -
云原生看板建設 CPU 使用率看板,查看 CPU 變化趨勢。 -
利用率監(jiān)控 CPU 峰值利用率低于 50% 的發(fā)出告警。 -
專人檢查 CPU 使用率、使用量、流量變化,最晚 T+1 和業(yè)務溝通處理。 -
對 CPU 有毛刺的離線計算業(yè)務做針對性治理,和業(yè)務團隊溝通將流量打散。
04
-
采用類 json 的 DSL 語法,既滿足通過任何檢索規(guī)則組合實現(xiàn)復雜檢索策略的需求,后來也為使用 ES 的業(yè)務遷移到 XSearch 提供了便利。
-
風格一致的代碼、文檔可以提高閱讀效率,對于技術產(chǎn)品的功能設計也一樣有價值,產(chǎn)品在不斷的增加功能,一致性的設計會讓一個技術產(chǎn)品顯得越來越強(而不是增加多個需要重新學習的技術產(chǎn)品),在增加向量召回功能的時候,我們把向量當作一種和倒排、正排、枚舉并列的一種索引能力,復用原來 XSearch 的全套流程,既減少開發(fā)量,使用上也不突兀。
-
通用檢索能力,大多數(shù)的客戶不需要了解分詞、query 理解、檢索語句組裝,所以我們將檢索策略做成可視化配置,只需要在界面上做選擇,就能獲得一個不錯的召回能力。 -
個性化能力,如果通用檢索無法滿足,需要定制化怎么辦?我們通過 DSL 語法、排序插件、腳本插件提供廣闊的個性能定制。 -
debug 能力,業(yè)務在使用檢索引擎時,用于 debug 的時間往往不比寫一段召回代碼的時間短,所以 debug 能力的建設一樣非常重要。
-
想要規(guī)模化的產(chǎn)品,必然是通用的。而業(yè)務產(chǎn)品又可能提出來定制需求,我們通過配置化、插件系統(tǒng)解決大多數(shù)定制問題,譬如:要搜索標題還是搜索標簽、要用默認排序還是自定義排序等等。但部分問題沒辦法完美解決,會付出代價,譬如:架構設計和協(xié)議設計。 -
代價-架構設計:當只服務一個業(yè)務的時候,系統(tǒng)的變數(shù)少,不需要考慮太多插件擴展,架構簡單服務耗時短、開發(fā)周期短。 -
代價-協(xié)議設計:不用考慮多業(yè)務有不同字段的需求,當有新增字段時,直接追加新字段即可。而考慮到多業(yè)務時,要么是犧牲性能,定義 map 類型來應對不同業(yè)務的差異化字段,要么是使用 oneof,把不同業(yè)務的個性化字段拆分到不同 message 中,不管那種方式,都會給協(xié)議增加復雜度,對性能有影響。
-
單個業(yè)務下的技術產(chǎn)品,選擇一般是單一明確的,追求性能或者追求易用,而平臺化的技術產(chǎn)品則需要考慮提供多種選擇。譬如:接口協(xié)議的設計上,正排索引值是返回序列化后的字符串,還是返回原始數(shù)字,追求性能的用戶希望返回原始數(shù)字,追求易用性的用戶希望返回字符串直接用來展示。
-
模擬查詢。 -
解釋查詢。 -
文檔查詢。 -
索引信息查看。 -
全鏈路 trace。
05
-
MR 流水線。 -
主干提交流水線。
-
分支和 tag 命名規(guī)范,提升可讀。 -
主干代碼只能通過 MR 合入。 -
MR 必須經(jīng)過有經(jīng)驗開發(fā)者、綠帶認證者評審。
-
開發(fā)者必須獲得開發(fā)者資質,包括:編碼規(guī)范考試、代碼安全考試。 -
增量代碼單測覆蓋率 > 85%。
-
需求扭轉流程管理。 -
基于 VSCode 或者 Vim 的代碼格式化工具。 -
測試、灰度、全量發(fā)布工具。
-
公司文化,受益于這幾年公司對工程素養(yǎng)的重視,大量的宣導、強制課程學習、內(nèi)部論壇討論,團隊全員受過 CR 的基礎培訓和引導。我們也通過小團隊內(nèi)的討論和制度的強制落實,讓每個人會意識到: -
代碼可以寫得更好; -
CR 活動需要花費不少時間; -
CR 是完成需求過程中的必要環(huán)節(jié)。 -
團隊制度,設計一套代碼評審流程,并由核心同學帶頭落實。 -
團隊成員,借力公司課程、職級晉升的代碼質量要求,讓多數(shù)人有意愿、有能力、有時間執(zhí)行代碼評審。 -
評審工具,通過流水線、工蜂、研效看板,確保代碼評審過程可高效執(zhí)行。
06
-
一站式運營系統(tǒng),用戶使用 XSearch 的所有的操作都在運營系統(tǒng)中完成,包括數(shù)據(jù)接入、檢索策略、debug;管理員操作的審批、部署也都在運營系統(tǒng)中完成; -
用戶手冊,減少人工咨詢; -
helper 賬號,人工咨詢和業(yè)務接入審批等; -
值班制度,全職投入,處理告警、用戶咨詢、云原生治理、業(yè)務審核等工作; -
群溝通渠道,每個業(yè)務一個溝通群;
07
08
評論
圖片
表情
