[譯]MIT6.824_1.1分佈式系統介紹——驅動力與挑戰

這是6.824分佈式系統課程,我會開始用簡明的介紹我所認爲的分佈式系統。編程

分佈式系統的核心是經過網絡以完成一致任務的一組協做計算機。安全

所以咱們將在本課程中重點介紹各類實例,例如大型網站的存儲或MapReduce等大數據計算之類的東西,還有一些更奇特的事情,例如點對點文件共享,這些都只是咱們研究分佈式系統過程當中的一些示例。微信

全部這些都很重要的緣由是,許多重要的基礎設施都是創建在分佈式系統基礎架構之上的。它們須要一臺以上的計算機來完成工做,或者它自己就須要物理上被分散在多臺計算機上。網絡

在我討論分佈式系統以前,我須要提醒你的是,若是你要從新設計系統,則須要解決一些問題。若是你能夠用一臺計算機解決以上問題,而無需構建分佈式系統,你應該採起單機的方式,這種方案能夠完成不少工做,且老是更容易的。因此在構建分佈式系統以前你應該嘗試其餘方案,由於分佈式系統並不簡單。架構

分佈式系統發展的驅動力

人們之因此須要使用多臺聯合的計算機,是由於如下緣由:併發

  • 他們須要得到更高的性能(high performance)。由於大量的計算機意味着大量的並行運算(parallelism),大量的CPU、內存、磁盤臂會並行運行着。
  • 另外一我的們構建分佈式系統的緣由是,它能夠提供容錯(fault tolerance),若是有兩臺計算機執行着同一個任務,其中一臺發生故障,您能夠切換到另外一臺。
  • 第三個緣由是,一些問題是自然在空間上分佈的(physical)。例如你所知道的銀行間轉帳,銀行A在紐約有一臺計算機,銀行B在倫敦有一臺計算機,你知道你必須爲他們提供一些方式相互交流併合做以實現目標。因此有一些自然的緣由致使系統是物理分佈的。
  • 人們建造分佈式系統的最終目的是爲了達到某種安全目標(security)。好比有些代碼不被信任,可是你又須要和它進行交互,這些代碼不會當即表現出惡意或表現出bug。你不會想要信任這些代碼,你可能想拆分計算,這樣那些不信任代碼在那臺計算機運行,個人代碼在這臺計算機上運行,他們只能經過某種狹窄定義的網絡協議互相交談。假設咱們可能會擔憂你所知道的安全性,咱們能夠把系統拆分紅多臺計算機,以此相互隔離(isolated)

本課程的大部分將與 性能(performance)容錯(fault tolerance) 有關。另外兩點咱們會經過對某些案例的研究來學習。分佈式

分佈式系統所面臨的挑戰

你知道全部這些分佈式系統有不少困難(挑戰):性能

  • 由於他們有不少部分,且這些部分是同時執行的,在多臺計算機上,你會遇到併發編程(concurrency)、複雜交互、以及時間依賴所帶來的全部問題,這是讓分佈式系統變得困難的一點緣由。
  • 另外一點讓分佈式系統變得困難的緣由是由於你擁有多個組件,再加上計算機網絡,你可能會遇到意想不到的故障。若是你只有一臺計算機,一般狀況是計算機能夠正常工做,或者徹底宕機,或者遭受電源故障或某些故障,即要麼能夠徹底正常工做要麼徹底不工做。由許多計算機組成的分佈式系統,多是一部分組件在工做,一部分組件中止工做,或者這些計算機都在正常運行,可是網絡的某些部分中斷了或是不穩定。所以, 部分故障(partial failures) 是分佈式系統困難的另外一個緣由。
  • 形成分佈式系統困難的最後一個緣由,人們構建分佈式系統的最初緣由一般是爲了得到更高的 性能(performance) ,好比說一千臺計算機或一千個磁盤臂的性能,但實際上一千臺計算機能得到多少性能是一個棘手的問題,一般有不少障礙擋在你的路上,因此一般須要當心地設計才能使系統真正達到你指望的性能。

所以,本課程就是爲了解決這些問題。一般,問題和解決方案在技術上都頗有趣,對於其中一些困難的問題,有很好的解決方案,而其餘一些問題在現有的分佈式系統則沒有很好的解決方案。學習

小結

如今分佈式系統被用在現實世界的許多系統中,例如大型網站一般由大量計算機構成的分佈式系統來運行。區塊鏈

我剛開始教這門課的時候,分佈式系統是一種學術上的好奇心。人們有時候小規模地使用它,且預感在將來某一天可能會很重要。但如今特別受巨型網站的興起所驅動,出現了大量的數據和大型數據中心。

在過去的二十年中,分佈式系統已經變成計算機基礎架構很是重要的組成部分,這意味着分佈式系統已經引發了人們不少關注,且已經解決了不少問題,可是有不少未解決的問題,因此若是你是一名研究生,或你對研究感興趣,還有不少須要使用分佈式系統解決的問題,以及進行相關研究。

最後,若是你喜歡動手,這是一門很好的課程,由於它有一系列實驗,你將構建一些貼近現實,關注性能和容錯的分佈式系統。因此你會有不少機會練習構建分佈式系統,並使它們正常運行。

更多關於大數據、分佈式、存儲、區塊鏈、Linux相關文章請關注微信公衆號:asympTech漸進線實驗室

Github、知乎、博客園、CSDN、簡書全網惟一id:JasonCeng

相關文章
相關標籤/搜索