免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Web系統(tǒng)架構(gòu)與研發(fā)
主持人:馮大輝,現(xiàn)任丁香園 (http://www.dxy.cn)網(wǎng)站CTO。曾歷任支付寶架構(gòu)師、數(shù)據(jù)庫(kù)團(tuán)隊(duì)負(fù)責(zé)人等職。  
許式偉:作為系統(tǒng)架構(gòu)師,您一般會(huì)從哪些方面來(lái)保證網(wǎng)站的高可用性(降低故障時(shí)間)?


  張宴:很多因素都會(huì)導(dǎo)致網(wǎng)站發(fā)生故障,從而影響網(wǎng)站的高可用性,比如服務(wù)器硬件故障、軟件系統(tǒng)故障、IDC機(jī)房故障、程序上線前測(cè)試未發(fā)現(xiàn)的Bug、遭受分布式攻擊、突發(fā)訪問(wèn)人數(shù)劇增等。

  一套良好的網(wǎng)站系統(tǒng)架構(gòu),應(yīng)該盡可能地避免只有一臺(tái)服務(wù)器、一個(gè)數(shù)據(jù)庫(kù)、一套軟件節(jié)點(diǎn)等單點(diǎn)故障的存在。單點(diǎn)故障一旦發(fā)生,將直接導(dǎo)致網(wǎng)站服務(wù)不可用,恢復(fù)正常服務(wù)所需的時(shí)間也比較長(zhǎng),甚至還可能無(wú)法恢復(fù)。負(fù)載均衡集群、雙節(jié)點(diǎn)熱備、分布式處理等都可以用來(lái)解決單點(diǎn)故障,比如提供相同業(yè)務(wù)的Web服務(wù)器、MySQL數(shù)據(jù)庫(kù)從庫(kù),都可以構(gòu)建負(fù)載均衡集群。一旦集群中的一臺(tái)服務(wù)器、一個(gè)服務(wù)出現(xiàn)故障,自動(dòng)實(shí)時(shí)摘除,對(duì)用戶(hù)來(lái)說(shuō)是不可感知的,不會(huì)影響到整個(gè)網(wǎng)站的訪問(wèn),可以為運(yùn)維工程師留下足夠的時(shí)間去排查和解決故障。

  對(duì)于重要的MySQL數(shù)據(jù)庫(kù)主庫(kù),我們習(xí)慣于從硬件層和軟件層來(lái)實(shí)現(xiàn)熱備,避免單點(diǎn)。越是復(fù)雜的設(shè)備,發(fā)生故障的概率越大。在磁盤(pán)沒(méi)有損壞的情況下,應(yīng)用程序?qū)е路?wù)器宕機(jī)的概率,遠(yuǎn)高于簡(jiǎn)單的磁盤(pán)陣列宕機(jī)的概率。所以,從硬件層解決的話,可以在兩臺(tái)服務(wù)器上安裝相同的數(shù)據(jù)庫(kù)版本、進(jìn)行相同的配置,用SAS或SCSI線連接一臺(tái)磁盤(pán)陣列,將數(shù)據(jù)庫(kù)數(shù)據(jù)文件存放到盤(pán)陣上。正常情況下用服務(wù)器A掛載盤(pán)陣分區(qū),啟動(dòng)MySQL,綁定虛擬IP;如果服務(wù)器A宕機(jī),則用服務(wù)器B掛載盤(pán)陣分區(qū),啟動(dòng)MySQL,接管虛擬IP。從軟件層解決的話,則可以借助DRBD等軟件做鏡像。

  IDC機(jī)房發(fā)生故障的概率較小,但如果發(fā)生的話,影響面也是最大的。如果所有服務(wù)器都托管在一個(gè)IDC機(jī)房,一旦該機(jī)房遭遇長(zhǎng)時(shí)間流量攻擊、斷電、斷網(wǎng)、地方政策性封網(wǎng)等,通常只能聯(lián)系IDC去處理,除此之外束手無(wú)策,解決時(shí)間也比較長(zhǎng)。如果成本允許,將網(wǎng)站服務(wù)器分布在兩個(gè)以上的IDC機(jī)房,當(dāng)某個(gè)IDC發(fā)生故障時(shí),可以臨時(shí)切換DNS域名解析來(lái)優(yōu)先恢復(fù)服務(wù)。

  雖然程序代碼上線前,經(jīng)過(guò)了測(cè)試人員的嚴(yán)格測(cè)試,但測(cè)試環(huán)境和生產(chǎn)環(huán)境畢竟有差異,所以一些會(huì)急劇影響性能、正常服務(wù)的Bug往往在程序上線之后,才會(huì)被發(fā)現(xiàn),這就要求我們?cè)诎l(fā)現(xiàn)Bug后,能夠迅速回滾到上一正常版本。我們?cè)赟VN的基礎(chǔ)上,開(kāi)發(fā)了Web代碼發(fā)布系統(tǒng),會(huì)將每個(gè)發(fā)布版本之間的文件變更記錄下來(lái),一鍵實(shí)現(xiàn)程序代碼在多臺(tái)Web服務(wù)器上的發(fā)布和回滾。

  遭遇DDOS分布式拒絕服務(wù)攻擊,使用防火墻來(lái)對(duì)付半連接、假I(mǎi)P,還算比較容易。而那種專(zhuān)挑復(fù)雜動(dòng)態(tài)應(yīng)用程序URL進(jìn)行的分布式CC攻擊,來(lái)源為真實(shí)IP、真實(shí)HTTP請(qǐng)求,具有模擬正規(guī)瀏覽器User-Agent、單個(gè)IP的每秒請(qǐng)求數(shù)不高、有成千上萬(wàn)個(gè)攻擊源等特征,很難與正常訪問(wèn)區(qū)分開(kāi),比較難對(duì)付。但是,正常通過(guò)瀏覽器訪問(wèn)一個(gè)URL,會(huì)加載該URL中引入的 JavaScript腳本、CSS樣式、圖片等文件。遇到CC攻擊,需要及時(shí)分析日志,找出訪問(wèn)量異常上漲的URL,然后用事先寫(xiě)好的shell腳本找出哪些IP的請(qǐng)求只訪問(wèn)了該URL,而不加載該URL引入的文件,對(duì)這些IP進(jìn)行自動(dòng)封鎖。

  系統(tǒng)架構(gòu)設(shè)計(jì)時(shí),需要事先考慮到高于目前訪問(wèn)量多少倍的突發(fā)訪問(wèn)。對(duì)于網(wǎng)游站點(diǎn)來(lái)說(shuō),訪問(wèn)量受廣告集中時(shí)間段投放、線上活動(dòng)的影響較大,帶寬峰值時(shí)間不固定,對(duì)于靜態(tài)內(nèi)容,可以使用商業(yè)CDN,按實(shí)際使用量計(jì)費(fèi)。對(duì)于動(dòng)態(tài)內(nèi)容,如果遇到突發(fā)訪問(wèn)人數(shù)劇增,超過(guò)現(xiàn)有服務(wù)器處理能力,最簡(jiǎn)單的臨時(shí)處理辦法就是增加服務(wù)器。上架新服務(wù)器需要時(shí)間,但是,同一個(gè)IDC機(jī)房?jī)?nèi),可以借助其他業(yè)務(wù)的服務(wù)器,在不同端口開(kāi)啟一組新進(jìn)程,加入到原有負(fù)載均衡池中。另外,可以臨時(shí)關(guān)閉一些Web中的次要功能,來(lái)減少服務(wù)器消耗。



  許式偉:您在任務(wù)切分上,有什么經(jīng)驗(yàn)分享?您通過(guò)哪些手段保證任務(wù)的獨(dú)立性?

  張宴:相信很多人都遇到過(guò)這種情況:在一個(gè)老項(xiàng)目上修改、增加一些新功能所花費(fèi)的時(shí)間,不比重新來(lái)做一個(gè)包含所有功能的新項(xiàng)目時(shí)間用得少。一個(gè)需要長(zhǎng)期維護(hù)的項(xiàng)目,不可避免地會(huì)面臨老員工的離職、新員工的接手,很多時(shí)候,項(xiàng)目代碼的可維護(hù)性將決定一個(gè)項(xiàng)目的生存周期。讓一個(gè)新員工在規(guī)定開(kāi)發(fā)時(shí)間的壓力下,去面對(duì)一個(gè)文檔不夠詳細(xì)、陌生的、功能復(fù)雜的龐大項(xiàng)目,短時(shí)間弄明白所有功能邏輯不是一件容易的事。所以,任務(wù)需要切分,將一個(gè)大的任務(wù)切分成一個(gè)個(gè)小模塊之后,各模塊之間可以做到代碼獨(dú)立,互不影響,可維護(hù)性也大大增強(qiáng)。

  關(guān)于任務(wù)切分,我以本人今年負(fù)責(zé)的兩個(gè)重要項(xiàng)目架構(gòu)設(shè)計(jì)為例來(lái)介紹一下。在第一個(gè)項(xiàng)目:金山游戲官網(wǎng)的《用戶(hù)行為分析系統(tǒng)》中,由于數(shù)據(jù)挖掘計(jì)算需要消耗較高的內(nèi)存、CPU資源,一臺(tái)服務(wù)器的處理能力不夠,而商業(yè)的分布式數(shù)據(jù)倉(cāng)庫(kù)價(jià)格又太貴,所以,只有從程序應(yīng)用中下手,進(jìn)行任務(wù)切分。我們先按需要挖掘的數(shù)據(jù)指標(biāo),將整個(gè)數(shù)據(jù)挖掘任務(wù)切分成多個(gè)數(shù)據(jù)挖掘插件,每個(gè)插件可以在不同的服務(wù)器上運(yùn)行,多個(gè)插件可以同時(shí)在多臺(tái)服務(wù)器上。多個(gè)數(shù)據(jù)挖掘插件之間,如果用到相同的某項(xiàng)數(shù)據(jù),那么,就將該項(xiàng)數(shù)據(jù)以冗余方式,復(fù)制幾份提供給需要的插件,從而實(shí)現(xiàn)插件之間無(wú)交互、無(wú)關(guān)聯(lián),保證了超大數(shù)據(jù)量下插件的運(yùn)算速度。

  在第二個(gè)項(xiàng)目:金山游戲新版運(yùn)營(yíng)管理系統(tǒng)中,則 將整個(gè)任務(wù)切分成了PHP Web管理界面、PHP Web API功能接口、C/C++中間件引擎三部分。這是一種分層結(jié)構(gòu)切分,最上層的“PHP Web管理界面”調(diào)用“PHP Web API功能接口”,“PHP Web API功能接口”調(diào)用運(yùn)行在游戲服務(wù)器端的“C/C++中間件引擎”,“C/C++中間件引擎”與“游戲服務(wù)器端進(jìn)程”通過(guò)TCP、UDP二進(jìn)制協(xié)議、信號(hào)、命令行等多種方式通信。四者之間相對(duì)獨(dú)立,代碼無(wú)關(guān)聯(lián),通過(guò)一層層API接口實(shí)現(xiàn)交互。“PHP Web管理界面”負(fù)責(zé)通用界面實(shí)現(xiàn)。“PHP Web API功能接口”內(nèi)部,又按接入的游戲模塊、子功能模塊進(jìn)行了更細(xì)的切分,各功能模塊之間通過(guò)內(nèi)部API交互。“C/C++中間件引擎”大而全,不處理具體指令,但兼容TCP、UDP、HTTP、HTTPS/SSL、信號(hào)、命令行等大多數(shù)通信方式,負(fù)責(zé)和各種類(lèi)型的游戲服務(wù)端交互。這是一套完全由API接口驅(qū)動(dòng)的系統(tǒng)架構(gòu),一款新游戲接入運(yùn)營(yíng)管理系統(tǒng)時(shí),只需在“PHP Web API功能接口”中增加一個(gè)模塊;一個(gè)游戲新管理功能的增加,只需要在“PHP Web API功能接口”中增加一個(gè)子模塊。通過(guò)任務(wù)切分,將復(fù)雜功能簡(jiǎn)單化,也將原來(lái)接入一款新游戲所需要的幾個(gè)月時(shí)間,縮短為1~2周。



  許式偉:您通過(guò)哪些手段,來(lái)保障產(chǎn)品的質(zhì)量?您傾向于多久更新一次您的網(wǎng)站?


  張宴:Web產(chǎn)品質(zhì)量主要體現(xiàn)在架構(gòu)、功能、性能、安全、代碼唯一性、兼容性等方面。

  架構(gòu)方面,我會(huì)先設(shè)計(jì)一套架構(gòu)方案,然后讓和項(xiàng)目相關(guān)的人員、專(zhuān)家組成員參與進(jìn)來(lái),一起探討和論證架構(gòu)的利弊,提出改進(jìn)意見(jiàn),保證架構(gòu)的可行性。所有重要項(xiàng)目的技術(shù)方案需要經(jīng)過(guò)專(zhuān)家組的評(píng)估。

  功能、性能方面,則會(huì)由專(zhuān)門(mén)的測(cè)試人員進(jìn)行功能測(cè)試、壓力測(cè)試、安全掃描,測(cè)試環(huán)境分為線下測(cè)試環(huán)境、線上準(zhǔn)測(cè)試環(huán)境。

  在代碼唯一性方面,我們開(kāi)發(fā)了一個(gè)Web配置信息管理平臺(tái)及相關(guān)PHP擴(kuò)展,提供給系統(tǒng)工程師,用于配置信息的統(tǒng)一管理。在新項(xiàng)目中,PHP程序配置文件中將不再出現(xiàn)MySQL、Memcached等各類(lèi)IP和端口信息,統(tǒng)一用Web配置信息管理平臺(tái)給出的變量代替。從“開(kāi)發(fā)環(huán)境→線下測(cè)試環(huán)境→線上測(cè)試環(huán)境→線上正式環(huán)境”,連接的數(shù)據(jù)庫(kù)各不相同,導(dǎo)致PHP開(kāi)發(fā)工程師經(jīng)常搞混淆或忘了修改,通過(guò)Web配置信息管理平臺(tái),使得PHP代碼中的配置文件,在四個(gè)環(huán)境中無(wú)須作任何修改,保證了代碼的一致性,降低了出錯(cuò)率,從而確保了產(chǎn)品質(zhì)量。

  在兼容性方面,我們從操作系統(tǒng)到PHP、 MySQL版本,都保持開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、線上環(huán)境的統(tǒng)一,所有的Web服務(wù)運(yùn)行在CentOS Linux系統(tǒng)上。由于大多數(shù)PHP程序員習(xí)慣于在Windows上編寫(xiě)代碼,而我們的程序中調(diào)用的一些接口、PHP擴(kuò)展,只能在Linux下運(yùn)行。為此,我們開(kāi)發(fā)了一個(gè)小工具,可以將多名程序員在各自本機(jī)Windows上搭建的nginx虛擬主機(jī)、編寫(xiě)的程序文件,映射到一臺(tái)Linux服務(wù)器,用 Linux上的php-cgi執(zhí)行Windows上的PHP代碼。這樣,PHP程序員修改完本機(jī)代碼,保存一下,即可調(diào)試,多人之間互不影響。自己調(diào)試通過(guò)后,可以在Windows直接點(diǎn)擊鼠標(biāo)右鍵,將修改的代碼提交到SVN版本庫(kù)。

  Web 2.0時(shí)代,講究網(wǎng)站更新的實(shí)時(shí)性,動(dòng)態(tài)網(wǎng)站不用說(shuō),靜態(tài)網(wǎng)站的內(nèi)容發(fā)布也要保證實(shí)時(shí)。我們開(kāi)發(fā)了一款名為Sersync的開(kāi)源軟件(http://code.google.com/p/sersync/), 使用Linux 2.6內(nèi)核的inotify監(jiān)控Linux文件系統(tǒng)事件,被監(jiān)聽(tīng)目錄下如果有文件發(fā)生修改,Sersync將通過(guò)內(nèi)核自動(dòng)捕獲到事件,并將該文件利用 rsync同步到CDN源站服務(wù)器。Sersync僅僅同步發(fā)生增、刪、改事件的單個(gè)文件或目錄,不像rsync鏡像同步那樣需要比對(duì)雙方服務(wù)器整個(gè)目錄下數(shù)千萬(wàn)的文件,并且支持多線程同步,因此效率非常高。金山游戲官網(wǎng)的CMS內(nèi)容發(fā)布系統(tǒng),無(wú)論網(wǎng)站編輯通過(guò)Web還是FTP上傳圖片、視頻、附件,還是系統(tǒng)工程師直接去CMS發(fā)布服務(wù)器上增加、修改、刪除文件,干完這些事情后不用做任何處理,Sersync 會(huì)自動(dòng)將發(fā)生增、刪、改事件的文件同步到CDN源站服務(wù)器,并可以在文件同步完成后,自動(dòng)調(diào)用CDN緩存刷新接口,主動(dòng)刷新發(fā)生修改、刪除的文件的訪問(wèn) URL。



  許式偉:您在面試時(shí),通常關(guān)注應(yīng)聘者的哪些方面?哪些問(wèn)題經(jīng)常會(huì)問(wèn)呢?

  張宴:第一,需要具備崗位要求的基礎(chǔ)技能知識(shí),這方面我不再詳述。

  第二,注重項(xiàng)目經(jīng)驗(yàn)與積累,不看重學(xué)歷與工作年限。做一個(gè)項(xiàng)目,猶如打一場(chǎng)戰(zhàn)役,身經(jīng)百戰(zhàn),積累下來(lái)的成功經(jīng)驗(yàn)可以讓工作更得心應(yīng)手,失敗經(jīng)驗(yàn)可以避免走很多彎路。

  第三,能夠在1~2個(gè)以上技術(shù)領(lǐng)域精通。所謂術(shù)業(yè)有專(zhuān)攻,能夠在某幾項(xiàng)技術(shù)領(lǐng)域做到精通的人,相信對(duì)于新的技術(shù)領(lǐng)域或者從未有過(guò)相關(guān)經(jīng)驗(yàn)的新項(xiàng)目,也能夠輕松勝任,做到盡善盡美。

  第四,關(guān)注應(yīng)聘者的知識(shí)廣度。如今的項(xiàng)目,已經(jīng)告別個(gè)人英雄時(shí)代,講究團(tuán)隊(duì)的協(xié)作。知識(shí)面越廣,盡管在非專(zhuān)攻領(lǐng)域的深度可能不夠,但是,知己知彼,可以站在一個(gè)更高的角度上看問(wèn)題,這對(duì)于團(tuán)隊(duì)協(xié)作開(kāi)發(fā)、項(xiàng)目融合的益處是顯而易見(jiàn)的。

  第五,具備良好的領(lǐng)悟能力、思考能力、設(shè)計(jì)能力、創(chuàng)新能力。基礎(chǔ)技能知識(shí)不夠可以學(xué)習(xí),經(jīng)驗(yàn)不足可以積累,技術(shù)不精通可以鉆研,知識(shí)面不廣可以開(kāi)拓,但要培養(yǎng)這四項(xiàng)能力,是一件非常困難的事。要打造一支優(yōu)秀的團(tuán)隊(duì),這四項(xiàng)能力不可缺少,它們的重要度甚至超過(guò)以上的四方面要求。

  我不會(huì)經(jīng)常去問(wèn)固定的問(wèn)題,但所問(wèn)的問(wèn)題,幾乎都跟以上的這些方面相關(guān)。



  許式偉:您曾嘗試開(kāi)放自己的程序代碼嗎?您對(duì)中國(guó)國(guó)內(nèi)開(kāi)源社區(qū)的現(xiàn)狀有何看法?

  張宴:是否開(kāi)源自己的程序代碼,跟所在公司或部門(mén)的性質(zhì)有著密切的關(guān)系。如果是在研發(fā)驅(qū)動(dòng)型企業(yè)或部門(mén),程序代碼是公司生存的命脈,需要與競(jìng)爭(zhēng)對(duì)手拼技術(shù)和保持技術(shù)領(lǐng)先的優(yōu)勢(shì),因此,很難支持開(kāi)源事業(yè)。反之,如果是在運(yùn)營(yíng)驅(qū)動(dòng)型企業(yè)或部門(mén),技術(shù)是用來(lái)提高運(yùn)營(yíng)質(zhì)量、運(yùn)營(yíng)水平的工具之一。將純粹的技術(shù)代碼或產(chǎn)品,從公司的業(yè)務(wù)產(chǎn)品中提取出來(lái),進(jìn)行開(kāi)
源,可以按照開(kāi)源產(chǎn)品的要求,提高公司內(nèi)部技術(shù)產(chǎn)品的規(guī)范化、標(biāo)準(zhǔn)化,還可以引用更廣大用戶(hù)的使用、反饋和意見(jiàn),解決未發(fā)現(xiàn)的潛在Bug,改進(jìn)代碼質(zhì)量,提升技術(shù)水平。對(duì)于提高運(yùn)營(yíng)質(zhì)量、運(yùn)營(yíng)水平來(lái)說(shuō),益處多多。我也嘗試開(kāi)源自己的一些代碼,例如簡(jiǎn)單消息隊(duì)列服務(wù)HTTPSQS(http://code.google.com/p/httpsqs/)、MySQL HTTP/REST客戶(hù)端MySQL-UDF-HTTP(http://code.google.com/p/mysql-udf-http/),同時(shí),也鼓勵(lì)團(tuán)隊(duì)成員嘗試開(kāi)源,例如剛才提到的自動(dòng)同步軟件Sersync。

  國(guó)內(nèi)的開(kāi)源社區(qū)在不斷壯大,很多知名互聯(lián)網(wǎng)公司都開(kāi)源了自己的一些產(chǎn)品,但大多數(shù)還只停留在開(kāi)源產(chǎn)品的使用、技術(shù)交流、漢化層面,真正參與到開(kāi)源產(chǎn)品編碼中的人還是較少,很多開(kāi)源產(chǎn)品最終還是由原作者或原公司團(tuán)隊(duì)維護(hù)。國(guó)內(nèi)開(kāi)源社區(qū)的道路仍然漫長(zhǎng)。

from: http://blog.s135.com/architect_solitaire/#entrymore 張宴
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
網(wǎng)站系統(tǒng)架構(gòu)梳理
如何尋找國(guó)外網(wǎng)站注入漏洞或1 = 1
PHP+MYSQL+WEB
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服