www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 架構師社區(qū)
[導讀]重構,著實是一件讓程序員興奮的事情。今年年初,我們團隊完成了一個復雜項目的重構工作,它屬于廣告系統(tǒng)最核心的引擎部分,大概有300多個文件,3萬多行代碼。 從技術方案設計到最終全量上線僅僅花了1個月左右的時間,而且沒有產(chǎn)生事故。 這應該是我8年程序生涯中,經(jīng)歷過的最大型的同時最成功的一次重構項目:速度足夠快、計劃比較周全、質(zhì)量過關。

經(jīng)典著作《重構》這本書中有這么一段話:

一開始,我所做的重構都停留在細枝末節(jié)上。隨著代碼趨向簡潔,我發(fā)現(xiàn)自己可以看到一些設計層面的東西了,這些是我以前理解不到的,如果沒有重構,我達不到這種高度。
重構,著實是一件讓程序員興奮的事情。
今年年初,我們團隊完成了一個復雜項目的重構工作,它屬于廣告系統(tǒng)最核心的引擎部分,大概有 300 多個文件,3 萬多行代碼。
從技術方案設計到最終全量上線僅僅花了 1 個月左右的時間,而且沒有產(chǎn)生事故。
這應該是我 8 年程序生涯中,經(jīng)歷過的最大型的同時最成功的一次重構項目:速度足夠快、計劃比較周全、質(zhì)量過關。

01 先聊聊這個系統(tǒng)的歷史包袱

我們的廣告引擎在這次重構前大概經(jīng)歷了1年半時間的迭代,初期針對的是搜索場景,業(yè)務單一,流程清晰。

2019年開始,公司的廣告業(yè)務開始快速擴張,收入幾乎是指數(shù)級的增長。在這個過程中,我們的廣告引擎面臨了兩個挑戰(zhàn):

1、業(yè)務場景開始變得復雜,除了搜索廣告,還需要支持信息流推薦以及相似推薦場景。

2、廣告流量開始快速增加,除了滿足功能性需求,還需要兼顧好性能。

經(jīng)過梳理,整個引擎有大部分邏輯是可以公用的,因此我們定義了一個主體框架,同時將可擴展部分進行了抽象。這樣,各個場景能夠根據(jù)自身業(yè)務的特殊性實現(xiàn)某些公共接口即可。另外,從性能角度考慮,我們犧牲了一些代碼可讀性,把某些邏輯并行化了。

隨著業(yè)務的發(fā)展,搜索場景開始進入快速迭代期,新增策略越來越多,我們的主體框架也是在這個時候逐漸變得不靈活。

如果動主體框架,搜索以外的場景都需要跟著重構。 在業(yè)務的快速發(fā)展期,工期根本不允許,因此我們只能在現(xiàn)有框架上進行補丁式的開發(fā)。 這樣,帶來了兩個很明顯的問題:

1、為了兼容搜索的特殊邏輯,我們需要在其他場景中增加各種 if 判斷來繞過這些邏輯。

2、廣告策略越來越多,累計了幾十個,當框架失去清晰的結構后,有些策略的實現(xiàn)開始變得定制化,缺少層次化的劃分和可插拔式的抽象設計。

在這樣的背景下,隨著改動的積累,代碼開始偏離了設計的初衷,技術債務越來越重。但是,我們又始終找不到合適的時機進行重構。
實戰(zhàn)篇:一個核心系統(tǒng)3萬多行代碼的重構之旅

轉機出現(xiàn)在 2019 年年底,由于廣告業(yè)務的特殊性,流量開始自然走低,另外產(chǎn)品運營團隊將重心放在了第 2 年的工作規(guī)劃上,因此給了我們非常好的窗口期開始此次重構。

我們將工期定成了 1 個月,最終僅比預期晚上線了一天,雖然出現(xiàn)了兩個線上問題,但是在灰度期都及時發(fā)現(xiàn)和修復了,并沒有造成線上事故。

總體來說,這是一次難度頗大并且比較成功的重構項目,下面詳細說一下我從這個項目中吸取到的寶貴經(jīng)驗。

02 重構前,我們做了哪些準備工作?

這次重構的代碼量很大,3 萬多行,而且是廣告系統(tǒng)最核心的引擎部分。啟動前,我們能預期到下面這些困難:

1、業(yè)務側的阻力:廣告是極其以業(yè)務為導向的,本次重構雖然能帶來長期研發(fā)效率的提升,但是沒法直接提升業(yè)務收益,而且開發(fā)周期不會太短,如何才能得到業(yè)務同學的支持?

2、技術側的顧慮 :重構一旦引起線上事故,公司是有處罰制度的,如何讓大家輕裝上陣?同時,重構過程中如果還有非常重的業(yè)務迭代穿插,交付時間沒人敢保證,質(zhì)量也很難得到控制。

實戰(zhàn)篇:一個核心系統(tǒng)3萬多行代碼的重構之旅

針對這兩方的顧慮,我認為下面這幾項工作起到了很關鍵的作用。

▍讓所有人看到痛點

前面提到:隨著業(yè)務迭代,我們廣告引擎的主體框架已經(jīng)變得模糊不清,另外幾十個廣告策略散落在不同的業(yè)務場景中,配置凌亂。

針對這兩個痛點,我們提前1個月啟動了現(xiàn)有業(yè)務的梳理,走讀舊代碼、同時翻閱以前的需求文檔,最終我們將不同場景的核心流程以及廣告策略歸類成了一張清晰的表格。

正是這一張表格,讓技術和產(chǎn)品第一次很清晰地看到了我們引擎部分的全貌,體會到了業(yè)務的復雜度以及當前技術上的瓶頸。

▍明確重構的目標和價值

讓所有人感受到痛點后,我們規(guī)劃了本次重構的兩個核心目標:

1、主體框架的重構:將主流程模塊化,重新定義上下層協(xié)議,確保接口清晰;各層級內(nèi)部也需要做好抽象,具備良好的擴展性。

2、策略靈活可配置:將廣告策略按照業(yè)務意圖進行歸類抽象,策略的執(zhí)行條件動態(tài)可配置,同時策略可任意插拔。

此外,我們將這兩個核心目標完成后可帶來的預期收益進行了細化:

1、技術收益:代碼結構更清晰,更容易理解和維護;可擴展性增強,引擎的開發(fā)效率將進一步提升。

2、業(yè)務收益:策略能做到更細粒度的配置和擴展,對業(yè)務支持更友好;研發(fā)提效后能進一步加快業(yè)務的迭代速度。

將重構的價值同步給大家后,進一步提升了所有人的興奮度,讓大家有了更強的動力參與進來。

▍整體節(jié)奏的把控

整體節(jié)奏的把控也是非常重要的一環(huán),能讓所有人對這件事情有一個時間上的預期。

首先,我們將工期定成了 1 個月,一方面考慮了業(yè)務側可以接受的最大周期,技術上也希望速戰(zhàn)速決;另一方面,春節(jié)即將來臨,我們必須趕在公司封網(wǎng)前上線,同時預留出1-2周的 buffer 以防意外情況發(fā)生。

此外,我們和業(yè)務側達成了一致:重構期間,引擎部分的非緊急需求一律不接,這樣可最大限度地減少并行開發(fā)和代碼沖突,讓團隊精力更集中。

03 執(zhí)行過程中有哪些可分享的經(jīng)驗?

這次重構能夠實施得如此順利,有 4 點我認為很有價值的經(jīng)驗跟大家分享下。

1. 高質(zhì)量的技術設計方案

這一點得益于日常的要求,針對開發(fā)周期超過3天的項目我們都會進行技術方案設計,本次重構當然也不例外。

框架部分的整體架構、模塊之間的協(xié)議設計、以及策略的可擴展性設計是本次技術方案的重點,團隊前后討論了不下3次。

在大方案定稿后,團隊進一步對數(shù)據(jù)庫、接口字段、緩存結構、日志埋點等公共部分進行了細化,因為涉及到多人協(xié)作開發(fā),團隊約定以文檔作為溝通界面,文檔始終保持和代碼同步。

在這樣的高要求下,團隊產(chǎn)出了 5000 多字的技術方案文檔,合計 36 頁,這些為整體質(zhì)量的保障打下了很好的基礎。

2. 預重構出框架性代碼

這一個 PR 非常關鍵,是我們從技術方案落地到代碼最重要的一步。我們把重構后的包結構、模塊劃分、各層之間的API定義、不同廣告策略的抽象進行了梳理,先忽略實現(xiàn)的細節(jié)。

這樣主體代碼基本成型,能很清楚地描繪出我們理想中的框架。然后,我們組織了多次集中代碼審查,最終形成了統(tǒng)一意見。

這一步能很好地避免過早陷入實現(xiàn)細節(jié),導致主體框架關注不夠、代碼不穩(wěn)固,后期再返工反而會拖累效率。

3. 頻繁溝通和成對代碼 Review 機制

進入到細節(jié)實現(xiàn)階段后,很重要的一點是:對現(xiàn)有邏輯的理解。引擎代碼經(jīng)過一年半的迭代,歷史上被很多人開發(fā)過,但是本次只有 3 個同學參與重構。

整個過程中,我們遇到任何代碼邏輯不明確的地方,都是反復溝通和求證,不主觀猜想,這一份謹慎其實很關鍵。

另外在代碼審查上,我們按模塊分配了對這塊業(yè)務比較熟悉的同學來負責,成對搭配,機制靈活。

4. 有效的測試方案

重構未動,測試先行。這個原則是《重構》一書中重點強調(diào)的,也是我們本次技術方案討論的重點,我這里單獨拎出來詳細展開下。

首先,我們前期便約定好:不動任何老代碼,完全建新的 package 進行重構。這樣方便比對重構前后的結果,同時進行線上灰度實驗。

測試方案上,以下 4 點值得借鑒:

1、端到端測試:本次重構不涉及功能性的調(diào)整,因此外層API的行為是不會有任何變化的,這樣端到端的測試方法最為有效,這個是研發(fā)和QA測試最主要的手段。

2、冒煙測試:QA同學提供冒煙 Case,由研發(fā)同學進行冒煙,研發(fā)提測前必須保證所有冒煙 Case 執(zhí)行通過。這一點在大部分互聯(lián)網(wǎng)公司都不常見,但是對于大型項目絕對有效。

3、沙箱環(huán)境雙流程驗證:前面提到我們重構前后的代碼都保留了,因此可以通過腳本抓取線上環(huán)境的入?yún)⒆鳛閏ase,然后用自動化的方式對 API 的返回字段進行逐一比對。

4、線上環(huán)境灰度實驗:灰度對于重構非常重要,我們利用已有的ABTest平臺,逐步放開灰度流量,從5%、到10%、到30%、最后到100%,制定了很謹慎的放量節(jié)奏,然后通過日志以及業(yè)務指標監(jiān)控進行驗證。

寫在最后


回顧整個重構的過程,總結成下面 7 個關鍵點:

1、把握好重構時機
2、前期梳理很重要,先找到痛點
3、明確出目標和價值,讓大家興奮起來
4、不宜長線作戰(zhàn),不宜和業(yè)務并行
5、需要高質(zhì)量的技術方案
6、重構未動,測試先行

7、小心求證,為每行代碼負責

當然,最關鍵的因素還是人,大型項目重構極其考驗團隊的協(xié)作能力,如果每個人都很靠譜,重構就已經(jīng)成功了一半。

特別推薦一個分享架構+算法的優(yōu)質(zhì)內(nèi)容,還沒關注的小伙伴,可以長按關注一下:

實戰(zhàn)篇:一個核心系統(tǒng)3萬多行代碼的重構之旅

實戰(zhàn)篇:一個核心系統(tǒng)3萬多行代碼的重構之旅

實戰(zhàn)篇:一個核心系統(tǒng)3萬多行代碼的重構之旅

長按訂閱更多精彩▼

實戰(zhàn)篇:一個核心系統(tǒng)3萬多行代碼的重構之旅

如有收獲,點個在看,誠摯感謝

免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