2008-10-18 34 views
18

我發佈了一個similar question關於可伸縮linq是如何。對於最近的一些對話中的可伸縮性實際上有着如此多的不同觀點,所以它也引發了我提出這個問題。可擴展性對您意味着什麼?可擴展性對您意味着什麼?

+1

偉大的問題。在我讀完最後一個問題時,我有這個想法 - 確定你的意思是「它速度有多快?」,但是如果你的意思是可擴展的,就意味着可以擴展PLINQ。 – 2008-10-18 00:25:53

回答

15

我看的可擴展性從兩個角度:

向上擴展

如果我增加更多的RAM來的東西是在運行中,我多少額外的性能和容量得到什麼?如果我有一個應用程序可以處理300多個連接,並且在向服務器添加2 GB RAM時運行速度提高15%,而另一個應用程序只能處理100多個連接並運行速度提高5%,則應用程序A顯然更具可擴展性。

向外擴展

現在,如果我增加更多的機器到我的設置,多少額外的性能和容量,我獲得什麼?我可以設置Web前端來處理更多的客戶端流量嗎?如果是這樣,是否有線性增長?如果我添加3個框,可以讓更多用戶訪問我的網站嗎?我可以添加更多數據庫來分發數據加載嗎?我可以擴大多線程嗎?如果我可以輕鬆地將一臺計算機添加到我的網絡以向我的應用程序添加容量,那麼它是可擴展的。

順便說一句,這是n層的主要驅動器之一。

3

我回答了這個問題,好像你的意思很快,但那是因爲我不想成爲一個混蛋:) - 也就是說,我不想開始討論什麼是可擴展的手段。我認爲可擴展性如下:向系統添加資源可提高性能。

從這個意義上說,PLINQ具有可擴展性,因爲添加更多內核將使其運行速度更快。

3

只是添加到@Lou Franco的帖子。

PLINQ在有些開銷有限的情況下(根據他們的一些演示)甚至具有奇特的「超線性」性能。試試看。

如果您是C++人員,Microsoft也希望發佈併發功能,這些併發功能顯然沒有與它們關聯的運行時成本以及其他基於任務的併發工具來幫助您更好地調用。

9

伸縮性意味着在任一這些2個區域來處理生長的能力:

1)添加新的功能,修正錯誤的易於。爲了讓代碼做這些新事情,它有多難?雖然這在某些方面可能具有可維護性,但這也是您是否可以輕鬆構建代碼來處理更大規模的問題。

2)能夠處理越來越大的負載,這可能是Web開發中同時發生多個請求的問題,也可能是一個簡單的數據庫驅動的網站的大型數據集。你可以創建一個應用程序來處理那些仍然被視爲「快速」的數十萬行的表嗎?

通常對於我來說,可擴展性意味着增長的能力。

+1

我想刪除1),它污染了這個詞,我不認爲很多人會加入它。當然,可維護性通常是可擴展性的一個要求,但我們可以這麼說,易用性。 – reinierpost 2011-03-09 11:54:24

1

可擴展性 - 系統使用額外資源實現更高容量或吞吐量的能力。其他資源,如驅動器,內存,網卡,處理器或機器。

我並不直接將可擴展性與功能增長聯繫起來,但可能無法將功能添加到系統的規模限制。

+0

同意。添加功能與可伸縮性無關。 – user18931 2008-10-18 00:46:36

0

這些天,專門爲web應用,但在某些情況下,還爲企業應用,橫向可擴展性是你想擁有什麼,

我可以通過增加更多的商品硬件處理更多的(流量,數據處理) ?甚至使用「雲服務器」亞馬遜ec2,谷歌應用程序引擎和類似的?

0

可伸縮性意味着我可以將n個資源壓入系統,並且它在O(log(n))和O(n log n)之間的空間和時間都會增長。這是不切實際的,但這就是我認爲「可擴展」的原因。

6

我不認爲可伸縮性使沒有上下文的意義的iota。

當我被問到系統的可擴展性時,我需要知道的第一件事是預計其利用率將會增長的方式。它會得到更多的用戶嗎?現有的用戶是否會加重使用它?它的功能將會增長嗎?它目前支持變更的交易組合是否會混合?用戶體驗是否需要更改?

(OK,所以回答所有這些問題通常是「是」,然後在前面加上詞「如何」的問題。)

要挑一個不完全是虛構的例子:目前支持非常系統如果數據庫管理員每次必須設置新帳戶時,必須花費兩個小時手動運行從電子郵件中挑選的信息來查詢,那麼很少用戶和其用戶羣預計會迅速增長的用戶會遇到嚴重的擴展問題。這不是一個可以通過添加更多資源來解決的問題,除非您將DBA添加到要添加的資源列表中(並且有很多原因不能很好地擴展)。

或想象一個社交網站,推出令人興奮的新功能,您可以看到您的朋友是否在線並通過良好的Ajax-y UI與他們聊天。突然間,沒有增加用戶羣,你的服務器每天處理的HTTP請求數量增加了20倍,並且你對數據庫可擴展性的擔憂退到了後臺。 (當然,除非你已經在你的聊天應用程序中涉及數據庫,思考得很好!)

當然,讓你的web應用程序成爲無狀態的,這樣你就可以添加web服務器,使網頁idempotent,以便你可以添加代理,設計您的應用程序以便您可以跨服務器對數據庫進行分區,這些都將使您的應用程序在各個維度上可擴展。這是非常值得考慮的東西。但在開始戰鬥之前弄清楚你真正的敵人是多麼重要。

-1

窩!大字....

我把它定義一個全新的每一個項目,因爲它取決於客戶想要什麼。

可擴展性並不總是關於增加處理/存儲容量,而是可以包括許多輸入和許多輸出的支持。

3

我認爲可擴展性可以衡量成本 - 性能曲線的平滑度。也就是說,如果您可以在計算資源上花費一點時間並獲得低性能系統,並逐步添加資源,則可以獲得比例更高的系統,並且可擴展。如果您必須以昂貴的塊來添加資源,爲了獲得比線性改進更少的效果,它不是可擴展的。