bat解密:網際網路技術發展之路(5)- 開發層技術剖析
1. 開發架構
在系列文章的第2篇“bat解密:網際網路技術發展之路(2)- 業務如何驅動技術發展”中我們深入分析了網際網路業務發展的一個特點:複雜性越來越高。複雜性增加的典型現象就是系統越來越多,不同的系統由不同的小組開發。如果每個小組用不同的開發架構和技術,将會帶來很多問題,典型的問題有:
1)技術人員之間沒有共同的技術語言,交流合作少
2)每類技術都需要投入大量的人力和資源和熟練精通
3)不同團隊之間人員無法快速流動,人力資源不能高效的利用
是以,網際網路公司都會指定一個大的技術方向,然後使用統一的開發架構,例如java相關的開發架構ssh、springmvc、play,ruby的ruby on rails,php的thinkphp,python的django等等。使用統一的開發架構能夠解決上面提到的各種問題,大大提升組織和團隊的開發效率。
對于架構的選擇,有一個總的原則:優選成熟的架構,避免盲目追逐新技術!為什麼呢?
首先,成熟的架構資料文檔齊備,各種坑基本上都有人踩過了,遇到問題很容易通過搜尋解決
其次,成熟的架構閱聽人更廣,招聘時更加容易招聘到合适的人才
第三,成熟的架構更加穩定,不會出現大的變動,适合長期發展
以我親身經曆的一個反例為例:我們使用了play 1作為java開發架構,因為它是輕量級的java開發架構,但沒想到play 2直接改為scala語言開發,play 1的架構演進停滞,而我們又不能切換為play 2,結果就導緻隻能一直用play 1,有新的需求隻能自己開發。
2. 伺服器
開發架構隻是負責完成業務功能的開發,真正能夠運作起來,給使用者提供服務,還需要伺服器配合。
獨立開發一個成熟的web伺服器,成本非常高;且業界又有那麼多成熟的開源web伺服器,是以網際網路行業基本上都是拿來主義,挑選一個流行的開源伺服器即可。牛逼一點的公司,可能會在開源伺服器的基礎上,結合自己的業務特點做二次開發,例如淘寶的tengine,但一般公司基本上隻需要将開源伺服器摸透,優化一下參數,調整一下配置就差不多了。
選擇一個伺服器主要和開發語言相關,例如:java的有tomcat、jboss、resin等,php/python的用nginx,當然最保險的就是用apache了,什麼語言都支援。
有的人可能擔心apache的性能之類的問題,其實不用過早擔心這個,等到你的業務真的發展到apache撐不住的時候再考慮切換也可以,那時候你有的是錢,有的是人,有的是時間。
3. 容器
容器是最近2年才開始火起來的,其中以docker為代表,在bat級别的公司已經有較多的應用,例如騰訊:騰訊萬台規模的docker應用實踐;新浪微網誌:微網誌紅包:大規模docker叢集實踐經驗分享 等等。
傳統的虛拟化技術是虛拟機,解決了跨平台的問題,但由于虛拟機太龐大,啟動慢,運作時太占資源,在網際網路行業并沒有大規模的應用;而docker的容器技術,雖然沒有跨平台,但啟動快,幾乎不占資源,推出後立刻就火起來了,預計docker類的容器技術将是技術發展的主流方向。
千萬不要以為docker隻是一個虛拟化或者容器技術,它将在很大程度上改變我們目前的技術形勢:
1)運維方式會發生革命性的變化:docker啟動快,幾乎不占資源,随時啟動和停止,基于docker打造自動化運維、智能化運維将成為主流方式
2)設計模式會發生本質化的變化:啟動一個新的容器執行個體代價如此低,将鼓勵設計思路朝“微服務”的方向發展。
例如一個傳統的網站包括登入注冊、頁面通路、搜尋等功能,沒有用容器的情況下,除非有特别大的通路量,否則這些功能開始時都是內建在一個系統裡面的;有了容器技術後,一開始設計就可以将這些功能按照服務的方式設計,避免後續通路量增大時又要重構系統。