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