2012-02-23 132 views
42

我閱讀了很多比較編程語言的文章。這意味着什麼可擴展性?

有一個詞經常出現:可擴展性。我其實試圖尋找一個簡單明瞭的解釋,但還沒有找到它。

你能解釋一下可擴展性是什麼意思?

謝謝。

+2

看看懸停標籤的可伸縮性...這是一個好的開始! Google也是如此。那裏有十億資源可以完全輕鬆地解釋它......例如http:// shiflett。org/blog/2003/oct/what-is-scalability – king14nyr 2012-02-23 19:44:01

+1

在@ king14nyr的鏈接中,O(c^n),O(n)和O(log(n))都是Big-O符號。正如你可以看到大量數據(n條記錄)一樣,具有O(log(n))模式的程序運行得非常好,而O(c^n)則執行得非常差。這是兩個極端。 – Furbeenator 2012-02-23 19:48:35

回答

40

可伸縮性是程序擴展的能力。例如,如果您可以在小型數據庫上執行某些操作(例如少於1000條記錄),那麼具有高度可擴展性的程序就可以在小型數據庫上正常運行,並且可以在大型數據庫上運行良好(例如數百萬或數十億條記錄)。像差距說的那樣,它會有資源需求的線性增長。查看Big-O表示法瞭解更多關於程序如何在數據輸入得到越大時需要更多計算的更多細節。像Big-O(x^2)那樣的拋物線在大x輸入方面的效率遠低於像Big-O(x)那樣的線性效率。

+1

這實際上是錯誤的。對於一個線性可伸縮性會有線性增長。您仍然可以以非線性方式進行擴展(自然達到極限)。其次,通過改變硬件來獲得/顯示可擴展性。如果我有一個巨大的設置,我首先運行1 TPS,而實際上它可以處理100 TPS - 在100TPS上運行它不會縮放它。如果通過改變硬件負載可以增加到10KTPS,那麼它是可擴展的 – 2014-08-30 07:54:51

+3

在OP問題的上下文中,我描述了軟件算法的可擴展性。這種情況在大學課程中是典型的。比較兩種潛在算法的可擴展性時,與具有拋物線資源需求的算法相比,具有線性資源需求的算法具有高度可擴展性。 – Furbeenator 2014-09-02 16:36:03

+0

我得到軟件算法中特別的可擴展性。但是編程語言的可伸縮性是什麼? – 2015-09-29 10:22:44

6

我的理解是不是就意味着在輸出線性增加要求只需要在資源一個線性增加。

19

可伸縮性是軟件解決方案可以處理更多工作量的特性。這可能是更大的數據集,更高的要求率,規模和速度等的組合

在談到系統的可擴展性,我們通常

  • 區分「向上擴展」 - 通過使用能力的增長強大的硬件
  • 「向外擴展」 - 通過添加更多的硬件

,可以擴展出通常可以長到啤酒載荷更具成本效益的方式加以解決成長的能力。這裏要知道的一個重要的事情是Amdahl's law,它指出擴展的能力受限於軟件的順序部分

8

已經很好的答案在這裏,只是想在這裏添加一些東西。通過這種方式,你添加更多硬製品喜歡更多的RAM,處理器或多個節點 -

可擴展性可以通過2種方式

立式來實現。您還介紹了負載均衡器,它將根據所使用的路由算法將傳入呼叫路由到各種服務器。隨着負載在服務器之間共享,應用程序現在能夠處理更多的負載。

水平 - 在水平縮放中,您以這樣的方式構建應用程序,以便在更多並行流量中表現良好。你檢查你是如何管理內存,會話,緩存&狀態等。如果你使用會話來維護用戶信息,在重負載下單個服務器可能更忙於管理服務器,所以在這種情況下,你可以檢查可能性無國籍。它也可以並行響應來自同一用戶的傳入請求,而不是在正在使用會話時發生的串行回覆。