科普:平行計算、分散式計算、叢集計算和雲端計算
1. 平行計算(Parallel Computing)
平行計算或稱平行計算是相對於序列計算來說的。平行計算(Parallel Computing)是指同時使用多種計算資源解決計算問題的過程。為執行平行計算,計算資源應包括一臺配有多處理機(並行處理)的計算機、一個與網路相連的計算機專有編號,或者兩者結合使用。平行計算的主要目的是快速解決大型且複雜的計算問題。
平行計算可以劃分成時間並行和空間並行。時間並行即流水線技術,空間並行使用多個處理器執行併發計算,當前研究的主要是空間的並行問題。以程式和演算法設計人員的角度看,平行計算又可分為資料並行和任務並行。資料並行把大的任務化解成若干個相同的子任務,處理起來比任務並行簡單。
空間上的並行導致兩類並行機的產生,按照Michael Flynn(費林分類法)的說法分為單指令流多資料流(SIMD)和多指令流多資料流(MIMD),而常用的序列機也稱為單指令流單資料流(SISD)。MIMD類的機器又可分為常見的五類:並行向量處理機(PVP)、對稱多處理機(SMP)、大規模並行處理機(MPP)、工作站機群(COW)、分散式共享儲存處理機(DSM)。
2. 分散式計算(Distributed Computing)
分散式計算這個研究領域,主要研究分散系統(Distributed system)如何進行計算。分散系統是一組計算機,通過計算機網路相互連結與通訊後形成的系統。把需要進行大量計算的工程資料分割槽成小塊,由多臺計算機分別計算,在上傳運算結果後,將結果統一合併得出資料結論的科學。
目前常見的分散式計算專案通常使用世界各地上千萬志願者計算機的閒置計算能力,通過網際網路進行資料傳輸。如分析計算蛋白質的內部結構和相關藥物的[email protected]專案,該專案結構龐大,需要驚人的計算量,由一臺電腦計算是不可能完成的。即使現在有了計算能力超強的超級電腦,但是一些科研機構的經費卻又十分有限。
分散式計算比起其它演算法具有以下幾個優點:
1、稀有資源可以共享。
2、通過分散式計算可以在多臺計算機上平衡計算負載。
3、可以把程式放在最適合執行它的計算機上。其中,共享稀有資源和平衡負載是計算機分散式計算的核心思想之一。
3. 平行計算與分散式計算的區別
(1)簡單的理解,引用Answers.com上一個答案:
Parallel computing and distributed computing are ways of exploiting parallelism in computing to achieve higher performance. Multiple processing elements are used to solve a problem, either to have it done faster or to have a larger size problem been solved. To state simply, if the processing elements share the memory, it is called parallel computing, otherwise it is called distributed computing. Some have opinion that distributed computing is a special form of parallel computing.
平行計算與分散式計算都是運用並行來獲得更高效能,化大任務為小任務。簡單說來,如果處理單元共享記憶體,就稱為平行計算,反之就是分散式計算。也有人認為分散式計算是平行計算的一種特例。
但是分散式的任務包互相之間有獨立性,上一個任務包的結果未返回或者是結果處理錯誤,對下一個任務包的處理幾乎沒有什麼影響。因此,分散式的實時性要求不高,而且允許存在計算錯誤(因為每個計算任務給好幾個參與者計算,上傳結果到伺服器後要比較結果,然後對結果差異大的進行驗證。
分散式要處理的問題一般是基於“尋找”模式的。所謂的“尋找”,就相當於窮舉法!為了嘗試到每一個可能存在的結果,一般從0~N( 某一數值)被一個一個的測試,直到我們找到所要求的結果。事實上,為了易於一次性探測到正確的結果,我們假設結果是以某個特殊形式開始的。在這種型別的搜尋裡,我們也許幸運的一開始就找到答案;也許不夠走運以至於到最後才找到答案,這都很公平。
這麼說,並行程式並行處理的任務包之間有很大的聯絡,而且平行計算的每一個任務塊都是必要的,沒有浪費的分割的,就是每個任務包都要處理,而且計算結果相互影響,就要求每個的計算結果要絕對正確,而且在時間上要儘量做到同步,而分散式的很多工塊可以根本就不處理,有大量的無用資料塊,所以說分散式計算的速度儘管很快,但是真正的“效率”是低之再低 的,可能一直在尋找,但是永遠都找不到,也可能一開始就找到了;而並行處理不同,它的任務包個數相對有限,在一個有限的時間應該是可能完成的。
分散式的編寫一般用的是C++(也有用JAVA的,但是都不是主流),基本不用MPI介面。平行計算用MPI或者OpenMP。
4. 叢集計算(Cluster Computing)
計算機叢集將一組鬆散整合的計算機軟體或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集群系統中的單個計算機通常稱為節點,通常通過區域網連線,但也有其它的可能連線方式。叢集計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下叢集計算機比單個計算機,比如工作站或超級計算機價效比要高得多。
根據組成集群系統的計算機之間體系結構是否相同,叢集可分為同構與異構兩種。叢集計算機按功能和結構可以分為,高可用性叢集(High-availability (HA) clusters)、負載均衡叢集(Loadbalancing clusters)、高效能運算叢集(High-performance (HPC)clusters)、網格計算(Grid computing)。
高可用性叢集,一般是指當叢集中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將叢集中的某節點進行離線維護再上線,該過程並不影響整個叢集的執行。
負載均衡叢集,負載均衡叢集執行時,一般通過一個或者多個前端負載均衡器,將工作負載分發到後端的一組伺服器上,從而達到整個系統的高效能和高可用性。這樣的計算機叢集有時也被稱為伺服器群(Server Farm)。一般高可用性叢集和負載均衡叢集會使用類似的技術,或同時具有高可用性與負載均衡的特點。Linux虛擬伺服器(LVS)專案在Linux作業系統上提供了最常用的負載均衡軟體。
高效能運算叢集,高效能運算叢集採用將計算任務分配到叢集的不同計算節點兒提高計算能力,因而主要應用在科學計算領域。比較流行的HPC採用Linux作業系統和其它一些免費軟體來完成並行運算。這一叢集配置通常被稱為Beowulf叢集。這類叢集通常執行特定的程式以發揮HPC cluster的並行能力。這類程式一般應用特定的執行庫, 比如專為科學計算設計的MPI庫。HPC叢集特別適合於在計算中各計算節點之間發生大量資料通訊的計算作業,比如一個節點的中間結果或影響到其它節點計算結果的情況。
5. 網格計算(Grid Computing)
網格計算是分散式計算的一種,也是一種與叢集計算非常相關的技術。如果我們說某項工作是分散式的,那麼,參與這項工作的一定不只是一臺計算機,而是一個計算機網路,顯然這種“螞蟻搬山”的方式將具有很強的資料處理能力。網格計算的實質就是組合與共享資源並確保系統安全。
網格計算通過利用大量異構計算機的未用資源(CPU周 期和磁碟儲存),將其作為嵌入在分散式電信基礎設施中的一個虛擬的計算機叢集,為解決大規模的計算問題提供一個模型。網格計算的焦點放在支援跨管理域計算 的能力,這使它與傳統的計算機叢集或傳統的分散式計算相區別。網格計算的目標是解決對於任何單一的超級計算機來說仍然大得難以解決的問題,並同時保持解決 多個較小的問題的靈活性。這樣,網格計算就提供了一個多使用者環境。
6. 叢集計算與網格計算的區別
(1)簡單地,網格與傳統叢集的主要差別是網格是連線一組相關並不信任的計算機,它的運作更像一個計算公共設施而不是一個獨立的計算機。網格通常比叢集支援更多不同型別的計算機集合。
(2)網格本質上就是動態的,叢集包含的處理器和資源的數量通常都是靜態的。在網格上,資源則可以動態出現,資源可以根據需要新增到網格中或從網格中刪除。
(3)網格天生就是在本地網、都會網路或廣域網上進行分佈的。網格可以分佈在任何地方。而叢集物理上都包含在一個位置的相同地方,通常只是區域網互連。叢集互連技 術可以產生非常低的網路延時,如果叢集距離很遠,這可能會導致產生很多問題。物理臨近和網路延時限制了叢集地域分佈的能力,而網格由於動態特性,可以提供 很好的高可擴充套件性。
(4)叢集僅僅通過增加伺服器滿足增長的需求。然而,叢集的伺服器數量、以及由此導致的叢集效能是有限的:互連網路容量。也就是說如果一味地想通過擴大規模來提高叢集計算機的效能,它的價效比會相應下降,這意味著我們不可能無限制地擴大叢集的規模。 而網格虛擬出空前的超級計算機,不受規模的限制,成為下一代Internet的發展方向。
(5)叢集和網格計算是相互補充的。很多網格都在自己管理的資源中採用了叢集。實際上,網格使用者可能並不清楚他的工作負載是在一個遠端的叢集上執行的。儘管網格與叢集之間存在很多區別,但是這些區別使它們構成了一個非常重要的關係,因為叢集在網格中總有一席之地—— 特定的問題通常都需要一些緊耦合的處理器來解決。然而,隨著網路功能和頻寬的發展,以前採用叢集計算很難解決的問題現在可以使用網格計算技術解決了。理解網格固有的可擴充套件性和叢集提供的緊耦合互連機制所帶來的效能優勢之間的平衡是非常重要的。
7. 雲端計算(Cloud Computing)
雲端計算是最新開始的新概念,它不只是計算等計算機概念,還有運營服務等概念了。它是分散式計算、平行計算和網格計算的發展,或者說是這些概念的商業實現。雲端計算不但包括分散式計算還包括分散式儲存和分散式快取。分散式儲存又包括分散式檔案儲存和分散式資料儲存。
8. 雲端計算與並行、分散式、網格和叢集計算的區別
雲端計算是從叢集技術發展而來,區別在於叢集雖然把多臺機器聯了起來,但其某項具體任務執行的時候還是會被轉發到某臺伺服器上,而云可以簡單的認為是任務可以被分割成多個程序在多臺伺服器上平行計算,然後得到結果,好處在於大資料量的操作效能非常好。雲可以使用廉價的PC伺服器 ,可以管理大資料量與大叢集,關鍵技術在於能夠對雲內的基礎設施進行動態按需分配與管理。雲端計算與平行計算、分散式計算的區別,以計算機使用者來說,平行計算是由單個使用者完成的,分散式計算是由多個使用者合作完成的,雲端計算是沒有使用者參與,而是交給網路另一端的伺服器完成的。