日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

互聯(lián)網(wǎng)系統(tǒng)架構(gòu)的演進(jìn)

admin
2013年10月9日 21:54 本文熱度 4583
  發(fā)表于43分鐘前| 次閱讀| 來(lái)源《程序員》| 0 條評(píng)論| 作者程序員雜志
  摘要:多終端接入、開(kāi)放平臺(tái)給互聯(lián)網(wǎng)帶來(lái)了前所未有的用戶(hù)數(shù)量和訪問(wèn)規(guī)模,信息之多、傳播速度之快,是傳統(tǒng)網(wǎng)站難以想象的。本文將從發(fā)展演進(jìn)的角度,解讀高性能互聯(lián)網(wǎng)系統(tǒng)架構(gòu)。
  多終端接入、開(kāi)放平臺(tái)給互聯(lián)網(wǎng)帶來(lái)了前所未有的用戶(hù)量級(jí)和訪問(wèn)規(guī)模,SNS網(wǎng)站產(chǎn)生了海量的UGC(用戶(hù)產(chǎn)生內(nèi)容),而且這些內(nèi)容依托關(guān) 系鏈擴(kuò)散速度之快、傳播范圍之廣是傳統(tǒng)網(wǎng)站難以想象的,海量數(shù)據(jù)的計(jì)算存儲(chǔ)也一直是近年互聯(lián)網(wǎng)領(lǐng)域的熱點(diǎn)。本文將從發(fā)展演進(jìn)的層面探討互聯(lián)網(wǎng)的系統(tǒng)架構(gòu)。
  天下武功唯快不破
  網(wǎng)站初期的架構(gòu)一般采用"短平快"的架構(gòu)思路,架構(gòu)以簡(jiǎn)單清晰、容易開(kāi)發(fā)為第一衡量指標(biāo)。
  互聯(lián)網(wǎng)架構(gòu)選型首先包括開(kāi)發(fā)語(yǔ)言的選擇,目前PHP、Java是主力語(yǔ)言。開(kāi)發(fā)語(yǔ)言的選擇一般從團(tuán)隊(duì)人員的知識(shí)儲(chǔ)備、社區(qū)活躍度、商業(yè)應(yīng)用的成熟度、招聘人才的人力成本等方面考量。
  選擇語(yǔ)言之后,一般會(huì)選擇該語(yǔ)言的流行框架輔助研發(fā),例如Java的SSH、Python的Django等。但這些框架并不是通常意義上的架構(gòu),架構(gòu)一般可 分為物理架構(gòu)、運(yùn)行架構(gòu)、邏輯架構(gòu)、開(kāi)發(fā)架構(gòu)、數(shù)據(jù)架構(gòu)等多個(gè)維度,框架往往只是代碼架構(gòu)的一部分。代碼架構(gòu)是指代碼的組織形式、規(guī)范、設(shè)計(jì)模式等,框架 其實(shí)是常用設(shè)計(jì)模式的軟件化。例如Struts是MVC模式的實(shí)現(xiàn),Hibernate、iBATIS是ORM模式的實(shí)現(xiàn)。
  在架構(gòu)視圖中,早期關(guān)注的主要是開(kāi)發(fā)視圖和數(shù)據(jù)視圖,一般數(shù)據(jù)存儲(chǔ)采用DB,初期數(shù)據(jù)的關(guān)注點(diǎn)主要是安全和備份,MySQL的Master-Slave模式可以滿(mǎn)足該需求。
  雞蛋不要放在一個(gè)籃子里
  采用"短平快"三板斧將網(wǎng)站開(kāi)發(fā)出來(lái)之后,急需解決的是網(wǎng)站的可用性問(wèn)題。可用性最基本的要求是不能有單點(diǎn),對(duì)程序節(jié)點(diǎn)而言,前端可采用LVS、HAProxy、Nginx等負(fù)載均衡/反向代理設(shè)備。
  DB的可用性就復(fù)雜了很多,數(shù)據(jù)庫(kù)天然是有狀態(tài)的,狀態(tài)就是其中的數(shù)據(jù),新增一個(gè)數(shù)據(jù)節(jié)點(diǎn)一般伴隨著大量的數(shù)據(jù)復(fù)制和遷移。對(duì)金融行業(yè)而言,昂貴的商用存儲(chǔ)是 解決之道,"IBM+Oracle+EMC"是該類(lèi)系統(tǒng)的標(biāo)配?;ヂ?lián)網(wǎng)企業(yè)則一般采用較為廉價(jià)的方案,例如開(kāi)源的DRDB+Heartbeat技術(shù)組合可 以在MySQL主庫(kù)宕機(jī)時(shí)實(shí)現(xiàn)備機(jī)接管,接管時(shí)間可以控制在30秒內(nèi)。
  程序節(jié)點(diǎn)其實(shí)也可能存在狀態(tài),例如Web服務(wù)中常用的Session 就是保存在容器中的狀態(tài),這種狀態(tài)保持要求所有相同用戶(hù)的請(qǐng)求都在同一臺(tái)機(jī)器上處理,無(wú)狀態(tài)的程序節(jié)點(diǎn)才能水平擴(kuò)展。無(wú)狀態(tài)一般有兩種設(shè)計(jì)思路,還以 Session為例,一種思路是把用戶(hù)的狀態(tài)保存在客戶(hù)端Cookie,每次請(qǐng)求都把客戶(hù)端的用戶(hù)信息帶到服務(wù)器端,淘寶的分布式Session就是該思 路的一種實(shí)現(xiàn);另一種思路是狀態(tài)保留在另外一個(gè)服務(wù)中,例如有些公司將Session放在分布式緩存中。
  性能是生命線(xiàn)
  去除單點(diǎn)之后的系統(tǒng)就可以水平擴(kuò)展,架構(gòu)如圖1所示。但隨著網(wǎng)站的推廣運(yùn)營(yíng),系統(tǒng)的規(guī)模開(kāi)始擴(kuò)大,此時(shí)可能會(huì)出現(xiàn)服務(wù)訪問(wèn)緩慢,甚至不可用的狀況,如何提升系統(tǒng)性能就成了架構(gòu)師的當(dāng)務(wù)之急。
  圖1 去除單點(diǎn)之后進(jìn)行水平擴(kuò)展
  存儲(chǔ)架構(gòu)和性能
  互聯(lián)網(wǎng)系統(tǒng)所有的性能瓶頸中,數(shù)據(jù)存儲(chǔ)和訪問(wèn)速度往往是最重要也是最難解決的,選擇合適的存儲(chǔ)是系統(tǒng)的關(guān)鍵。存儲(chǔ)的選擇一般需要從多個(gè)方面考量,如成本、內(nèi)容、用途和模型。目前主流的存儲(chǔ)介質(zhì)包括硬盤(pán)和內(nèi)存兩種。
  對(duì)機(jī)械硬盤(pán)來(lái)說(shuō),1秒可以完成150次左右的隨機(jī)I/O。而結(jié)合設(shè)計(jì)優(yōu)良的Hash算法,內(nèi)存查找可以每秒執(zhí)行40萬(wàn)次左右。硬盤(pán)的隨機(jī)讀寫(xiě)能力決定了其讀 寫(xiě)的最差性能,但操作系統(tǒng)在實(shí)現(xiàn)文件系統(tǒng)時(shí)會(huì)把最近讀寫(xiě)過(guò)的數(shù)據(jù)緩存在內(nèi)存中。由于磁盤(pán)訪問(wèn)和內(nèi)存訪問(wèn)性能量級(jí)的差距,從操作系統(tǒng)的Cache命中率就可 以簡(jiǎn)單計(jì)算文件存儲(chǔ)的性能,如果內(nèi)存命中率可以達(dá)到80%,系統(tǒng)的I/O能力相較完全隨機(jī)I/O將有5倍提升。
  對(duì)于數(shù)據(jù)層服務(wù)器,大內(nèi)存已成為標(biāo)配(一般為100GB左右),如果DB中存儲(chǔ)200GB的數(shù)據(jù),根據(jù)8/2原則,Cache命中率應(yīng)為87.5%,因此對(duì)MySQL而言,一般讀寫(xiě)可以達(dá)到每秒1千次以上。
  對(duì)于讀寫(xiě)頻率都很高、且可容忍數(shù)據(jù)丟失的場(chǎng)景,可以采用內(nèi)存作為數(shù)據(jù)存儲(chǔ)的介質(zhì)。可靠的內(nèi)存存儲(chǔ)需要每次操作都記錄Biglog,即使數(shù)據(jù)丟失也可以恢復(fù),同時(shí)內(nèi)存中的數(shù)據(jù)一般定期持久化到硬盤(pán)。
  從功能角度考量,還可以分為持久化存儲(chǔ)和Cache。持久化存儲(chǔ)也可稱(chēng)為可靠存儲(chǔ),Cache是為了提升系統(tǒng)性能,在可靠存儲(chǔ)的基礎(chǔ)上建立的訪問(wèn)性能更加高效的數(shù)據(jù)讀取節(jié)點(diǎn),通常是內(nèi)存存儲(chǔ),其架構(gòu)一般如圖2所示。
  圖2 持久化存儲(chǔ)和Cache
  存儲(chǔ)的數(shù)據(jù)模型一般分為結(jié)構(gòu)化存儲(chǔ)和NoSQL存儲(chǔ)。結(jié)構(gòu)化存儲(chǔ)以各種傳統(tǒng)DB為代表,NoSQL技術(shù)的代表系統(tǒng)則有HBase、Memcached、 Redis等。各種NoSQL系統(tǒng)雖然特性各異,但相對(duì)傳統(tǒng)DB而言,由于結(jié)構(gòu)化信息的缺失,往往不能做各種關(guān)聯(lián)查詢(xún),適用場(chǎng)景更多是主鍵查詢(xún),而且一般 是寫(xiě)少讀多的系統(tǒng)。
  對(duì)于大型互聯(lián)網(wǎng)公司,為了某些場(chǎng)景下的性能優(yōu)化,也會(huì)定制個(gè)性化的文件系統(tǒng),例如為了適應(yīng)大文件存儲(chǔ)的場(chǎng)景,Google開(kāi)發(fā)了GFS;為了更快讀取海量商品的描述圖片,TFS在阿里誕生。
  雖然各類(lèi)存儲(chǔ)快速涌現(xiàn),但DB作為結(jié)構(gòu)化數(shù)據(jù)的傳統(tǒng)存儲(chǔ)設(shè)備,依然在架構(gòu)中處于非常重要的地位。由于隨機(jī)I/O的瓶頸,DB的性能天花板十分明顯。在大型系 統(tǒng)中通常需要分庫(kù)操作,分庫(kù)一般有兩個(gè)維度——水平切分和垂直切分。水平切分一般根據(jù)主鍵規(guī)則或某種規(guī)則將同類(lèi)數(shù)據(jù)切分到不同的單元表中,原則是數(shù)據(jù)切分均勻,尤其是熱點(diǎn)數(shù)據(jù)分布均勻。
  垂直切分是把大表中的字段拆分到多張表。垂直切分一般按照數(shù)據(jù)訪問(wèn)頻率的不同。邏輯關(guān)系的差別進(jìn)行切分,例如將大字段、kv字段、計(jì)數(shù)等高頻訪問(wèn)字段單獨(dú)剝離存儲(chǔ)都是常見(jiàn)的垂直切分方案。
  除了切庫(kù)之外, MySQL的分表也會(huì)有效減少單表大小,使數(shù)據(jù)變得更簡(jiǎn)單,甚至可以做到不下線(xiàn)變更,單表索引規(guī)模的下降也會(huì)帶來(lái)性能的提升。
  分庫(kù)分表作為DB架構(gòu)中重要的一環(huán),使DB更加穩(wěn)健,但它給業(yè)務(wù)代碼帶來(lái)了額外的復(fù)雜性,最好通過(guò)中間件來(lái)屏蔽DB的底層分布,對(duì)業(yè)務(wù)透明。
  作為高性能網(wǎng)站必不可少的組件,Cache在各種主流架構(gòu)中也起著重要的作用。
  從部署模式上看,它可分為本地Cache和分布式Cache。本地Cache是指在應(yīng)用進(jìn)程中的Cache,通常的數(shù)據(jù)結(jié)構(gòu)是一個(gè)MAP,其優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn) 單,效率較分布式Cache更高,缺點(diǎn)是一般應(yīng)用程序服務(wù)器的內(nèi)存有限,導(dǎo)致本地Cache容量受到局限,而且數(shù)據(jù)冗余度較高,每個(gè)應(yīng)用服務(wù)器都需要一份 數(shù)據(jù),更新比較煩瑣,一般采用超時(shí)刪除機(jī)制。
  分布式Cache的容量較大,方便擴(kuò)容和更新,其數(shù)據(jù)分布可采用一致性Hash算法,減少節(jié)點(diǎn)變化帶來(lái)的數(shù)據(jù)遷移。
  引入Cache不可避免的問(wèn)題是服務(wù)器的宕機(jī)處理。Cache通常是一個(gè)集群,數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn),如果掛掉一個(gè)節(jié)點(diǎn),只會(huì)影響部分?jǐn)?shù)據(jù),而且對(duì)于可靠性要求較高的系統(tǒng),每個(gè)節(jié)點(diǎn)都可以有備份。
  作為可靠存儲(chǔ)的數(shù)據(jù)備份,Cache在架構(gòu)設(shè)計(jì)上往往承擔(dān)大部分讀訪問(wèn)需求,其命中率尤為重要。Cache不命中有兩種情況,一是數(shù)據(jù)在Cache中不存 在,二是在持久化存儲(chǔ)中也不存在。對(duì)于后者的頻繁訪問(wèn)會(huì)導(dǎo)致請(qǐng)求直接壓在DB上,在設(shè)計(jì)時(shí)應(yīng)盡量避免,可以通過(guò)維護(hù)Bitmap對(duì)持久化存儲(chǔ)中沒(méi)有的數(shù)據(jù) 進(jìn)行攔截,直接返回,也可以簡(jiǎn)單地將這些數(shù)據(jù)對(duì)應(yīng)空對(duì)象放進(jìn)Cache。
  Cache的存儲(chǔ)一般是將索引和數(shù)據(jù)分離,對(duì)于索引數(shù)據(jù)可以全量緩存,對(duì)于體量較大的數(shù)據(jù)一般采用部分緩存的方式。
  Cache的使用場(chǎng)景有一定的局限,對(duì)于較為靜態(tài)的數(shù)據(jù)才有意義,這個(gè)臨界值一般是5分鐘。由于當(dāng)前存儲(chǔ)技術(shù)的進(jìn)步,Cache也可以用其他高性能的存儲(chǔ)介質(zhì)代替,例如SSD的引入使得硬盤(pán)的隨機(jī)讀寫(xiě)能力提升數(shù)十倍,也會(huì)使得Cache的重要性有所下降。
  程序架構(gòu)和性能
  對(duì)一般的系統(tǒng)而言,程序邏輯的主要作用是調(diào)用各種數(shù)據(jù)訪問(wèn)接口,該操作通常需要等待,所以除搜索等少數(shù)系統(tǒng)外,程序邏輯一般是非CPU密集型。該類(lèi)系統(tǒng)中"線(xiàn)程"是稀缺資源,線(xiàn)程數(shù)和接口耗時(shí)構(gòu)成了系統(tǒng)的QPS能力。
  大型互聯(lián)網(wǎng)系統(tǒng)的QPS可能為幾萬(wàn)甚至峰值達(dá)到幾十萬(wàn),此時(shí)增加機(jī)器可以解決問(wèn)題,但這些機(jī)器的利用率其實(shí)很低,因?yàn)榇蟛糠謺r(shí)間是在等待,此時(shí)引入異步變得非常重要,異步在同樣的時(shí)間可以處理更多工作,擁有更好的性能。
  圖3 同步調(diào)用和異步調(diào)用
  利用Nio的多路復(fù)用方式可方便地實(shí)現(xiàn)異步系統(tǒng),當(dāng)然也可用協(xié)程令代碼更加清晰。業(yè)界流行的SEDA技術(shù)可將一次請(qǐng)求拆分為粒度更細(xì)的Actor,每個(gè) Actor使用獨(dú)立隊(duì)列,前一個(gè)的輸出是后一個(gè)的輸入。SEDA通過(guò)該方式將請(qǐng)求中等待和非等待的環(huán)節(jié)分離,提升了系統(tǒng)的吞吐量,這種方式在小米等互聯(lián)網(wǎng) 公司有較多應(yīng)用。
  除了異步之外,并行對(duì)系統(tǒng)也很重要,它可以有效縮短請(qǐng)求的響應(yīng)時(shí)間。批量接口也可以有效減少系統(tǒng)調(diào)用次數(shù),使得系統(tǒng)線(xiàn)程消耗更少,從而提升系統(tǒng)吞吐量。
  對(duì)線(xiàn)程而言,還有一個(gè)重要的參數(shù)是超時(shí)時(shí)間。響應(yīng)快的服務(wù),超時(shí)時(shí)間可以長(zhǎng)一些,對(duì)于響應(yīng)慢的服務(wù),超時(shí)時(shí)間可以短一些,盡快失敗是保護(hù)自己的有效手段。
  網(wǎng)絡(luò)架構(gòu)和性能
  大型網(wǎng)站的網(wǎng)絡(luò)接入一般是"DNS+負(fù)載均衡層+CDN"這種模式。對(duì)于大型互聯(lián)網(wǎng)公司,往往有多個(gè)IDC提供對(duì)外服務(wù),中國(guó)互聯(lián)網(wǎng)的南北不互通使得解決不 同地域不同運(yùn)營(yíng)商的接入速度問(wèn)題成了難題,該問(wèn)題的解決一般需要公司自己開(kāi)發(fā)DNS服務(wù)器,結(jié)合IP測(cè)速平臺(tái),引流用戶(hù)請(qǐng)求到訪問(wèn)速度最快的節(jié)點(diǎn)。
  大系統(tǒng)小做
  業(yè)務(wù)邏輯復(fù)雜多變,如何保證程序邏輯的代碼穩(wěn)定是架構(gòu)師需要解決的問(wèn)題,良好的模塊劃分和擴(kuò)展性強(qiáng)的接口設(shè)計(jì)都是解決這個(gè)問(wèn)題的利器。
  模塊是和領(lǐng)域模型相關(guān)的一個(gè)概念,其往往指系統(tǒng)中高內(nèi)聚的一個(gè)數(shù)據(jù)訪問(wèn)單元。例如對(duì)電商系統(tǒng)而言,最大的兩個(gè)領(lǐng)域模型分別是商品信息和交易信息,每個(gè)領(lǐng)域模 型對(duì)應(yīng)一系列數(shù)據(jù),商品會(huì)有商品的基本信息、類(lèi)目信息等,交易會(huì)包括交易的訂單,這些"領(lǐng)域模型+數(shù)據(jù)+業(yè)務(wù)方法"就構(gòu)成了一個(gè)個(gè)的模塊,高度內(nèi)聚的模塊 是數(shù)據(jù)的訪問(wèn)的入口。例如交易時(shí)也需要去獲取商品信息,但一般不會(huì)被允許直接調(diào)用商品模塊的數(shù)據(jù)表,而是通過(guò)商品模塊提供的接口進(jìn)行訪問(wèn),這樣做有下面一 些優(yōu)點(diǎn)。
  接口和數(shù)據(jù)分離,底層數(shù)據(jù)結(jié)構(gòu)的變化不會(huì)影響到外圍系統(tǒng)。
  數(shù)據(jù)直接暴露給其他系統(tǒng),增加了系統(tǒng)的不穩(wěn)定性。
  接口的收斂減少了重復(fù)開(kāi)發(fā),提高了系統(tǒng)可用性。
  對(duì)較小規(guī)模的應(yīng)用,模塊可部署在一起,但對(duì)大型系統(tǒng)而言,模塊一般是單獨(dú)部署,通過(guò)RPC交互,這樣可以減少彼此之間的系統(tǒng)層面影響。例如Amazon就傾向?qū)⑺蟹?wù)器程序暴露為接口。
  分布式系統(tǒng)增加了系統(tǒng)交互的復(fù)雜性,也為系統(tǒng)引入了更多潛在的失敗環(huán)節(jié),但分布式系統(tǒng)可以帶來(lái)的好處更明顯。
  有利于系統(tǒng)分級(jí),針對(duì)不同服務(wù)提供不同的可用性。
  大規(guī)模開(kāi)發(fā)有了可能,每個(gè)模塊可以單獨(dú)開(kāi)發(fā)和部署。
  系統(tǒng)可重用性加強(qiáng),避免重復(fù)制造輪子。
  服務(wù)治理更加簡(jiǎn)單,一般RPC天然提供容災(zāi),可以自動(dòng)發(fā)現(xiàn)新增節(jié)點(diǎn)和剔除問(wèn)題節(jié)點(diǎn)。
  邏輯層的接口設(shè)計(jì)如何做到穩(wěn)定呢?首先接口的設(shè)計(jì)不應(yīng)該是產(chǎn)品驅(qū)動(dòng)的,而應(yīng)該由數(shù)據(jù)驅(qū)動(dòng),盡量考慮接口以后的發(fā)展,接口的參數(shù)盡量是對(duì)象,參數(shù)不要采用boolean這種難以擴(kuò)展的數(shù)據(jù)類(lèi)型。
  邏輯層的接口設(shè)計(jì),一般有粗粒度和細(xì)粒度兩種模式。粗粒度接口的優(yōu)點(diǎn)是交互少,一次調(diào)用基本可以滿(mǎn)足需求,缺點(diǎn)是業(yè)務(wù)邏輯較多,所以不穩(wěn)定性增加,這里的不穩(wěn)定性不僅是系統(tǒng)穩(wěn)定性,還包括業(yè)務(wù)邏輯的穩(wěn)定性。細(xì)粒度接口交互較多,但更加有利于重用性。
  細(xì)粒度接口多次交互是否會(huì)帶來(lái)明顯的性能損耗呢?目前服務(wù)器1秒可以執(zhí)行近萬(wàn)次TCP連接,網(wǎng)絡(luò)傳輸對(duì)于千兆網(wǎng)卡而言,一般也不會(huì)造成瓶頸,尤其RPC框架般都會(huì)保持長(zhǎng)連接。因此,通常情況下我們可以忽略RPC調(diào)用帶來(lái)的性能損耗。
  邏輯層接口盡量采用大系統(tǒng)小做的原則,該原則是騰訊架構(gòu)中重要的價(jià)值觀。一個(gè)接口不做太多事情,只做關(guān)鍵路徑,非關(guān)鍵邏輯可以用消息隊(duì)列或事件通知等方式剝離出來(lái),使得關(guān)鍵路徑更加穩(wěn)定。這也體現(xiàn)了服務(wù)分級(jí)的思想,把最大的精力花在最重要的接口上。
  除了按重要性劃分服務(wù)之外,也可以按接入方劃分,避免不同終端的Bug影響。還可以按快慢劃分,例如為上傳文件等功能提供單獨(dú)的服務(wù),避免長(zhǎng)時(shí)間占用線(xiàn)程,影響系統(tǒng)穩(wěn)定性。
  模塊化是程序的水平切分,有時(shí)也會(huì)采用垂直切分,這種架構(gòu)有以下好處。
  系統(tǒng)規(guī)模更方便水平擴(kuò)展,數(shù)據(jù)處理能力會(huì)顯著增加。例如某個(gè)模塊的容量不足,可以單獨(dú)擴(kuò)容該模塊。
  減少系統(tǒng)耦合,提升穩(wěn)定性。例如將多變的Web層和穩(wěn)定的數(shù)據(jù)層進(jìn)行拆分,可以避免因?yàn)轫?yè)面頻繁發(fā)布導(dǎo)致的系統(tǒng)故障;將無(wú)線(xiàn)的接入層和Web接入層分離可以減少因?yàn)橐粋€(gè)接入方引起的全局問(wèn)題。
  開(kāi)放勢(shì)不可擋
  系統(tǒng)發(fā)展往往會(huì)帶來(lái)平臺(tái)化需求,例如微博的大多數(shù)服務(wù)除了滿(mǎn)足PC訪問(wèn),還要滿(mǎn)足移動(dòng)端及內(nèi)外部平臺(tái),此時(shí)系統(tǒng)通常會(huì)抽象出一個(gè)接入層。
  接入層設(shè)計(jì)
  接入層一般分為:通信、協(xié)議和路由模塊。
  常用的通信方式有TCP、UDP和HTTP等,對(duì)開(kāi)放平臺(tái)等以外圍接入為主的系統(tǒng)而言,HTTP因其簡(jiǎn)單方便是最合適的通信方式,而內(nèi)部系統(tǒng)接入出于性能考量,可以直接用TCP或者UDP。
  目前的主流協(xié)議有JSON、XML、Hessian等,對(duì)外部調(diào)用一般采用XML或者JSON,內(nèi)部系統(tǒng)可以采用Hessian或其他自定義的二進(jìn)制協(xié)議。
  路由層是根據(jù)用戶(hù)的信息將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)層。LVS可看作是路由層,根據(jù)IP協(xié)議將不同來(lái)源的請(qǐng)求轉(zhuǎn)發(fā)到不同IP Server,Nginx等具備反向代理的服務(wù)器也可以看作路由,根據(jù)不同URL轉(zhuǎn)發(fā)到不同后端。我們經(jīng)常會(huì)自定義路由層,通過(guò)用戶(hù)調(diào)用的不同方法轉(zhuǎn)發(fā)到 不同Server,或者根據(jù)用戶(hù)的特征,將用戶(hù)路由到我們的灰度測(cè)試機(jī)。
  云平臺(tái)概念
  具有了平臺(tái)化的接入功能,系統(tǒng)可以方便地接入內(nèi)部或者外部系統(tǒng),此時(shí)就具有了"云"的特征,對(duì)各種公有云或私有云來(lái)說(shuō),系統(tǒng)的隔離和自動(dòng)擴(kuò)容都十分重要,虛擬化等技術(shù)在該類(lèi)系統(tǒng)中有了充分應(yīng)用,例如阿里云等云平臺(tái)都大量使用了虛擬化。
  穩(wěn)定壓倒一切
  代碼穩(wěn)定性
  穩(wěn)定性是系統(tǒng)架構(gòu)中一以貫之的內(nèi)容,可以從圖4中理解它的含義。
  正常情況下,圖4左邊系統(tǒng)的性能明顯優(yōu)于右邊,但從架構(gòu)角度考慮,右圖要好于左圖,因?yàn)橥黄鸬拿淌沟孟到y(tǒng)的容量驟降,很容易引發(fā)雪崩。性能考量不僅是系統(tǒng)的最優(yōu)性能或者平均性能,最差性能往往也是系統(tǒng)出現(xiàn)問(wèn)題的原因。
  圖4 兩種穩(wěn)定性對(duì)比
  容災(zāi)
  除了特別小型的系統(tǒng),沒(méi)有100%可用的系統(tǒng)。一般需要根據(jù)系統(tǒng)的情況制定合適的目標(biāo),該目標(biāo)最通用的衡量維度是系統(tǒng)可用率。
  系統(tǒng)可用率是可以提供服務(wù)的時(shí)間與總時(shí)間的比率,常用的系統(tǒng)可用率如表1所示。
  而對(duì)于災(zāi)難,我們有下面幾個(gè)環(huán)節(jié)可以介入。
  預(yù)防:容量估算和接入方限流是常用的手段,以應(yīng)對(duì)宕機(jī)或者突發(fā)流量。
  發(fā)現(xiàn):主要依賴(lài)監(jiān)控和各種工具,可以分為系統(tǒng)、接口、公共組件、業(yè)務(wù)等方面。
  解決:應(yīng)對(duì)災(zāi)難需要我們事先做足功課,例如對(duì)外部的調(diào)用我們都有降級(jí)開(kāi)關(guān)可以隨時(shí)關(guān)閉;針對(duì)系統(tǒng)內(nèi)部某個(gè)接口導(dǎo)致整個(gè)系統(tǒng)失去響應(yīng)的場(chǎng)景,可以限制每個(gè)接口的并發(fā)量。
  系統(tǒng)容量的冗余和可水平擴(kuò)展也是容災(zāi)的必備要求,無(wú)狀態(tài)的系統(tǒng)對(duì)于系統(tǒng)擴(kuò)容更友好。
  作者楊光輝,淘寶北京研發(fā)中心技術(shù)專(zhuān)家,花名三玄。曾在互動(dòng)百科、騰訊科技等公司任職,對(duì)服務(wù)器端架構(gòu)和開(kāi)發(fā)等有一定研究。
  本文為《程序員》原創(chuàng)文章,未經(jīng)允許不得轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)聯(lián)系market#csdn.net(#換成@)
原文地址:http://iphone.myzaker.com/l.php?l=521eadaa81853d141800008e


該文章在 2013/10/9 21:54:15 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

日B视频免费大全| 欧美日韩一级爱| 亚洲色拍人| 久久国产欧美日韩在线观看视频| 国产精品少妇做爱一区二区不卡 | 综合AV一区二区三区四区| 看美女草妣| 亚洲最大黄色网址在线观看| 91嫖妓精品在线| 少妇太爽了在线观看一区无码| 日韩熟妇在线观看网站| 无码人妻精品一区二区三区玫瑰园| 亚洲人妖高潮中文字幕一二三区| 亚色网.COM| 日本成人天天| 欧美激情一区丁香五月| 亚洲清纯国产| 国产老妇女在线| 美女自拍尿眼一区二区三区| 亚洲欧美日韩久久区| 国产 伊人| 久 久 久 少 妇| 欧美亚洲日本国产综合在线| 日韩精品视频中文字幕高清视频 | 中中文字幕在线久久99| 日韩成人影院一区二区| 欧美牲| 偷拍日韩美女精彩视频| 亚洲精品生活大片婷婷| 99级国产精品黄色片| 综合一区和二区| 日韩欧美久久久一起| 国产八区自拍网站| 99特级片| 伦理片精品久久久久久| 亚洲欧洲国产高清无码分类视频| 久久精品国产亚洲AV导航| 中文字幕四级在线| 51久久精品一二三区| 中文字幕人妻被公喝醉在线| 沙湾县|