分布式系統的架構思路

見:http://www.cnblogs.com/chulung/p/5653135.html


一、前言

在計算機領域,當單機性能達到瓶頸時,有兩種方式可以解決性能問題,一是堆硬件,進一步提升配置,二是分布式,水平擴展。當然,兩者都是一樣的燒錢。
今天聊聊我所理解的分布式系統的架構思路。


二、分布式系統的兩種方式

平時接觸到的分布式系統有很多種,比如分布式文件系統,分布式數據庫,分布式WebService,分布式計算等等,面向的情景不同,但分布式的思路是否是一樣的呢?

1.簡單的例子

假設我們有一臺服務器,它可以承擔1百萬/秒的請求,這個請求可以的是通過http訪問網頁,通過tcp下載文件,jdbc執行sql,RPC調用接口…,現在我們有一條數據的請求是2百萬/秒,很顯然服務器hold不住了,會各種拒絕訪問,甚至崩潰,宕機,怎么辦呢。一臺機器解決不了的問題,那就兩臺。所以我們加一臺機器,每臺承擔1百萬。如果請求繼續增加呢,兩臺解決不了的問題,那就三臺唄。這種方式我們稱之為水平擴展。如何實現請求的平均分配便是負載均衡了。

另一個栗子,我們現在有兩個數據請求,數據1 90萬,數據2 80萬,上面那臺機器也hold不住,我們加一臺機器來負載均衡一下,每臺機器處理45萬數據1和40萬數據2,但是平分太麻煩,不如一臺處理數據1,一臺處理數據2,同樣能解決問題,這種方式我們稱之為垂直拆分

水平擴展垂直拆分是分布式架構的兩種思路,但并不是一個二選一的問題,更多的是兼并合用。下面介紹一個實際的場景。這也是許多互聯網的公司架構思路。

2.實際的例子

我此時所在的公司的計算機系統很龐大,自然是一個整的分布式系統,為了方便組織管理,公司將整個技術部按業務和平臺拆分為部門,訂單的,會員的,商家的等等,每個部門有自己的web服務器集群,數據庫服務器集群,通過同一個網站訪問的鏈接可能來自于不同的服務器和數據庫,對網站及底層對數據庫的訪問被分配到了不同的服務器集群,這個便是典型的按業務做的垂直拆分,每個部門的服務器在hold不住時,會有彈性的擴展,這便是水平擴展

在數據庫層,有些表非常大,數據量在億級,如果只是純粹的水平的擴展并不一定最好,如果對表進行拆分,比如可以按用戶id進行水平拆表,通過對id取模的方式,將用戶劃分到多張表中,同時這些表也可以處在不同的服務器。按業務的垂直拆庫和按用戶水平拆表是分布式數據庫中通用的解決方案。


三、負載均衡

前面我們談到了分布式來解決性能問題,但其附帶的問題是怎么分布,即如何負載均衡。這里要解決的問題是當客戶端請求時,應該讓它請求分布式系統中哪一臺服務器,通常的做法是通過一臺中間服務器來給客服端分配目標服務器。

這里同樣拿兩個不同的分布式系統做說明,下圖左邊是分布式文件系統FastDFS,右邊是一個用于分布式的RPC中間件。

  • FastDFS的一次文件下載請求過程是這樣的
    1.client詢問tracker可以下載指定文件的storage;
    2.tracker返回一臺可用的storage;
    3.client直接和storage通信完成文件下載。

其中tracker便是負載均衡服務器,storage是存儲文件和處理上傳下載請求的服務器。

  • 而另一個RPC中間件Hedwig也是類似的
    1.client詢問zookeeper哪臺server可以執行請求;
    2.zookeeper返回一臺可用server;
    3.client直接與service完成一次RPC。

zookeeper是分布式系統中一個負載均衡框架,google的chubby的一個開源實現,是是Hadoop和Hbase的重要組件。

同樣的在http中,常聽說的nginx也是一個負載均衡服務器,它面向的是分布式web服務器。至于具體的負載均衡算法輪詢,hash等這里就不深入了。


四、同步

分布式系統中,解決了負載均衡的問題后,另外一個問題就是數據的一致性了,這個就需要通過同步來保障。根據不同的場景和需求,同步的方式也是有選擇的。

在分布式文件系統中,比如商品頁面的圖片,如果進行了修改,同步要求并不高,就算有數秒甚至數分鐘的延遲都是可以接受的,因為一般不會產生損失性的影響,因此可以簡單的通過文件修改的時間戳,隔一定時間掃描同步一次,可以犧牲一致性來提高效率。

但銀行中的分布式數據庫就不一樣了,一丁點不同步就是無法接受的,甚至可以通過加鎖等犧牲性能的方式來保障完全的一致。

在一致性算法中paxos算法是公認的最好的算法,chubby、zookeeper中paxos是它保證一致性的核心。


五、結語

接觸過這么多分布式系統后發現,它們的設計思路是如此的相似,這或許就是萬法歸一吧。

擴展閱讀

  • 1號店訂單系統水平分庫的實踐之路以及關鍵步驟
  • 負載均衡調度算法大全
  • 分布式系統Paxos算法

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

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

相關文章

狂賭智能手機 中國互聯網巨頭深陷零利潤困局

編者按:智能手機正在中國普及,互聯網企業趨之若鶩。然而,在蘋果、三星共享智能手機市場99%利潤的大背景下,中國互聯網企業要從所剩無幾的利潤空間里分一杯羹,注定備受煎熬,前路迷茫。 互聯網巨頭紛紛進入智…

