日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

58 转转技术总监骆俊武:一个核心系统 3 万多行代码的重构实战篇

發布時間:2025/3/16 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 58 转转技术总监骆俊武:一个核心系统 3 万多行代码的重构实战篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

駱俊武@IT人的職場進階

讀完需要

7

分鐘

速讀僅需 3 分鐘

前亞馬遜工程師,現 58 轉轉技術總監,持續分享個人的成長經歷,希望為你的職場發展帶來些新思路


經典著作《重構》這本書中有這么一段話:

一開始,我所做的重構都停留在細枝末節上。隨著代碼趨向簡潔,我發現自己可以看到一些設計層面的東西了,這些是我以前理解不到的,如果沒有重構,我達不到這種高度。

重構,著實是一件讓程序員興奮的事情。

今年年初,我們團隊完成了一個復雜項目的重構工作,它屬于廣告系統最核心的引擎部分,大概有 300 多個文件,3 萬多行代碼。從技術方案設計到最終全量上線僅僅花了 1 個月左右的時間,而且沒有產生事故。這應該是我 8 年程序生涯中,經歷過的最大型的同時最成功的一次重構項目:速度足夠快、計劃比較周全、質量過關。

1

? ?

先聊聊這個系統的歷史包袱

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

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

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

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

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

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

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

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

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

  • 在這樣的背景下,隨著改動的積累,代碼開始偏離了設計的初衷,技術債務越來越重。但是,我們又始終找不到合適的時機進行重構。

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

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

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

    2

    ? ?

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

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

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

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

  • 針對這兩方的顧慮,我認為下面這幾項工作起到了很關鍵的作用。讓所有人看到痛點

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

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

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

    明確重構的目標和價值

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

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

  • 策略靈活可配置:將廣告策略按照業務意圖進行歸類抽象,策略的執行條件動態可配置,同時策略可任意插拔。

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

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

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

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

    整體節奏的把控

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

    首先,我們將工期定成了 1 個月,一方面考慮了業務側可以接受的最大周期,技術上也希望速戰速決;

    另一方面,春節即將來臨,我們必須趕在公司封網前上線,同時預留出 1-2 周的 buffer 以防意外情況發生。

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

    3

    ? ?

    執行過程中有哪些可分享的經驗?

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

    3.1

    ? ?

    高質量的技術設計方案

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

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

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

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

    3.2

    ? ?

    預重構出框架性代碼

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

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

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

    3.3

    ? ?

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

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

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

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

    3.4

    ? ?

    有效的測試方案

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

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

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

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

  • 冒煙測試:QA 同學提供冒煙 Case,由研發同學進行冒煙,研發提測前必須保證所有冒煙 Case 執行通過。這一點在大部分互聯網公司都不常見,但是對于大型項目絕對有效。

  • 沙箱環境雙流程驗證:前面提到我們重構前后的代碼都保留了,因此可以通過腳本抓取線上環境的入參作為 case,然后用自動化的方式對 API 的返回字段進行逐一比對。

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

  • 4

    ? ?

    寫在最后

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

  • 把握好重構時機

  • 前期梳理很重要,先找到痛點

  • 明確出目標和價值,讓大家興奮起來

  • 不宜長線作戰,不宜和業務并行

  • 需要高質量的技術方案

  • 重構未動,測試先行

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

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

    - EOF -

    想要加入中生代架構群的小伙伴,請添加群合伙人大白的微信

    申請備注(姓名+公司+技術方向)才能通過哦!

    精彩文章推薦:

    找CTO杜仲:再談中年危機和應對策略


    阿里高級技術專家張建飛:面對復雜業務,if-else coder 如何升級?


    阿里專家常昊:新人如何上手項目管理?


    螞蟻集團沈凋墨:Kubernetes-微內核的分布式操作系統


    快狗打車CTO沈劍:如何利用計劃管理提升團隊效率和產能


    阿里合伙人范禹:常掛在阿里技術人嘴邊的四句土話


    阿里技術專家都鐸:一文搞懂技術債


    Mobvista首席架構師蔡超:工作感悟之失敗與成功,我的8點總結


    奈學教育CEO孫玄:成為一個有情懷的工程師,我的12點思考


    蘇寧智能 BU大數據中心數據治理團隊負責人韋真:數據治理“三字經”,超實用!


    阿里高級技術專家簫逸:如何畫好一張架構圖?


    阿里巴巴閑魚架構負責人王樹彬:萬億交易規模技術架構實踐


    阿里高級技術專家張建飛:應用架構分離業務邏輯和技術細節之道


    ? ?END ? ?? #架構師必備#感謝您的一鍵三連 點分享點點贊點在看

    總結

    以上是生活随笔為你收集整理的58 转转技术总监骆俊武:一个核心系统 3 万多行代码的重构实战篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。