专访小米欧阳辰:深度揭秘小米广告平台的构建、底层模块和坑
專訪小米歐陽辰:深度揭秘小米廣告平臺的構建、底層模塊和坑
專訪小米架構歐陽辰架構師廣告平臺數據庫 width="22" height="16" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2015-11-23%2F2826303&type=3&count=&appkey=&title=%E6%97%A5%E5%89%8D%EF%BC%8C%E7%AC%94%E8%80%85%E9%87%87%E8%AE%BF%E4%BA%86%E5%B0%8F%E7%B1%B3%E7%A0%94%E5%8F%91%E6%9E%B6%E6%9E%84%E5%B8%88%E6%AC%A7%E9%98%B3%E8%BE%B0%EF%BC%8C%E8%B4%9F%E8%B4%A3%E5%B0%8F%E7%B1%B3%E5%B9%BF%E5%91%8A%E5%B9%B3%E5%8F%B0%E7%9A%84%E6%9E%B6%E6%9E%84%E7%A0%94%E5%8F%91%EF%BC%8C%E5%9C%A8%E6%9C%AC%E6%96%87%E4%B8%BB%E8%A6%81%E5%88%86%E4%BA%AB%E4%BA%86%E5%B0%8F%E7%B1%B3%E5%B9%BF%E5%91%8A%E5%B9%B3%E5%8F%B0%E7%9A%84%E6%9E%B6%E6%9E%84%E6%80%9D%E8%B7%AF%E3%80%81%E6%9E%84%E5%BB%BA%E8%BF%87%E7%A8%8B%E3%80%81%E5%BA%95%E5%B1%82%E6%A8%A1%E5%9D%97%E3%80%81%E9%81%87%E5%88%B0%E7%9A%84%E5%9D%91%E3%80%81%E6%9C%AA%E6%9D%A5%E7%9A%84%E6%8C%91%E6%88%98%E7%AD%89%EF%BC%8C%E4%BB%A5%E5%8F%8A%E8%B0%88%E4%BA%86%E5%AF%B9%E6%9E%B6%E6%9E%84%E7%9A%84%E7%90%86%E8%A7%A3%E5%92%8C%E6%9E%B6%E6%9E%84%E5%B8%88%E6%88%90%E9%95%BF%E7%9A%84%E5%BF%83%E5%BE%97%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1448284630775" frameborder="0" scrolling="no" allowtransparency="true">摘要:日前,筆者采訪了小米研發架構師歐陽辰,負責小米廣告平臺的架構研發,在本文主要分享了小米廣告平臺的架構思路、構建過程、底層模塊、遇到的坑、未來的挑戰等,以及談了對架構的理解和架構師成長的心得。
【編者按】互聯網從誕生到現在,網站的規模不斷擴大,存儲和處理的數據量也遠遠超出了人們的想象,又隨著對信息實時性、多媒體需求大幅增長的現象,互聯網架構面臨越來越大的挑戰。CSDN致力于解決這一問題,在剛剛結束的 SDCC 2015中國軟件開發者大會上,特舉辦了架構專場( 上午報報道、 下午報道),以及《程序員》電子刊10月B開設了 架構專題。在接下來也將繼續深耕架構師、服務于開發者,推出更多的大牛訪談、知名互聯網公司架構實踐、技術公開課等,敬請期待。
日前,筆者采訪了小米研發架構師歐陽辰,負責小米廣告平臺的架構研發,在本文主要分享了小米廣告平臺的架構思路、構建過程、底層模塊、遇到的坑、未來的挑戰等,以及談了對架構的理解和架構師成長的心得。
歐陽辰,畢業于北京大學計算機系,獲得學士和碩士學歷,擁有超過15年的軟件開發和設計經驗。之前曾為微軟公司工作10年,擔任高級軟件開發主管,領導團隊參與微軟搜索引擎和廣告平臺的研發 工作,曾負責微軟上下文廣告的全部研發工作,包括系統架構和數據算法。之前為甲骨文工作3年,為甲骨文中國的第一批研發人員,從事甲骨文數據庫和應用服務 器的研發工作。
他熱愛軟件開發行業,特別對于大規模軟件的架構設計,具有豐富的理論知識和實踐經驗。
CSDN:請簡單介紹下您和目前的工作,以及總結下您的職業生涯。
歐陽:我是歐陽辰,目前就職小米公司,擔任架構師和研發主管,主要負責廣告平臺系統架構,廣告交易系統研發和營銷數據平臺。之前在微軟工作工作10年,帶領團隊從事互聯網廣告和搜索引擎的研發工作,包括負責微軟移動上下文廣告系統和數據算法,必應搜索引擎的Index?Serve的性能提升,最早在甲骨文公司從事數據庫的研發工作。
CSDN:你是如何走上技術這條路的?以及15年軟件開發和設計經驗的你是如何保持對技術的熱情?
歐陽:從小我就對工程技術比較有興趣,后來在北大學的也是計算機軟件專業,自己也很喜歡,不斷的學習新技術,不斷的解決問題,把產品打磨好,實現業務目標,這可能就是一種簡單的工匠精神吧。享受解決技術問題帶來的喜悅感,學會努力獲得更多人的支持,堅持不斷的學習新技術,提升自己的認知,“好學近乎知,力行近乎仁”。如果是內心熱愛,保持對技術的熱情就不成大問題,但有的時候也會迷茫,這時候設定好自己發展的目標(短期和長期),珍惜當下,往往能夠幫助你更好的堅持和努力,不忘初心,方得始終!
CSDN:可否介紹一下目前小米廣告平臺的技術團隊規模和結構是怎樣的?
歐陽:小米廣告平臺是小米移動互聯網廣告的技術平臺。廣告的媒體包括小米應用商店、新聞資訊、視頻、瀏覽器、小米電視等眾多優質資源,也包括一些知名第三方應用;廣告形式包括應用分發、信息流、電商廣告、開屏、視頻前貼、小米主題等多種形式。
研發團隊大約幾十人人,人數還在持續增長,不斷有廣告行業技術專家加入我們。研發部門按業務目標劃分,可分為媒體方、系統架構、策略算法、廣告主服務和數據平臺。媒體方組負責媒體變現最大化,系統組負責架構演化和可靠性,策略算法組負責提升點擊率、相關性等,廣告主服務負責提升廣告主滿意度和ROI,數據平臺提供數據洞察和營銷數據平臺DMP。
CSDN:能簡單說說小米廣告平臺目前支持的業務的數據情況么?
歐陽:小米已售出超過1.5億的智能設備,日活躍用戶超過億部,小米電視和盒子銷售也近千萬,小米手環和各種智能設備也是行業領先。在這個大背景下,小米廣告也在通過“取勢、明道、優術”的方式快速增長,聚焦在移動廣告方向,最大化媒體的變現能力和廣告主的滿意度。例如,我們的應用商店媒體,最高日下載應用超過8000萬,同時應用商店分發渠道也是開發者推廣的首選高質渠道。另外,小米內置的新聞資訊產品日活躍也近千萬,信息流廣告也是十分受到歡迎的廣告形式。
CSDN:能不能詳細介紹一下這個平臺架構的架構設計思路?
歐陽:世界上本來沒有思路,踩坑踩多了,也便成了思路。廣告平臺的設計思路是從幾個方面出發:
- 首先是對于目前業務和未來業務的深刻理解,我一直堅信架構是為現在和未來的業務服務的,減少業務變化而引入的成本,在設計理念上我們更愿意按照業務分解系統,特別是將需求多變的業務模塊隔離出來,減少耦合。
- 其次,架構設計需要和團隊的組織方式是一致的,遵守康威法則,例如在我們平臺建設初期,各個業務小組都飛速發展,放馬狂飆,那么架構需要提供足夠的靈活性。
- 另外,廣告系統對于可靠性要求非常高,不僅僅涉及到用戶體驗,也涉及到業務收入,因此系統的預警,報警和錯誤排除都需要大力投入。廣告系統也有業務驅動的特點,不同的廣告業務可能需要不同的系統架構來支持,因此架構的擴展性和可演化性也是非常重要的,需要支持業務的小步快跑,敏捷式迭代。
CSDN:可否詳細介紹一下這個平臺架構的構建過程?
歐陽:平臺架構的過程實際上是一個演化的過程,每一步演化都是為業務服務的,我自己總結一下可以分為四個階段,分別是”加、減、乘、除”。
- 第一個階段是加法,不斷的上線新業務,整個系統不斷復雜化,結果造成各個業務之間耦合很厲害,在后期,每一次設計涉及的影響都很大。
- 第二個階段是減法,為了解決第一階段的問題,系統的解耦成是一項最重要的工作,將各個模塊獨立出來,服務化,減少各個模塊之間的不必要的聯系。
- 第三個階段是“乘法”,這一階段的業務發展脈路較為穩定,各個模塊分解的比較合適,各個模塊(服務)都可以利用各種技術,高速提高服務質量,例如數據處理方面,通過流式處理,大大提高及時性;算法模塊在解耦后,也大大提高了算法上線的速度和種類;架構服務化后,系統的容量和可靠性也大大提高。
- 最后一個階段是“除法”,整個系統變得非常大且復雜,開發人員也有近5倍的增長,部署的機器也有近10倍的增長,服務模塊數量也超過20個,這時候架構的調整涉及到一些抽象,按照業務分為服務群,對于離線的數據流也進行了大規模的優化,整合了一些分散的小模塊,使得整個系統更加簡單。
值得分享的經驗是,架構師的工作不是創建一個靜態的,美麗的架構藍圖,更多的工作是在成本、質量、收益和速度中找到長期技術投入的平衡,其目標是支持業務的快速發展。
CSDN:小米廣告平臺具體模塊的底層如何實現的以及它們的作用是怎樣的?
歐陽:小米廣告平臺的一些重要模塊包括廣告索引服務,點擊率預測和排序,數據平臺模塊等。
- 廣告索引服務是將廣告主投放的廣告進行索引,以方便查找,為了提高檢索效率,自己編寫了倒排表功能部分,部分索引也使用了Lucene作為引擎,這一部分的挑戰主要是廣告數據的更新需要實時同步到索引中去,通過索引的更新或者新老索引的切換來完成,并且保持數據的一致性。
- 點擊率預測和排序服務主要是對于每一次廣告請求,把候選的廣告列表進行點擊預測,支持各種算法的快速上線和實驗,隨著算法種類和特征數據的增加,計算和內存變得越來越緊張,水平擴展是非常重要的工作,另外就是特征數據的實時性,從最開始的一天,幾個小時到現在的幾分鐘。
- 數據平臺模塊是廣告系統中非常關鍵的模塊,其中包括反欺詐監測、商業智能和報表系統,主要目標是幫助廣告主算好每一分錢,并且提供足夠的洞察,幫助廣告主更好的規劃預算和效果監測,其中還涉及到精準營銷的數據平臺DMP。
CSDN:開發中遇到了那些坑,又是如何解決的?
歐陽:開發過程中踩坑是不可避免的,關鍵是能從踩坑中吸取教訓,不要第二次踩到同一個坑。架構設計上,我個人收獲到很重要一點就是:架構及演化一定要堅持為業務服務。
- 舉一個大坑的例子,一年前剛剛接觸這個平臺時,當時感覺平臺的層次不清楚,各業務之間的重復性很高,很多代碼不忍直視,我的第一個直覺就是需要一個周全的架構,統一化的廣告檢索,可擴展的廣告檢索元語言等,基于這些想法和過去多個廣告平臺的經驗,設計了一個廣告演化的目標架構(所謂藍圖),有些模塊沿著這個思路開始了重構工作,有些模塊并沒有重構,沿著老路發展,半年以后,我們再回首當時的決定。當時重構的模塊是業務相對穩定的模塊,后期的業務并沒有從其中得到太多直接好處,雖然代碼很整齊,設計很規范,但是投入和產出比很低; 對于沒有重構的一些模塊,在各個新業務的沖擊,打磨和碰撞下,不斷的進行自然演化,反而成為最適宜業務變化的模塊,回想過來,其中的很多設計都不是當初能夠規劃出來的,因為很多新業務都未到位。
- 再聊一個技術的坑,也不一定算坑,關于MySQL的,在項目初期使用MySQL一直很順利,讀訪問量大了,就采用、讀寫分離;寫訪問量大了,就進行垂直拆庫(分表);數據量繼續增長,然后進行水平拆庫、水平擴展、引入代理層;然后數據量又長大了,不得不將部分數據移植到HBase里去。整個過程中,我們在MySQL折騰了太多的時間,每一次數據庫改進都需要花不少人力,而且容易出錯,每次的工作成果只能維持很短的一段時間,總結出一個簡單道理, 如果有機會再重新做一次,我會更早的擁抱NoSQL的解決方案,避免在MySQL上很多無謂的投入 。
CSDN:目前,面對的最大挑戰是什么?
歐陽:目前工作的挑戰有兩方面:首先是支持業務的多樣性和速度,系統需要十分靈活的架構快速支持各種媒體,各種廣告形式和對接不同系統;其次,如何更好的發揮數據的價值,幫助廣告受眾提升用戶體驗,幫助廣告主提升ROI,幫助媒體最大化變現,這些工作都在積極的開展,技術和業務的挑戰都很大。
CSDN:最后,能否對那些立志于成為架構師的工程師說點什么?
歐陽:首先每一個架構師都應該是一個好程序員,好好編程,不怕踩坑,多多總結經驗。其次,走進架構師,了解架構師的工作,架構師并非只是用來創作架構藍圖的,平日很多工作,都是通過數據驅動的方法,找到系統的核心問題,并且解決這些疑難雜癥,很多時候需要在成本、速度和質量之間做優于業務的平衡。最后,提升自己的綜合能力,包括知識領域、溝通能力和數據洞察力等,架構師很多時候需要通過數據,說服很多人,以推動項目前進。
我想對這些工程師說,成為架構師的路,是一條很長的路,道長且阻,行則將至,加油。
總結
以上是生活随笔為你收集整理的专访小米欧阳辰:深度揭秘小米广告平台的构建、底层模块和坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网金融2.0 这是最好的时代
- 下一篇: 抛弃PHP,WordPress.com以