分布式部署


分布式部署

目錄

什么是分布式系統... 1

為何需要分布式... 1

分布式系統的特點... 1

分布式系統的缺點... 2

什么是分布式部署... 2

什么是分布式架構... 2

架構師需要懂部署嗎... 2

架構分布式系統的常見關注點... 2

分布式架構部署的演變... 3

分布式部署給開發帶來的問題... 4

模塊間的相互調用... 4

統一會話管理... 6

單點登錄... 7

一致性更新... 7

分布式事務... 8

高可用性(HA)... 9

 

什么是分布式系統

通俗點說:就是能把系統進行拆分並部署到多台服務器上的系統。(注意區分 分層和集群)

專業點說:分布式軟件系統(Distributed Software Systems)是支持分布式處理的軟件系統,是在由網絡互聯的多處理機體系結構上執行任務的系統。常見的有:分布式操作系統、分布式程序設計語言及其編譯(解釋)系統、分布式文件系統、分布式數據庫系統、分布式應用系統等。

為何需要分布式

單台服務器已經無法承受訪問壓力、大數據處理、高並發訪問、高可用性,自動容錯、並行、高性能應用……

分布式系統的特點

1:面對高並發、大數據量的處理要求

2:高可擴展性(可伸縮)

3:高性能

4:異構:操作系統、硬件、程序語言等

5:同步、異步操作混雜

6:安全性:授權認證、SSO單點登錄、0auth等

7:透明性,如:訪問透明、位置透明、並發透明、故障透明、伸縮透明等

分布式系統的缺點

相互調用不便、網絡通信的可靠性、網絡傳輸數據的安全問題、系統開發更復雜、測試困難……

什么是分布式部署

簡單點說:就是把程序或數據,分散部署到多台物理服務器上,但他們組

合起來,形成一個整體對外提供服務。

什么是分布式架構

簡單點說:就是系統的架構和設計,要能支持和滿足系統進行分布式部署的需要

架構師需要懂部署嗎

必須要懂,不但要懂,還要會規划。程序的架構、設計和實現都要考慮部署。

架構分布式系統的常見關注點

常見的有:可用性、性能、可靠性、可擴展、易管理、成本等。

實際設計中,要根據具體應用,對這些點進行綜合考慮和權衡。

分布式架構部署的演變

■1台服務器的最簡部署

■分離Web服務器和數據庫服務器

■水平增加Web服務器,加入Varnish

■加入分布式的文件系統

■加入緩存服務

■MySq1數據庫的主從集群、讀寫分離

■繼續水平增加Web服務器,加入Nginx

■按業務進行緩存分離,緩存集群

■數據庫分區、分庫、分表

■加入NoSQL數據庫

■加入消息系統,進行異步處理

■集群:Web服務器、緩存服務器、文件系統、消息處理系統、數據庫、NoSQL等

■對應用進行拆分部署,比如:分層拆分、甚至是功能級的細粒度拆分

■加入F5等硬件設備,加入CDN

■對重要的節點進行HA集群,或者是雙機熱備,以保障可用性

 

分布式部署給開發帶來的問題

■分布式部署會帶來很多問題,有很多在開發期間就要考慮到,比如:

1:各個拆分開的模塊間如何相互調用

2:單點登錄

3:會話的統一管理

4:一致性更新

5:分布式事務

6:關鍵服務的可用性保障

模塊間的相互調用

■Java中常見的遠程調用方式:

Socket、Http、TCP、UDP、RPC、RMI、JMS、WebService……

■常見的框架介紹

1:Hessian:類似於RMI,使用二進制消息來進行遠程調用。與RMI不同的是,它的二進制消息可以在非Java中使用,它實現了一種跨編程語言的對象序列化方法

2:Burlap:是一種基於XL的遠程調用技術,但和其他基於XML的遠程技術(如SOAP

或XML-RPC)不同,Burlap的消息結構是盡可能的簡單,不需要額外的外部定義

語言(如WSDL)

3:Dubbo:阿里開源的分布式服務框架,通過高性能的RPC實現遠程服務的調用,可以和Spring框架無縫集成,其架構類似於ESB。

4:Sprinlg的HttpInvoker:類似於RMI,基於HTTP協議來進行遠程調用,使用java的序列化機制,要求客戶端和服務端都是基於Java的

5:WebService

■方案的選擇

一:如果系統全部為內部可控的

1:量級不太大,可以考慮使用Hessian/Burlap

2:量級較大,且交互要求較高,那么dubbo是一個現成、成熟的選擇

缺點:需要很多額外的成本,比如學習成本,按需改進的成本等

3:交互要求並不高,主要是相互調用的需求,可以考慮自己實現

優點:完全按需定制,完全可控,升級、改進和完善都方便

缺點:需要投入開發成本,且完善成熟有一個過程

