成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對.net系統架構改造的一點經驗和教訓

運維 系統運維
當網站架構全面Linux化,并且架構解決方案全部統一以后,其實在應用層用什么編程語言來寫,就不是一件重要的事情了。本文是作者對.net系統架構改造的一點經驗和教訓,分享給大家。

   在互聯網行業,基于Unix/Linux的網站系統架構毫無疑問是當今主流的架構解決方案,這不僅僅是因為Linux本身足夠的開放性,更因為圍繞傳統Unix/Linux社區有大量的成熟開源解決方案,覆蓋了網站應用擴展的方方面面。

  我記得十幾年前第一波互聯網浪潮的時代,采用Windows平臺ASP架構的大型網站是非常普及的,而如今采用Windows平臺.net架構的大流量知名網站已經鳳毛麟角了。很多采用Windows平臺.net架構的大型網站都面臨了架構上的擴展問題:

  例如國外的SNS網站MySpace網站面臨過很嚴重的性能擴展問題,國內電商網站京東也不止一次受困于架構擴展帶來了性能瓶頸。因此,一些Windows平臺.net架構為主的網站,不得不考慮“去.net化”,拋棄.net,全面遷移到以Java為主的架構上。

  但是大型網站的架構遷移,本身也是傷筋動骨的事情,風險極高,成功案例尚不多見,失敗案例俯拾皆是,這是因為:

  • 架構遷移是在現有業務系統上進行的,并不是從容的開發新產品,有足夠的時間測試和完善,相當于給正在高空飛行的客機換引擎,必須一次切換成功,沒有第二次機會,稍有差池,就會機毀人亡。而我們都知道,新開發一個大型系統,沒有上線磨合和完善過,無法做到一次100%完美。
  • 架構遷移意味著老的研發團隊將被淘汰,而往往老團隊體系隨著公司壯大已經掌握了足夠話語權,新架構的團隊在公司又根基未穩,出于維護自身利益的本能,新舊團隊之間很容易爆發政治斗爭,相互排擠,導致遷移失敗。

  5173“去.net化”的教訓


  5173網站以游戲裝備交易起家,曾經在客戶端網絡游戲發展黃金時期,迎來了業務爆發性的增長期。此時,用.net架構開發的網站已經不堪重負,由于現有的.net研發團隊長期無法解決網站的性能問題,5173決定將網站從.net架構全面遷移到Java為主的架構上。為此,5173花了很大的代價,從淘寶和SUN公司挖了很多工程師,組成了一個六七十人的Java架構研發部門。

  新的Java研發部門開發新的5173網站,而老的.net研發部門維護現有的5173網站,兩個部門并行工作,兩個版本的網站并行運行,這帶來了公司內部激烈的政治斗爭,新開發完成的Java版本的5173網站從未正式上線過,老的.net研發團隊在面臨嚴重生存威脅的情況下,努力解決了一些核心的可用性和穩定性問題。同時隨著端游黃金時代的結束,網站性能問題也逐漸顯得不再重要。

  在圍繞新版本網站是否要正式替換老版本網站的問題上,各個利益方爭執不下,反反復復拉鋸戰,而空降而來的女CTO不屬于任何派系,態度模棱兩可。最終斗爭的結果.net利益方戰勝了Java利益方,Java研發部門被清洗。

  我的.net系統架構改造的經驗和教訓


  3年前,我剛接手CSDN的產品和研發團隊的時候,CSDN的核心系統大約2/3是Windows平臺.net架構,1/3是LAMP架構。研發人員當時也很少:只有2個.net程序員,3個PHP程序員,后來還有1個我帶過來的Ruby程序員。當時的計劃是:網站整體架構改造的方向是Linux架構,逐漸替換掉現有的.net系統。因此不打算繼續招聘和補充.net程序員了,現有的.net程序員負責老的核心系統維護工作。

  但碩果僅存的2個.net程序員在隨后不到半年時間都走了:一個.net程序員跟著微軟出來的高管去創業,另一個.net程序員跳槽去百度做了前端工程師。這中間的道理也很簡單:既然公司要去.net化,那.net工程師就會擔心等到將來.net系統都換掉之后,自己在公司還有價值嗎,不就徹底邊緣化了嗎?

  當然我在制訂架構遷移計劃的時候,也考慮到了這一點:我給那個更資深的.net工程師制訂的是整個公司總架構師的培養計劃,那個精通JS的.net工程師制訂的是未來前端團隊Leader的培養計劃。不過有不確性的承諾總是不如現實的威脅更迫切,所以我也特別能夠理解.net工程師的流失。

  這個時候,我陷入了一個兩難的處境:

  • 如果未來還是沿著“去.net化”的計劃往下走,就算重新招聘和搭建了.net研發團隊,由于.net在公司是注定要被替換掉的,那么新的.net團隊是不可能穩定的,很可能來一兩個月,一看形勢不對,立馬走人了。而當時.net的核心系統占整個網站的比重很高,且極端復雜,一旦出問題,根本就束手無策,必須要有好手坐鎮維護。當時我已經開始review核心系統的.net代碼,準備親自上陣了。
  • 如果未來放棄“去.net化”的計劃,也許短期可以解決一些頭疼的系統維護的問題,但是對整個網站長期的發展會帶來很多不利的方面:例如網站的安全性問題,網站的架構擴展問題,網站服務端軟件全面正版化的成本問題等等。如果當時不下定決心去.net化,那么將來再想做這個事情,代價只會越來越高。

  當時,我最初的想法是:招聘2名水平尚可,沒有太大上進心,可以安于現狀,踏踏實實工作的.net程序員來維護老的.net核心系統;同時招聘和搭建ruby研發團隊,以我過去用ruby開發網站的驚人開發效率,爭取時間,逐一重寫老的.net核心系統。但是這樣做,風險也很大:

  • 我來CSDN的時間不是很長,當時CSDN線上產品又多又雜,足有上百個之多,很多系統我都不清楚干什么的;
  • 公司領導也不太支持我這么快動手,甚至很擔心我大刀闊斧的改造網站,會把當時已經很脆弱的網站徹底搞休克;
  • 我來北京以后,只帶過來1個Ruby程序員,而搭建Ruby團隊,磨合團隊,開發核心系統,都不是一朝一夕的事情,想快也很難快起來;

  幸運的是,我招聘過程中,面試到了兩個相當不錯的.net工程師,有很強的上進心,編程功底和悟性都很好。雖然不符合我當時想找安于現狀的工程師的標準,但我又不太想錯過好的人才,所以我臨時改變了自己的想法,將他們招過來,組建了新的.net團隊。

  為了避免出現之前.net團隊流失的問題,給新的.net團隊創造在公司發展的機會和空間,我想來想去,決定采取一個折衷的方案:即保留和沿用.net編程語言和框架,但是網站整體架構仍然去Windows化,概要說來:

  • 數據層放棄SQL Server數據庫和存儲過程,全部遷移到Linux平臺上的MySQL數據庫上;
  • 緩存不再依賴.net自身提供的緩存機制,遷移到部署在Linux平臺上的分布式的Redis上;
  • 服務之間的調用,避免使用.net自身專有協議,改成Restful的HTTP Web API調用;
  • 靜態資源請求,不再讓IIS自己處理,分離到Linux平臺上的nginx去處理;
  • 需要讀取的文件系統,也改成訪問Linux平臺上的分布式文件系統;
  • 部署.net代碼的Windows服務器放在LVS后面,用LVS做負載均衡和故障切換;

  簡單說來,就是單純讓.net做應用層的編程語言和框架,其他都交給Linux平臺的開源解決方案。而.net框架單純做應用層,無論ASP.net MVC的開發效率,還是.net CLR虛擬機的運行效率都非常好,目前我們單臺Windows服務器上跑幾百萬的動態請求毫無壓力,而且應用層架構是可以橫向擴展的:如果請求負載非常高,只需要添加更多Windows服務器即可。總之,做到了揚長避短。

  此外,我也比較注重不同編程語言研發團隊之間的交流,鼓勵.net工程師熟悉Linux操作系統,培養.net工程師整體架構意識。我們現在的主力.net骨干和我說,感覺來到這里以后技術上最大的提升就是視野一下被打開了。

  在后來兩年的整個網站改造過程中,也證明了這樣的做法是相當成功的:

  • .net團隊穩定的延續了下來,而且成為整個研發部門表現一直非常突出的團隊;
  • 整個系統改造的過程非常穩健和平滑,沒有碰到過什么風險;
  • 對網站用戶的沖擊很小,基本上都是在潛移默化當中,不知不覺的完成了整個網站產品的翻新;
  • 對公司線上業務也沒有造成任何影響,而且隨著系統不斷改造,對業務的支持越來越好;

  當網站架構全面Linux化,并且架構解決方案全部統一以后,其實在應用層用什么編程語言來寫,就不是一件重要的事情了,我們目前應用層現有產品線,既有.net,也有PHP和Ruby寫的,但是架構都是統一的,用什么編程語言,主要取決于研發團隊資源的調配情況而定。

  總之,以我的經驗來說,一個傳統上嚴重依賴微軟解決方案架構的網站,如果要進行架構改造,遷移到Linux平臺,甚至用其他編程語言重寫,從來都不是一個單純的技術問題,它至少涉及如下幾個層面的問題:

  • 如何保障舊系統的研發團隊的利益問題,如何做到激勵老團隊參與架構改造,分享成功。這是最重要的,往往也是架構遷移最容易出現的致命問題,如果架構改造注定要犧牲老團隊,完全不考慮和保障他們的利益,我認為一定會產生殘酷的政治斗爭,最終必然失敗;
  • 現有業務系統如何保持正常運轉和平滑過渡的問題,如果架構改造影響到了業務,那一定會夭折;
  • 如何保證網站用戶體驗的平滑過渡和改善的問題,如果架構改造影響了用戶基本使用體驗,那也一定會被叫停;
  • 領導對架構改造當中出現風險的容忍度問題,以及領導對架構改造周期拉長以后的耐心問題;

  一點題外話


  我感覺我們互聯網行業有一個不太好的現象:有些網站在促銷期間癱瘓了,有些網站經常出現訪問不穩定的現象,公司老板就喜歡跑到微博上來放狠話,請下屬喝茶,或者急就章的嚷嚷百萬年薪招CTO,這些都是很幼稚的做法。這就好比一個人,平常生活習慣差,花天酒地,從不注意養生,結果長年累月下來,終于病倒了。在這個時候狠狠的揮舞支票嚷嚷,哪個名醫能給我藥到病除,我給誰百萬報酬。

  所以,當一個網站出現嚴重的技術問題,其根源往往都不是單純的技術問題,也不是單純換個CTO就可以藥到病除的,要反思公司企業文化是不是從來沒有重視過研發,對技術團隊的激勵到位了嗎?對架構師的意見重視過嗎?對未來可能面臨的技術門檻是否有過長期的研發投入?

  關于這個現象,我記得Fenng說過一句很精辟的話:“技術問題,總是在短期被高估,在長期被低估”,我也想補充一句:“技術出現了問題,從來都不單純是技術導致的問題”。

責任編輯:黃丹 來源: robbinfan.com
相關推薦

2013-05-14 12:06:26

.Net系統架構架構設計

2015-11-02 09:43:25

ASP.NET異步編程

2014-09-17 10:30:25

代碼

2012-10-30 10:09:56

Redis

2021-05-17 11:47:41

多租戶系統私有化

2012-03-06 09:17:11

開源項目運作

2013-03-06 10:19:56

重構架構設計

2015-07-29 10:39:33

代碼審查經驗教訓

2012-09-26 09:54:52

Scrum

2009-06-17 14:36:02

學習Java心得

2009-08-03 09:17:30

ASP.NET Ses

2014-11-25 11:52:15

.NET

2009-11-03 09:09:19

VB.NET類

2021-11-18 10:08:43

企業IT技術

2009-08-04 16:34:13

ASP.NET代碼分離

2010-05-10 18:22:03

2009-11-02 16:30:29

VB.NET構造器

2009-10-28 14:30:16

VB.NET RmDi

2014-09-23 11:21:05

代碼命名程序員架構設計

2011-05-24 11:09:30

Access數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本大香伊一区二区三区 | а天堂中文最新一区二区三区 | 中文字幕在线视频一区二区三区 | 国产精品久久亚洲 | 天天宗合网 | 欧美无乱码久久久免费午夜一区 | 美女高潮网站 | www视频在线观看 | 日本福利在线观看 | 亚洲人成在线观看 | 欧美在线观看黄色 | 99自拍视频 | 日韩欧美视频在线 | 亚洲精品久久久久久宅男 | 国产成人久久精品一区二区三区 | 不卡av电影在线播放 | 欧美日韩视频 | 一级黄在线观看 | 欧美aⅴ | 国产高清精品在线 | 日韩在线小视频 | 日本亚洲欧美 | 激情网站在线观看 | 在线观看av网站永久 | 国产精品亚洲精品日韩已方 | 午夜寂寞福利视频 | 天天射天天干 | 成人精品一区二区三区中文字幕 | 亚洲视频一区在线观看 | 久久精品一级 | 久久香蕉网 | 91精品国产色综合久久 | 精品福利视频一区二区三区 | 亚洲精品久久久久久一区二区 | 国产精品免费观看 | 国产做爰| 人人玩人人添人人澡欧美 | 久久一本 | 欧美精品一区免费 | 国产亚洲欧美在线视频 | 久久久久国产成人精品亚洲午夜 |