占用較多堆外內存的區域

(1)Director Memory 主要在nio中會使用,在內存不足時會拋出OOM或者OOM:Direct buffer memory。 (2)線程堆棧 為每個線程分配的棧空間,用于保存局部變量,執行程序代碼。內存不足時可能拋出StackO…

Oracle SELECT INTO 和 INSERT INTO SELECT 兩種表復制語句詳解

在Oracle中select into from不可以使用,用create table select代替該功能!!!在Sql Server中可以正常使用。1.INSERT INTO SELECT語句語句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from…

帆軟地址欄傳參,實例

自動查詢: http://help.finereport.com/finereport9.0/doc-view-409.html參數的種類與區別: http://help.finereport.com/doc-view-156基本參數傳遞(視頻): http://bbs.fanruan.com/lesson-14.html超級鏈接-傳遞多個值…

RMI 說明

見:https://baike.baidu.com/item/RMI/1786244?fraladdin RMI遠程方法調用 相關概述 RMI是Java的一組擁護開發分布式應用程序的API。RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協議(Java Remote Method Protocol)。簡單地說&…

李善友:為什么外企人不敢創業

摘要:20年前,人們最驕傲的是進外企,創業意味著找不到工作。而現在相反,你要說自己在外企工作,會被人笑話,令人激動的事兒是去創業。 李善友:中歐創業中心主任創業學兼任教授、酷6網創始人 孫陶然…

JVM對象占用內存計算

大家都知道,jvm中對象實例存儲在堆中,對象的引用存儲在棧中,而對象的元數據(類型數據)存儲在方法區。在我們進行內存優化的過程中經常需要了解每個對象占用的內存大小。接下來我將介紹對象占用內存大小的計算方式。 Java的對象模型 java是面…

繪圖基礎語法與常用參數

1 # -*- coding: utf-8 -*-2 3 ###############################################################################4 ####################### 正文代碼 #######################5 #################################################################…

MyEclipse 皮膚、主題、背景色

第一步:打開myeclipse--->help--->install from site--->Add將路徑粘貼在這里。等待安裝顏色主題。https://raw.github.com/guari/eclipse-ui-theme/master/com.github.eclipseuitheme.themes.updatesite 第二步:http://eclipsecolorthemes.org…

RPC 遠程過程調用協議

RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。 RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜…

周鴻祎:創業前的積累很重要

摘要:雖然公司上市,也投資了很多公司,日前,在中國人民大學的演講中,周鴻祎卻稱自己“從來不是一個成功人士,曾經是一個最大的失敗者”。 360特供機還沒露面,已經被周鴻祎通過微博炒得火熱&#…

BZOJ 4710 [Jsoi2011]分特產 解題報告

4710 [Jsoi2011]分特產 題意 給定\(n\)個集合,每個集合有相同的\(a_i\)個元素,不同的集合的元素不同。將所有的元素分給\(m\)個不同位置,要求每個位置至少有一個元素,求分配方案數。 先考慮兩個簡單的問題 給定\(m\)個相同元素和\…

java接口調試思想

對于接口調試的理解:最近多次參與接口調試工作,一般情況都是獲取對方接口文檔,文檔中有加密驗證方式,根據加密驗證方式開發,調用對應的接口。可以不可以簡化這個流程那,至少減少一方的工作量。1、減少調用方…

SOA (面向服務的架構)

見:https://baike.baidu.com/item/SOA/2140650?fraladdin UDDI 解說參見:UDDI是什么 SOAP解說參見: SOAP:簡單對象訪問協議 面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱…

mysql中count(*)和count(1)和count(column)區別

在日常的mysql使用中,我們經常會看到SELECT COUNT(*)、SELECT COUNT(1)等查詢語句,他們到底有什么區別呢?今天我就來總結下。 我們先從函數的含義說起: count() 統計滿足查詢條件的結果集的總行數(包含null),其中count…

第一天筆記

編程語言分類: 1. 機器語言:用二進制指令編程,本質是直接操作硬件。 優點:執行效率高 缺點:開發效率低,學習難度高 2.匯編語言:用英文標簽代替二進制指令,本質也是直接操作硬件。…

索尼MOTO等壓榨國內代工廠:員工宿舍像監獄

摘要:據調查報告披露,偉易達血汗工廠的壓榨情況比起富士康、蘋果等有過之而無不及,包括強迫工人超負荷工作、暴露于有害化學物質、住宿環境差、虐待員工、超低的工資等。如前面保羅克魯格曼發表了《表揚廉價勞動》一文,N.D.克里斯…

[cerc2012][Gym100624B]20181013

轉載于:https://www.cnblogs.com/KonjakJuruo/p/9809637.html

Nginx服務器證書部署-亞洲誠信

Nginx服務器證書部署發布時間:2018-01-17 16:15:25依賴建議l SSL卸載驅動。建議:openssl版本1.1.0f。l nginx版本Stable version:最新穩定版,生產環境上建議使用的版本。獲取證書MPKI方式:1. 登錄https://mpki.tru…

java transient關鍵字

transient是用在序列化中的。當我們序列化的過程中,如果我們不想序列化某個字段,那么我們就可以使用這個關鍵字,jvm就會在序列化的時候自動忽略這個字段的數值。 transient主要有兩個用途: 1.保證數據的安全。在進行序列化時&…