搜尋
首頁Javajava教程淺談Java應用分散式架構的演進過程

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

Jul 19, 2018 am 09:32 AM
java程式設計語言


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

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
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。