360的開源軟件使用以及開源文化構建經驗

jopen 9年前發布 | 11K 次閱讀 360
 

奇虎360企業安全從2011年到2015年,經歷了幾次服務端架構的變遷。從一開始的軟件自研到最后的全部使用開源軟件,360企業安全部真切體會到了 開源軟件帶來的好處。另外,360也通過各種各樣的方式來構建自己開放、透明、平等的企業文化。InfoQ編輯采訪了奇虎企業安全高級工程師溫銘,聽他分 享了360內部的開源軟件實踐經驗以及開源文化構建經驗。同時,溫銘還將在ArchSummit全球架構師峰會上分享題為《 開源文化對360天擎架構演進的影響 》的演講,敬請關注。

InfoQ:能分階段介紹下360企業安全的服務端架構的演進情況嗎?

溫銘:360企業安全服務端的架構演進主要分為三個階段。

第一個階段是以自己開發的組件為主。我們用C++自己寫了一個簡易的Web Server,并在此基礎上面衍生的一系列工具。頁面的開發,我們沒有使用成熟的PHP框架,而是自己寫了個路由。這一階段產生的問題就是基礎組件不穩 定,跟不上產品功能的快速迭代,而不穩定的產品,企業用戶也不能接受。開發付出了很多努力,但一直沒有找到適當的節奏。

后面有幾個開發的同事覺得要跳出這個糟糕的循環,于是就在新模塊的開發中引入了OpenResty和Yii,并和自研的組件并存。這樣帶來 的明顯好處是效率的提升,開發有精力來完成了前后端分離,QA也從完全的黑盒測試中脫身,搭建了服務端的自動化測試和性能測試。這些改變為后面重構打下了 堅實的基礎。

在第三個階段,我們重構了產品,并統一了服務端的技術架構,同時相關的功能組件全部換用成熟的開源軟件搭建。比如我們使用 OpenResty來搭建整個服務端,周邊工具用Python和Go來完成,報表和數據分析采用ElasticSearch。這樣開發就可以更專注于產品 功能實現和開源軟件的深入學習,而不用擔心基礎組件的穩定性。

InfoQ:你提到,一開始的時候你們的開發人員都在自己『造輪子』,那這樣的方式有什么問題?在自研和開源軟件之間,你認為應該如何選擇?

溫銘:很多時候,『造輪子』的原因是開發人員沒有找到合適的開源軟件,或者在技術方面自視過高。盲目的自己從頭開發組件,時間成本、穩定性以及后續的維護 都是問題。我認為『造輪子』的前提是,現有的成熟開源軟件不滿足你的需求。比如360云查殺對性能要求非常高,而當時沒有開源軟件符合需求,所以我們就在 LevelDB的基礎上面開發自己的Key-Value數據庫。而對于大部分的服務端開發來說,開源軟件足以應付相關需求。

InfoQ:開源軟件的選型上,你有什么好的經驗嗎?

溫銘:現在開源軟件發展非常快,新技術層出不窮,在技術選型的時候,你會面對很多的選擇。不管使用什么開源軟件,在服務端的架構層面,你都需要做到各個組 件像樂高積木一樣,沒有耦合并且可以方便的進行更換。在你產品的第一個的版本里面,最好選擇成熟穩定、自己團隊熟悉的開源軟件,而不是性能最好的,因為這 時候你需要快速的出產品和快速迭代,性能并不是最重要的;在隨后的版本中,你可以通過性能測試的各項數據,來決定使用哪個開源軟件。

除了性能的考慮之外,開源軟件自身的發展也需要考慮:對開發者是否友好、修復bug的速度、版本迭代的周期等。

InfoQ:開源軟件的使用過程中,經常會涉及到需要修改開源軟件的代碼。那在內部版本和社區版本之間,你們是如何同步的,有什么好的經驗嗎?

溫銘:360企業安全服務端有一個特殊的產品需求,是其它產品的服務端開發不會遇到的,就是需要支持Windows平臺。因為很多企業還是希望軟件運行在 Windows上面。所以我們會對一些開源軟件進行修改,以增加對Windows平臺的支持。我們剛開始的做法是下載源代碼,然后修改,但造成的問題是沒 法快速跟進開源軟件版本的更新,也沒法把修改的代碼回饋到社區。現在我們會fork,然后把改動pull request向社區來回饋代碼,同時要有完善的測試案例和文檔,代碼要符合軟件本身的編碼風格。

InfoQ:你怎么看開源文化?360是如何構建開源文化的?

溫銘:360在GitHub上面開源了多個自己開發的軟件,公司內部有技術評級以及定期的技術嘉年華,鼓勵工程師主動分享技術并參與到開源軟件中去。在技 術團隊中,透明和平等的文化,最適合各種技術的成長。我們團隊有一個不成文的規定:AKA(all know all)。比如在技術選型上,我們會出一個大概的架構,然后發給所有開發討論,由于我們是一個大雜燴的技術團隊,有人說“PHP是最好的語言”,有人是 Python的粉絲,還有人推崇Go,還有人堅守Windows平臺,所以各種討(chao)論(jia)后才確定最后的選型。

InfoQ:要使用開源軟件,是不是需要團隊成員對這些開源軟件有足夠的了解?

溫銘:即使不去修改開源軟件的代碼,團隊成員也需要對這些軟件的內部實現有深入的了解,才能用到適合的場合以及做參數的調整。我們每周會有定期的技術分享和code review,來保證團隊每個人都知道團隊使用了哪些技術,如何更好使用這些技術。

InfoQ:團隊在參與開源軟件方面,你有什么好的經驗可以分享?

溫銘:最重要的是要團隊成員有主動性和熱情參與其中。并不是貢獻了patch才算參與到開源軟件中,在實際的開發中解決了問題,總結分享出來,也是一種方 式。我們團隊正在GitBook上面寫關于OpenResty和ElasticSearch的書,分享我們的一些實踐。這也是一種參與開源的方式。

受訪嘉賓介紹

溫銘,一直在互聯網安全公司從事高性能服務端的開發和架構,用各種技術手段打擊木馬傳播和互聯網欺詐。目前在奇虎用互聯網技術幫助企業提高安全防護。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!