首頁 >Java >java教程 >淺談Java應用分散式架構的演進過程

淺談Java應用分散式架構的演進過程

无忌哥哥
无忌哥哥原創
2018-07-19 09:32:261737瀏覽


一.分散式架構的發展歷史

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等。

以上是淺談Java應用分散式架構的演進過程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn