系統架構設計理論與原則

一、無共享架構

1、無共享架構

????? 無共享架構是一種分布式計算架構,這種架構中不存在集中存儲的狀態,系統中每個節點都是獨立自治的,整個系統中沒有資源競爭,這種架構具有非常強的擴張性,目前在web應用中被廣泛使用。

????? 無共享架構的一個重要實踐指導原則就是避免在互聯系統中使用Session,因為實踐已經證明,在一個集群分布式計算環境中,若Session狀態維護在各個節點服務器上,為了保證狀態一致性,節點間Session數據需要互相拷貝同步,嚴重影響性能,我們需要盡可能的改造現有架構不要使用Session。

?2、對比

shared-nothing、shared-memory、shared-disk是并行系統最常使用的模式。
shared-memory:多個cpu共享同一片內存,cpu之間通過內部通訊機制進行通訊
shared-disk:每一個cpu使用自己的私有內存區域,通過內部通訊機制直接訪問所有磁盤系統
和shared-memory、shared-disk相比,shared-nothing優勢明顯,在針對多用戶并行訪問的時候,通過橫向擴充資源,能夠大大減少響應時間,提升整體吞吐量和效率。

3、分片

shared noting需要確立一種分片策略,使得依據不同的分片策略,減少資源競爭。

三種基本的分片策略結構:

(1)功能分片 根據多個功能互相不重疊的特點進行分片,這種方式已經在ebay取得巨大成功。缺點也很明顯,即技術人員需要深入理解應用領域,才能更好地分片;

(2)鍵值分片 在數據中找到一個可以均勻分布到各個分片中的鍵值。

(3)查表 在集群中有一個節點充當目錄角色,用于查詢哪個節點擁有用戶要訪問的數據。缺點在于這個表可能成為整個系統的瓶頸及單點失效點;

二、負載均衡

??????負載均衡(Load Balance),顧名思義,是把服務的并發請求均衡地負載到后端多個具有相同能力的服務進行處理分擔,以廉價有效透明的方式擴展網絡設備或服務的帶寬,增加吞吐量,增強服務的整體處理能力,提供服務的靈活性和可用性。

常見的典型的負載均衡應用場景:

(1)、web集群:將大量的并發訪問或數據流量分擔到多臺節點設備上分別處理,減少用戶等待響應的時間。

(2)、MapReduce:單個重負載的運算分擔到多臺節點設備上做并行處理,每個節點設備處理結束后,將結果匯總,返回給?戶,系統處理能?得到大幅度提高。

負載均衡算法

??????負載均衡算法是負載均衡設備(包括虛擬設備或相關軟件)在執行負載均衡調度,選擇具體處理的后端服務的時候使用的調度和分發的邏輯。負載均衡的算法只是規定了調度和分發的邏輯,在不同的負載均衡方案中都可能使用相同和(或)類似的算法,它只是負載均衡方案的一部分。

常見的主流負載均衡算法包括:

(1)輪詢算法:Round Robin/Weight Round Robin Scheduling

???? 輪詢算法通過依次輪叫的方式依次將請求調度不同的后端服務器(Real Server)。通常可以分為普通輪詢和加權輪詢兩種方式。算法的優點是簡潔且無狀態。

???? 算法簡單表示為:i = ( i + 1 ) mod n

(2)Hash算法: 隨機數Hash,Sources Hashing Scheduling

???? Hash算法,又叫取余算法。一般是對請求報文中的某項數據(key,一般常用客戶端來源IP)計算Hash值,然后按機器數量(n)取模。

???? 算法簡單表示為:idx = Hash(key) % n?

?????Hash算法中,Key的選擇常用實踐如下:

???? a、請求時間或隨機數 特點是簡單,具有一定分散性,但不穩定,一般用于要求不高的負載均衡場景。

???? b、來源IP

???? 特點是簡單。如果客戶的分布比較廣,這種方式分散性較好。但如果較多的客戶請求來源于同一IP(公司網絡通過路由器上網),分散效果較差。

??? 大多負載均衡設備都支持這種算法,著名的nginx和LVS等軟件也支持。

(3)一致性Hash算法:Consistency Hash Scheduling

????一致性Hash算法最常用于分布式緩存(如memcached、redis等)的定位,但同時也可以在系統或程序中用于負載均衡,該算法本來的意義就在于分散負載和快速定位。

(4)最少連接或請求數: (Weight)Least Connection/Request Scheduling

????最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。

??? 算法主要邏輯是,調度設備或服務記錄后端服務器接受請求的計數,每次請求總是發給計數最小的服務器處理。

(5)最大空閑:Most idle First(基于監控CPU,內存,帶寬等綜合評估) (6)、平均最快響應:平均最快響應 (7)、最少流量:Least Traffic Scheduling

??? 還有一種常見的就是基于會話的負載實現,但是嚴格來說Session(一般用于WEB)不能算是算法。Session實現負載均衡的主要過程為:首次請求記錄用戶的SessionID,然后再通過輪詢等算法選擇后端服務器,如果用戶后續使用同一SessionID發起請求,則無需再選擇服務器,直接轉發給前面根據SessionID找到的對應的后端服務器。

負載均衡模式

??? 負載均衡模式主要是指在整體方案中選擇從服務網絡的哪個層次或哪個產品來實現負載均衡方案。

1、外部模式(RR-DNS)

??? RR-DNS,即DNS輪詢模式,它的原理是利用DNS服務器支持同一域名配置多個獨立IP指向,然后輪詢解析指向IP實現多次訪問的調度和分發,實現負載均衡。

它的主要特點為:

a、負載均衡實現與后端服務完全沒有關系,有DNS在本地解析指向實現輪詢調度。這個方面來看性能最佳效率最高。

b、DNS服務無法檢測到后端服務器是否正常,在TTL失效前,會一直指向失效的服務器,這就要求在實踐生成中,必須解決后端服務器的高可用問題。

c、一般的第三方DNS服務提供商都支持該功能,但如果更新頻率高或附帶更新邏輯,一般會在系統內自鍵DNS服務,然后在注冊為公共DNS服務。

2、應用層模式

??? 正向代理:用戶通過代理服務訪問internet, 把internet返回的數據轉發給用戶。正向代理對于整個網絡請求,它的角色實際是客戶端,代理客戶對外的訪問請求。 反向代理:接受internet上用戶的請求,轉發給內部的多臺服務器處理,完成后轉發后端服務器的返回給對應的用戶。反向代理對于整個網絡請求,它的角色實際是服務器,代理接受(accept)所有用戶的請求。

?? 反向代理應用模式:常見的反向代理應用模式,比如通過 Apache, nginx等Web服務器軟件實現WEB應用的負載均衡和高可用。利用反向代理軟件實現負載均衡是性價比較高的模式。

三、高可用性系統設計

?? 系統高可用性的常用設計模式包括三種,包括:

???1、主備(Active-Standby)

工作原理:主機工作,備機處于監控準備狀況;當主機宕機時,備機接管主機的一切工作,待主機恢復正常后,按使用者的設定以自動(熱備)或手動(冷備)方式將服務切換到主機上運行。一般需要人工干預才能回復初始狀態。

?? 2、互備(Active-Active)

工作原理:兩臺主機(A標記為主,B標記為備)同時運行各自的服務工作且相互監測情況,當任一臺主機(A)宕機時,另一臺主機(B,啟用并標記為主)立即接管它的一切工作,保證工作實時可用

? 3、集群(Cluster)

工作原理:多臺具有相同能力的服務同時對外提供透明服務,所有服務之間都是Active-Active關系,并分擔處理服務請求,一般通過總控節點或集群軟件(例如zookeeper等)進行高可用的控制。

轉載于:https://www.cnblogs.com/moonandstar08/p/5049853.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VS2010 教程:創建一個 WPF 應用程序 (第一節)

來自:https://msdn.microsoft.com/zh-cn/library/ff629048.aspx [原文發表地址] VS2010 Tutorial: Build a WPF App (Step 1) [原文發表時間] Friday, May 22, 2009 8:00 AM 這篇文章里,我將使用VS2010 Beta 1創建一個WPF 應用程序。并且 我將展示這個產…

js 日期星期 帶農歷

Weekday代碼 //得到當前日期如2009年6月19日 星期五 function getDate(){ var today new Date(); var x new Array("星期日", "星期一", "星期二","星期三","星期四", "星期五","星期六"…

FMDB的使用

// // FMDBmanager.h // database // // Created by PRL on 16/10/13. // Copyright © 2016年PRL. All rights reserved. // #import <Foundation/Foundation.h> interface FMDBmanager : NSObject{ FMDatabase * _db; } (FMDBmanager *)sharedManager; //獲取…

深入淺出WPF之Binding的使用(一)

from: http://www.cnblogs.com/akwwl/p/3421005.html 在WPF中Binding可以比作數據的橋梁&#xff0c;橋梁的兩端分別是Binding的源&#xff08;Source&#xff09;和目標&#xff08;Target&#xff09;。 一般情況下&#xff0c;Binding源是邏輯層對象&#xff0c;Binding目…

arm處理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依據什么來分類的【轉】

轉自&#xff1a;http://blog.csdn.net/maochengtao/article/details/9951131ARM處理器發展這么多年&#xff0c;有很多架構&#xff0c;很多不同的內核 架構有armv1 v2 v3 v4 v5 v6 v7 內核太多了&#xff0c;比如armv1對應的是arm1&#xff0c;armv5對應的arm9&#xff0c;ar…

前端開發一些很有用的工具

apiview.com 接口規范管理平臺 restClient 谷歌瀏覽器接口測試工具 postman 接口測試工具 SSH Secure Shell Client 抓包工具 SSH SecureFile Transfer Client wireshark 抓包分析工具 Xshell linux遠程工具 Balsamiq Mockups 原型圖 visio 流程圖 xmind top圖 SourceCounter、…

所有的iPhone設備cell的寬度都是320,解決辦法是?

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.frameCGRectMake(0, 0, SW, 44); } return self; } 自己重設一下寬度就行了

深入淺出WPF之Binding的使用(二)

from: http://www.cnblogs.com/akwwl/p/3421250.html 在上一篇中介紹了Binding的基本綁定方法&#xff0c;這一篇中我們在深入的介紹Binding的其他用法。 Binding的源也就是數據的源頭&#xff0c;在日常的工作中&#xff0c;除了使用像上一篇中的Student對象作為數據源外&a…

iOS 推送

最近在研究ios的推送問題&#xff0c;遇到了一些問題&#xff0c;最終整理了一下。放在這里和大家分享APNS的推送機制首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖 Provider就是我們自己程序的后臺服務器&#xff0c;APNS是Apple Push Notification Service的縮寫…

Bash判斷文件夾(目錄)是否存在

1 #!/bin/bash 2 if [ -d DirName ]; then 3 echo Dir exist 4 else 5 echo Dir not exist 6 fi 轉載于:https://www.cnblogs.com/imzye/p/5059031.html

iOS 加載本地html文件詳細操作

webView的加載&#xff0c;如果是純文本&#xff0c;有內部樣式的話&#xff0c;簡單的加載請求就可以了。如下: 這種加載簡單直接&#xff0c;易操作。 如果需要加載images&#xff0c;css文件 需要把xcode的項目請求路徑的位置告訴webView.代碼如下&#xff1a; 這樣html文件…

HDU 5573 Binary Tree 構造

Binary Tree題目連接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid5573 Description The Old Frog King lives on the root of an infinite tree. According to the law, each node should connect to exactly two nodes on the next level, forming a full binary…

志邦櫥柜坑爹,志邦櫥柜大忽悠,志邦櫥柜欺騙

本人實實在在經歷的&#xff0c;志邦櫥柜就是個大忽悠,志邦櫥柜沒誠信!! 志邦櫥柜先騙客戶下訂單,在預算時低開,到真正簽合同時&#xff0c;不僅僅尺寸坑你,一大堆增項都會出來,原本1.5w預算到最后簽合同總價到2.2w,簽合同增項高開最后志邦櫥柜總價超預算非常非常離譜&#xff…

多線程的那點兒事(之讀寫鎖)

在編寫多線程的時候&#xff0c;有一種情況是十分常見的。那就是&#xff0c;有些公共數據修改的機會比較少。相比較改寫&#xff0c;它們讀的機會反而高的多。通常而言&#xff0c;在讀的過程中&#xff0c;往往伴隨著查找的操作&#xff0c;中間耗時很長。給這種代碼段加鎖&a…

iOS獲取設備IP

獲取iOS設備IP wifi和流量環境下 在網上找的比較好的獲取ip的代碼 #include <ifaddrs.h> #include <arpa/inet.h> #include <net/if.h> #define IOS_CELLULAR "pdp_ip0" #define IOS_WIFI "en0" #define IOS_VPN …

一些不錯的網站

http://www.huxiu.com/虎嗅網&#xff0c;一個關注最新創業信息的網站http://36kr.com/創業天花板https://www.zhihu.com/與世界分享你的經驗http://www.mafengwo.cn/世界那么大&#xff0c;想去哪就去那http://www.mt-bbs.com/找到屬于自己的設計本http://www.guokr.com/科技有…

[原]詳解如何將cocos2dx項目編譯到Android平臺上的(方式一:Cywin+NDK)

鏈接地址&#xff1a;http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8閱讀578 評論0 前言&#xff1a;cocos2dx作為一個開源的移動2D游戲框架&#xff0c;其跨平臺的特性讓它備受開發公司的歡迎。這里我就不做概念性的解釋了&#xff0c;通過這篇文章你就會了解…

互斥鎖和讀寫鎖的區別

原文地址&#xff1a;http://blog.csdn.NET/u012884354/article/details/46691761 相交進程之間的關系主要有兩種&#xff0c;同步與互斥。 所謂互斥&#xff0c;是指散布在不同進程之間的若干程序片斷&#xff0c;當某個進程運行其中一個程序片段時&#xff0c;其它進程就不能…

JSP EL表達式使用

為什么80%的碼農都做不了架構師&#xff1f;>>> ##1.EL全名為Expression Language out.print(str) <%str%> ${str}例子&#xff1a; Hi! <%username%> 和 Hi! ${username}是一樣的 只要是支持servlet2.4/jsp2.0的Container就都可以在jsp網頁中直接使用e…

eclipse 中 Android sdk 無法更新的問題

誒&#xff0c;真是麻煩&#xff0c;想下個東西都下不了。我也好久沒折騰過這個了&#xff0c;在家的電腦是早就下載好了的&#xff0c;然后如今又須要下載一份。下不到。網上搜到了資料&#xff0c;記錄下來&#xff1a; 第一種方法:sdk manager - tools - option 選擇強制 xx…