1946年,世界上臺電子計(jì)算機(jī)在美國的賓夕法尼亞大學(xué)誕生,它的名字是:ENICAC ,這臺計(jì)算機(jī)的體重比較大,計(jì)算速度也不快,但是而代表了計(jì)算機(jī)時(shí)代的到來,再以后的互聯(lián)網(wǎng)的發(fā)展中也有基礎(chǔ)性的意義。
計(jì)算機(jī)的組成是有五部分完成的,分別是:輸入設(shè)備,輸出設(shè)備,存儲(chǔ)器,存儲(chǔ)器里面由運(yùn)算器和控制器,有一個(gè)馮諾依曼的模型非常形象的對象計(jì)算機(jī)的組成進(jìn)行了描述,不過計(jì)算機(jī)也是有數(shù)據(jù)流,指令流,控制流來進(jìn)行計(jì)算的和正常運(yùn)轉(zhuǎn)的。如圖:
ENIAC之后,電子計(jì)算機(jī)進(jìn)入到了IBM主導(dǎo)的大型機(jī)的時(shí)代, 在1946年臺IBM大型機(jī)SYSTEM/360誕生,這使得IBM在20世紀(jì)50~60年代統(tǒng)治了整個(gè)大型計(jì)算機(jī)的工業(yè),在大型主機(jī)時(shí)代,計(jì)算機(jī)架構(gòu)向兩個(gè)方向發(fā)展CISC(微處理器執(zhí)行的計(jì)算機(jī)語言指令集)CPU為架構(gòu)的價(jià)格便宜的個(gè)人PC和RISC(精簡指令集計(jì)算機(jī))價(jià)格高的小型UNIX服務(wù)器。
大型主機(jī)的出現(xiàn),憑借著計(jì)算能力和處理能力,高的穩(wěn)定性和安全性,在很長的一段時(shí)間內(nèi)引領(lǐng)到計(jì)算領(lǐng)域的發(fā)展。但是集中式的計(jì)算機(jī)系統(tǒng)來帶來了一些問題,來越來越不能滿足用戶的需求比如說:
1.大型的主機(jī)非常貴,一般的小企業(yè)用不起。
2.大型主機(jī)比較復(fù)雜,培養(yǎng)人才的成本比較高。
3.單點(diǎn)問題,如過大型機(jī)出現(xiàn)故障,整個(gè)系統(tǒng)都掛了運(yùn)行不了,使企業(yè)的損失非常大。
4.隨著技術(shù)的進(jìn)步,個(gè)人PC電腦的性能越來越高,成本也越來越低。
阿里巴巴在2009年發(fā)起了一項(xiàng)去“IOE”的驅(qū)動(dòng)
IOE指的是IBM的小型機(jī),Oracle的數(shù)據(jù)庫和EMC的高端存儲(chǔ)設(shè)備,2009年的去IOE的運(yùn)動(dòng),一直到2003的支付寶的一臺IBM的小型機(jī)的下線。
為什么要去IOE
阿里巴巴過去數(shù)據(jù)庫使用的是Oracle,并使用小型機(jī)和高端存儲(chǔ)設(shè)備提供高性能的數(shù)據(jù)處理和存儲(chǔ)服務(wù)。隨著公司的業(yè)務(wù)量的上升,用戶規(guī)模的不斷上漲,傳統(tǒng)的集中式的架構(gòu)Oracle數(shù)據(jù)庫在擴(kuò)展方面遭遇了瓶頸。向傳統(tǒng)的Oracle,DB2都是以集中式的為主,存在的缺點(diǎn)就是擴(kuò)展性的不足,集中式的擴(kuò)展主要是采用的是向上的擴(kuò)展不是水平的擴(kuò)展,這樣時(shí)間長了,早晚都會(huì)遇到系統(tǒng)瓶頸。
一.分布式架構(gòu)的常見概念
集群
小飯店原來是一個(gè)廚師,切菜洗菜備料炒菜全干。后來客人多了,廚房一個(gè)廚師忙不過來,又請了個(gè)廚師,兩個(gè)廚師都能炒一樣的菜,這兩個(gè)廚師的關(guān)系就是集群。
分布式
為了讓廚師專心炒菜,把菜做到,又請了個(gè)配菜師負(fù)責(zé)切菜,備菜,備料,廚師和配菜師的關(guān)系就是分布式的,一個(gè)配菜師也忙不過來,有請了個(gè)配菜師,這兩個(gè)配菜師的關(guān)系就是集群了。所以說有分布式的架構(gòu)中可能有集群,但集群不等于有分布式。
節(jié)點(diǎn)
節(jié)點(diǎn)是指一個(gè)可以獨(dú)立按照分布式協(xié)議完成一組邏輯的程序個(gè)體。在具體的項(xiàng)目中,一個(gè)節(jié)點(diǎn)表示的是一個(gè)操作系統(tǒng)上的進(jìn)程。
副本機(jī)制
副本指的是在分布式系統(tǒng)中為數(shù)據(jù)或服務(wù)提供冗余。
數(shù)據(jù)副本指在不同的節(jié)點(diǎn)上持久化同一份數(shù)據(jù),當(dāng)出現(xiàn)某一個(gè)節(jié)點(diǎn)的數(shù)據(jù)丟失時(shí),可以從副本讀取數(shù)據(jù)。數(shù)據(jù)副本是分布式系統(tǒng)中結(jié)果數(shù)據(jù)丟失的手段。
服務(wù)副本表示的是多個(gè)節(jié)點(diǎn)提供相同的服務(wù),通過主從關(guān)系來實(shí)現(xiàn)服務(wù)的高可用方案。
中間件
中間件位與操作系統(tǒng)提供的服務(wù)之外,又不屬于應(yīng)用,它是位與應(yīng)用和系統(tǒng)層之間為開發(fā)者方便的處理通信,輸入和輸出的一類軟件,能夠讓用戶關(guān)心自己應(yīng)用的一部分。
架構(gòu)的發(fā)展過程
一個(gè)成熟的大型網(wǎng)站系統(tǒng)架構(gòu)并不是一開始就設(shè)計(jì)的非常完美的,也不是一開始就具備高性能,高可用,安全性等特性,而是隨著用戶量的增加,業(yè)務(wù)功能的擴(kuò)展慢慢完善演變過來的。在這個(gè)發(fā)展過程中,開發(fā)模式,技術(shù)架構(gòu)等都會(huì)發(fā)生非常大的變化。
假如系統(tǒng)具備一下功能:
用戶模塊:用戶注冊和管理
商品模塊:商品展示和管理
交易模塊:創(chuàng)建交易及支付結(jié)算
階段一:單應(yīng)用架構(gòu)
系統(tǒng)的初級都是應(yīng)用和數(shù)據(jù)庫都放在一臺服務(wù)器上。
階段二:應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器分離
隨著網(wǎng)站的用戶量增大,流量增大,對應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器單獨(dú)的部署機(jī)器,這樣可以增加系統(tǒng)的性能,提高訪問的效率,提高單機(jī)的負(fù)載能力和容災(zāi)的能力。
階段三:應(yīng)用服務(wù)器集群-應(yīng)用服務(wù)器負(fù)載告警
隨著訪問量和流量的增加,假設(shè)數(shù)據(jù)庫沒有遇到瓶頸,對應(yīng)用服務(wù)器集群來對請求進(jìn)行分流,提高程序的性能。存在的問題:用戶的請求由誰來轉(zhuǎn)發(fā),session如何來管理的問題。
階段四:數(shù)據(jù)庫壓力變大-數(shù)據(jù)庫讀寫分離
讀寫分離的話,這樣以后的請求,查詢的請求就可以去從庫里面讀數(shù)據(jù),寫的數(shù)據(jù)可以到主庫中了,但是會(huì)帶來幾個(gè)問題:
1.主從的數(shù)據(jù)庫之間的數(shù)據(jù)同步:可以使用mysql自帶的master-slave方式實(shí)現(xiàn)主從復(fù)制
2.對應(yīng)的數(shù)據(jù)源的選擇:采用第三方數(shù)據(jù)庫中間件,例如:mycat
階段五:使用搜索引擎緩解讀庫的壓力
數(shù)據(jù)庫做讀庫的話,常常對模糊查詢的性能不是很好,特別是對于大型的互聯(lián)網(wǎng)公司來說,想搜索的模塊就比較核心了,這是可以使用搜索引擎了,雖然可以大幅度的提高查詢的速度,但是同時(shí)也會(huì)帶來一些問題比如索引的構(gòu)建。
階段六:引入緩存機(jī)制緩解數(shù)據(jù)庫的壓力
對一些熱點(diǎn)的數(shù)據(jù),可以使用redis,memcache來作為應(yīng)用層的緩存;另外在某些場景下,可以使用mongodb來替代關(guān)系型數(shù)據(jù)庫來存儲(chǔ)。
階段七:數(shù)據(jù)庫的水平/垂直拆分
垂直拆分:把數(shù)據(jù)庫中不同的業(yè)務(wù)數(shù)據(jù)拆分到不同的數(shù)據(jù)庫中。
水平拆分:把同一個(gè)表中的數(shù)據(jù)拆分到兩個(gè)甚至更多的數(shù)據(jù)庫中,水平拆分的原因是某些業(yè)務(wù)量數(shù)據(jù)量大的已經(jīng)達(dá)到了單個(gè)數(shù)據(jù)庫的瓶頸,這時(shí)候可以采取將表拆分到多個(gè)數(shù)據(jù)庫中。
階段八:應(yīng)用的拆分
隨著業(yè)務(wù)的發(fā)展,業(yè)務(wù)越來越多,應(yīng)用的壓力越來越大。工程規(guī)模也越來越龐大。這個(gè)時(shí)候就可以考慮將應(yīng)用拆分,按照領(lǐng)域模型將我們的用戶,商品,交易分拆成子系統(tǒng)。
這樣拆分以后,可能會(huì)有一些相同的代碼,比如用戶操作,商品的交易查詢,所有會(huì)導(dǎo)致每個(gè)系統(tǒng)都會(huì)有用戶查詢和訪問相關(guān)的操作。這些相同的代碼和模塊一定要抽象出來。這樣有利于維護(hù)和管理。
服務(wù)拆分以后,服務(wù)之間的通信可以通過RPC技術(shù),比較典型的有:webservice、hession、http、RMI等。
粵嵌科技創(chuàng)辦于2005年是一家IT高新技術(shù)企業(yè),專注IT職業(yè)教育13年,主要培訓(xùn)課程分別有嵌入式培訓(xùn)、Java培訓(xùn)、Unity游戲開發(fā)、Python人工智能、HTML5前端開發(fā)、全棧UI設(shè)計(jì)、網(wǎng)絡(luò)營銷、CCIE網(wǎng)絡(luò)等專業(yè)課程。