二:系統包含很多外部的應用,不能全部可控,且很多異構的系統

1:如果要求不是很復雜的話,WebService是不錯的選擇

2:如果要求非常復雜,且涉及很多業務流,那就選擇一個ESB平台

■更多需要考慮的問題

1:長連接,連接池,可以考慮HttpClient

2:高並發,多線程池,可以考慮使用apache的common-pool

3:快速的網絡傳輸,可以考慮使用NI0,比如:Mina框架,Netty框架等

4:大數據量,數據壓縮傳輸,可以考慮Java的GZip

5:可用性、穩定性、容錯

6:分布式的事務

7:訪問安全、數據安全等

8:服務的集群,服務的注冊和管理等

統一會話管理

■解決方案

1:根據IP或者Cookie來映射訪問同一服務器,如:Nginx的IP_Hash,nginx-

upstream-jvm-route等

2:采用統一的會話管理,可以把會話數據存放在公共的地方,比如Memcached

(1)自行實現

(2)結合框架去實現,比如使用Shiro

3:把會話序列化后,存放到客戶端Cookie里面

■更多的問題
1:如果用戶關閉了Cookie
2:Cookie數據的安全性
3:跨域訪問Cookie
4:公共緩存的規划、集群和數據維護

單點登錄

跟EAI中的SSO相比,這里所說的單點登錄是很簡單的,算不上是“真正”的SSO

1:本身就是一個系統,只有一套用戶和權限系統

2:對用戶的驗證方式是統一的

3:都是內部系統,相互信任,所以也就不用驗證是否可訪問系統了

■解決方案

1:簡單的:使用Shiro的統一會話管理,實現單點登錄

2:稍麻煩些的:使用Shiro+CAS來實現

3:更麻煩的:使用專業的SSO框架或產品

一致性更新

■分布式的一致性介紹

對於一致性,可以分為從客戶端和服務端兩個不同的視角。從客戶端來看,一致性指的是並發訪問時更新過的數據如何獲取的問題;從服務端來看,則是更新的數據如何復制分布到整個系統,以保證數據最終一致。一致性是有並發讀寫才有的問題,因此在理解一致性的問題時,一定要注意結合考慮並發讀寫的場景。

■CAP的最終一致性

從客戶端角度,並發訪問時,更新過的數據在不同進程如何獲取的不同策略,決定了不同的一致性。

對於關系型數據庫,要求更新過的數據能被后續的訪問都能看到,這是強一致性;如果能容忍后續的部分或者全部訪問不到,則是弱一致性;如果經過一段時間后要求能訪問到更新后的數據,則是最終一致性。

■常見的解決方案

一:有一個公共的數據庫

1:單點部署,也就是整個系統中只有一個地方能修改這個數據

2:采用版本控制

二:分散到多個數據庫

1:可以把問題簡化成為只有一個數據庫的情況

2:采用預分配數據,動態進行邏輯調整

分布式事務

■解決方案

1:同一個Web服務器,多個數據庫,可以使用Atomikos

2:跨越多個Web服務器的事務,如果遠程調用支持事務傳播,那么使用JTA就可以;如果不支持事務傳播,就盡量轉化為一個web服務器的情況

3:自行開發事務邏輯事務管理器

4:采用業務補償回滾的方式

5:重新設計和規划

高可用性(HA)

■解決方案

可以使用Keepalived/Heartbeat等類似的軟件

■什么是HA

HA(High Available),高可用性群集,指的是通過一組計算機系統提供透明的冗余處理能力,從而保證系統服務高度的連續可用。

■幾點說明

1:HA通常是軟件和硬件相結合的集群方案,是自動且透明的

2:只有硬件的方案不是HA,那是熱備,通常是人工的切換備用機

3:HA通常由軟件檢測故障,一旦故障發生立即切換服務到集群中正常的服務上,通過提供故障恢復,實現最大化系統和應用的可用性

4:HA在故障恢復的切換過程中,會有短暫的服務暫停的過程,因為選舉新的服務器,以及資源轉移都需要一定的時間,當然這個時間很短

5:HA的衡量指標通常有:平均無故障時間(MTTF),平均維修時間(MTTR),可用性=MTTF/(MTTF+MTTR)

■HA的幾種常見部署模式

1:主從方式:兩台服務器,一台為主,另外一台為備份服務器

2:對稱方式:兩台服務器,互為備份

3:多機方式:多台服務器,故障時切換至其中一台

■HA的基本實現原理

1:提供虛擬IP給外部訪問

2:節點之間通過心跳或信息報文來確定健康狀態

3:節點之間通訊通常會加密,以防止非法主機加入

4:當前提供服務的機器出現問題后,需要按照一定的規則,投票選舉出新的提供服務的機器,並接管服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM