国产精品久久777777网站,男生天堂精品2020在线,国产精品久久久久一级毛片,体育老师在单杠C了我一节课视频

濟(jì)南軟件開發(fā)之對(duì).NET系統(tǒng)架構(gòu)改造的經(jīng)驗(yàn)和教訓(xùn)

2015-09-17 16:05:06
    濟(jì)南軟件開發(fā)向您介紹,怎樣搭建合適的網(wǎng)站框架:
    1、數(shù)據(jù)層放棄SQL Server數(shù)據(jù)庫(kù)和存儲(chǔ)過程,全部遷移到Linux平臺(tái)上的MySQL數(shù)據(jù)庫(kù)上;
    2、緩存不再依賴.net自身提供的緩存機(jī)制,遷移到部署在Linux平臺(tái)上的分布式的Redis上;
    3、服務(wù)之間的調(diào)用,避免使用.net自身專有協(xié)議,改成Restful的HTTP Web API調(diào)用;
    4、靜態(tài)資源請(qǐng)求,不再讓IIS自己處理,分離到Linux平臺(tái)上的nginx去處理;
    5、需要讀取的文件系統(tǒng),也改成訪問Linux平臺(tái)上的分布式文件系統(tǒng);
    6、部署.net代碼的Windows服務(wù)器放在LVS后面,用LVS做負(fù)載均衡和故障切換;
    簡(jiǎn)單說(shuō)來(lái),就是單純讓.net做應(yīng)用層的編程語(yǔ)言和框架,其他都交給Linux平臺(tái)的開源解決方案。而.net框架單純做應(yīng)用層,無(wú)論ASP.net MVC的開發(fā)效率,還是.net CLR虛擬機(jī)的運(yùn)行效率都非常好,目前我們單臺(tái)Windows服務(wù)器上跑幾百萬(wàn)的動(dòng)態(tài)請(qǐng)求毫無(wú)壓力,而且應(yīng)用層架構(gòu)是可以橫向擴(kuò)展的:如果請(qǐng)求負(fù)載非常高,只需要添加更多Windows服務(wù)器即可。總之,做到了揚(yáng)長(zhǎng)避短。
    我們濟(jì)南軟件開發(fā)還有熟悉大型互聯(lián)網(wǎng)技術(shù)架構(gòu)的人應(yīng)該很容易的發(fā)現(xiàn),這個(gè)重構(gòu)過程其實(shí)就是一個(gè)“讓合適的東西干合適的事情”這樣一項(xiàng)工作:
    1、把過多業(yè)務(wù)邏輯寫到存儲(chǔ)過程中必然導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)器壓力的增大,而且不利于負(fù)載均衡,因此去“存儲(chǔ)過程”是必要的;
    2、SQLServer實(shí)現(xiàn)集群的能力很差,用MYSQL之類的數(shù)據(jù)庫(kù)是一個(gè)不錯(cuò)的選擇;
    3、緩存還是用.Net內(nèi)置的InProc緩存機(jī)制對(duì)于高并發(fā)的網(wǎng)站來(lái)講是一個(gè)災(zāi)難,用Redis之類分布式緩存來(lái)代替是必然的過程;
    4、使用.Net Remoting之類的私有協(xié)議不利于異構(gòu)系統(tǒng)集成,改成webservice、REST也是必須的;
    5、靜態(tài)文件的請(qǐng)求也經(jīng)過IIS有點(diǎn)太勞煩IIS了,扔給nginx才更合適;
    6、Windows服務(wù)器的文件系統(tǒng)很不靈活,換成更加靈活的Linux下的分布式文件系統(tǒng)是聰明的;
    7、采用LVS、nginx之類做負(fù)載均衡也是最合適的。
     其實(shí)任何一個(gè)大型互聯(lián)網(wǎng)基本都是這樣一個(gè)架構(gòu):前端使用nginx等做負(fù)載均衡,使用Redis、memcached等做分布式緩存,使用數(shù)據(jù)庫(kù)集群進(jìn)行讀寫分離之類的優(yōu)化,使用分布式文件系統(tǒng)處理圖片等靜態(tài)文件。 請(qǐng)問,使用PHP、Java等做web服務(wù)器開發(fā)的大型互聯(lián)網(wǎng),哪個(gè)使用JSP內(nèi)置的Session對(duì)象做Session的,不都要換用redis嗎?哪個(gè)把圖片和php放到一個(gè)服務(wù)器的,不都放到文件服務(wù)器中嗎?哪個(gè)一個(gè)apache服務(wù)器就可以扛起來(lái)的,不都是nginx之類的擋在前面做負(fù)載均衡的嗎? 怎么不說(shuō)“去php化”、“去java化”呢?要知道redis、memcached、ngix之類的可都不是java、php寫的呀,一個(gè)java項(xiàng)目竟然用其他語(yǔ)言寫的東西,難道不丟面子?
    我們濟(jì)南軟件開發(fā)認(rèn)為,其實(shí)一個(gè)大型的系統(tǒng)中,根據(jù)項(xiàng)目的不同特點(diǎn)來(lái)組合搭配不同的產(chǎn)品、組件是一個(gè)必然的過程,去了解一下這些系統(tǒng)中“混搭”是常見的現(xiàn)象。單一產(chǎn)品中提供能的功能只能滿足普通項(xiàng)目的需求,要想滿足復(fù)雜的項(xiàng)目,必須把這些產(chǎn)品中提供的一些傻瓜化的簡(jiǎn)單組件用更專業(yè)的組件來(lái)替換,就像做小項(xiàng)目php中的Session足夠了,但是大項(xiàng)目必須用c/c++開發(fā)的memcached來(lái)替換。