1. 程式人生 > >你真的明白什麼是可伸縮性嗎?

你真的明白什麼是可伸縮性嗎?

作者 譯者 郭曉剛 釋出於 2007年10月7日 下午4時2分

“可伸縮性(Scalability)”是軟體廠商常常在新聞稿中用到的一個詞(也是人們站在飲水機旁談論的一個詞),但這個詞在很多情況下都被誤解了。例如,很多人說起可伸縮性的時候其實指的是效能和高可用性。Royans K Tharakan試圖回答“什麼是可伸縮性”這個問題,他說:

可伸縮性,簡單來說,是以更大的規模來做你現在所做的事。伸展一個Web應用的規模在於讓更多的人使用你的程式。如果你沒法找出方法在伸展規模的同時提高效能,沒關係。而且只要你可以伸展規模來處理更大數量的使用者,那麼有幾個單點故障(single point of failure)也沒關係。

Royans解釋說如今我們在面對規模伸展的時候有兩個選擇:

  • 縱向的可伸縮性——在同一個邏輯單元內增加資源來提高處理能力。這樣的例子包括在現有伺服器上增加CPU,或者在現有的RAID/SAN儲存中增加硬碟來提高儲存量。
  • 橫向的可伸縮性——增加更多邏輯單元的資源,並令它們像是一個單元一樣工作。大多數叢集方案、分散式檔案系統、負載平衡都是在幫助你提高橫向的可伸縮性。

架構師們都在為達到線性的可伸縮性而掙扎,目的是讓系統產出的增長與系統中投入資源的增長保持穩定的比率。然而,增加資源會導致一般耗費(overhead)的額外增長,因此難以達到線性的可伸縮性。Royans將之稱為“伸縮性因子”,並用它來區分各種型別的伸縮能力:

  • 如果在你擴大規模的時候伸縮性因子保持為常數,這種叫做線性伸縮性
  • 但很可能有些元件並不像其他元件那麼適應規模的增長。小於1.0的伸縮性因子叫做次線性伸縮性
  • 話說回來,也可能因為增加更多元件而獲得更佳的效能(在RAID系統中跨多個磁碟的I/O,當磁碟越多,效能越好)。這種叫做超線性伸縮性 。 不過類似情況很少見。
  • 如果應用程式沒有專門為可伸縮性而設計,有可能當規模擴大的時候情況會變糟。這種稱為負伸縮性

跟軟體開發中的許多事物一樣,這裡也沒有適合一切情形的銀彈可以解決你的伸縮性問題。Royans建議說,“如果你急切需要可伸縮性,向縱向發展可能是最容易的”,但注意“不幸的是縱向伸展會隨著你的規模增長而越來越昂貴

”,而且“無窮的橫向線性伸縮性只是難以達到,而無窮的縱向伸縮性絕不可能”。他繼續說:

從另一方面來說,橫向可伸縮性並不要求你購買越來越昂貴的伺服器。它的本意是用普通的儲存和伺服器方案來實現規模伸展。不過橫向可伸縮性也不便宜。應用必須從建造的最底層就加以考慮才能在多臺伺服器上執行得像一臺伺服器一樣。

Royans最後建議應該考慮所有的層次才能解決可伸縮性問題:

對於一個成功的Web應用,所有的層次都要同樣能夠應付規模的增長。包括儲存層(叢集檔案系統、S3等)、資料庫層(分割槽、聯合)、應用層(memcached、scaleout、terracota、tomcat clustering等等)、Web層、負載平衡、防火牆等等。比如,如果你沒辦法實現多個負載平衡控制器來處理未來的網路流量,不管你在Web層的橫向伸縮性上扔下多少錢,都不會有什麼效果。你的流量始終被限制在一個負載平衡控制器能夠承受的程度。

相關推薦

真的明白什麼是伸縮性

作者 譯者 郭曉剛 釋出於 2007年10月7日 下午4時2分 “可伸縮性(Scalability)”是軟體廠商常常在新聞稿中用到的一個詞(也是人們站在飲水機旁談論的一個詞),但這個詞在很多情況下都被誤解了。例如,很多人說起可伸縮性的時候其實指的是效能和高可用性。Royans

C語言/原子/編譯,真的明白

clas done ati pre 內存 程序 導致 裏的 creat   說到原子,類似於以下的代碼可能人人都可以看出貓膩。 #include <stdio.h> #include <pthread.h> int cnt = 0;

不是說朝聞道夕死(如果發現了自己的學習模式,願意學並且能堅持,我覺得沒什麽能阻擋征服軟件世界的腳步),安曉輝大神的感悟

說我 服務器 摘錄 syn 給他 sync 外包 學習曲線 有限公司 從技術支持中途轉戰軟件開發,如今從事編程工作已十多有余,2014年CSDN博文大賽編程語言組冠軍、CSDN Qt論壇的版主安曉輝老師從今天開始,坐鎮CSDN社區問答欄目的 第十四期,屆時會接受廣大網友的提

jscript定時器,一直用的東西,真的明白?

timeout javascrip 進程 為什麽 解析 異步 發現 頁面 AS JavaScript定時器 JavaScript是一種解釋型語言(邊編譯邊執行),Js解析順序是從上到下,然後將編譯後的任務丟到一個事件隊列中,然後事件內的函數會從上到下開始執行

線程池不來了解一下

java並發編程 新建 out 沒有 在線 dex keepal AD 定性 前言 只有光頭才能變強 回顧前面: ThreadLocal就是這麽簡單 多線程三分鐘就可以入個門了! 多線程基礎必要知識點!看了學習多線程事半功倍 Java鎖機制了解一下 AQS簡簡單單過一

真的明白斯卡布羅集市歌詞的真正含義

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

學Java培訓,要英語基礎?看了明白

有人問這樣的問題:英語成績差可以學Java嗎?英語不好影響Java學習嗎?到睿峰諮詢Java課程的同學也常常有這樣的擔憂,經常有人問到成都Java培訓機構學習要英語基礎嗎?今天就告訴大家答案。 到成都Java培訓機構學習要英語基礎嗎?答案是肯定的,每個人的心裡也是明白的,畢竟所有的程式設計程式碼都是由英語單

真的明白Java和Python3使用Unicode編碼的含義

經常會聽到Unicode是用兩個位元組表示世界上所有語言的編碼,那麼問題來了兩個位元組不過65535個符號,怎麼能表示所有語言?也經常搞不清楚Unicode和UTF-8到底有什麼區別。也曾聽說記憶體中都是Unicode統一表示,然後傳輸和儲存的時候轉換成UTF-8。總之網路時代就是這樣——眾說紛紜。

校園網路安全CTF 第一題 和 瞭解我

第一題: 需要先找到相應頭(REsponse header中的tips)   <?php$flag = "***";if (isset($_GET['repo']))//檢測變數是否設定 { if (strcmp($_GET['repo'], $flag) == 0) //比較兩個

制定程式碼規範並不難,但知道如何讓它執行

策劃:erichua23 編輯:郭蕾 回想起來自己工作這麼些年,也經歷了不少團隊,經歷的專案更不算少了, 但是要說到程式碼規範, 問我我經歷的這些程式碼規範是不是滿意,我不得不如實回答:不是很滿意。當然我自己的程式碼規範和風格也沒有完全固化下來,近一年左右也開始關注到這個問題,為了讓自己的程式碼風

真的明白什麼是大資料

大資料這個名詞並不是啥新名詞,如果對於IT比較熟悉的兄弟,估計聽這個名詞有6-7年的時間了,對這個有一定的瞭解,但是對於那些不熟悉IT的朋友來說,這個名詞雖然在網際網路和各媒體中聽到見到很多,估計腦子仍然是一頭霧水,到底什麼是大資料?   本人對於大資料學習建立了一個小小的學

決定之前,想想需要APP?真的需要網站

我冒著被同行唾棄,被業者鄙視的風險來​​寫這篇文章。如果哪天你們看到我沒有在更新網誌了,就代表我已被排擠到混不到飯吃活活餓死了。既然如此為何要還說呢,你以為我不說,別人就不知道馬桶裡面的是大便嗎?(本人稱為這個是馬桶理論) 崛起 在.com時代,泡沫後大家恢復了理智

關於python編碼,真的明白

想要徹底搞清楚編碼問題,我們必須要先搞清楚計算機是怎麼儲存資料的,這就涉及到了計算機基礎的幾個概念了,開篇我們就先來捋捋這幾個容易混淆的概念。 bit 二進位制位, 是計算機內部資料儲存的最小單位,11010100是一個8位二進位制數。一個二進位制位只可以表示0和1兩種狀態(2^1);兩個二進位制位可以表示

MVC設計思想,真的明白

小狼人對MVC設計思想的理解        新工作是在一家以彩票業務為公司主業務的網際網路公司,在這裡遇到了一個大牛,和一個技術很厲害的小夥伴,我們三個一起做專案,大牛帶了我們半年。        大概大家都是從面向物件變成結束之後開視對這個AOP,IOC,MVC等等一系列的

類的初始化順序---真的明白???^_^

^_^基礎知識,要是不很明白的就看看吧。^_^ publicabstractclass Glyph { abstractvoid draw(); Glyph(){ System.out.println("Glyph() before draw()"); draw(); Sy

npm install 明白

【當我們敲 npm install 的時候會安裝哪些依賴,dependencies 和 devDependencies 都會安裝嗎?還是隻安裝 dependencies ?】 【專案依賴包是放在 dependencies 和 devDependencies ?

得理解 python 的淺拷貝和深拷貝

三月沙 原文連結 為了讓一個物件發生改變時不對原物件產生副作用,此時,需要一份這個物件的拷貝,python 提供了 copy 機制來完成這樣的任務,對應的模組是 copy。 淺拷貝:shadow copy 在 copy 模組中,有 copy 函式可以完成淺拷貝。 1 from copy import

真的明白Task

LauchMode 對於Activity的LauchMode想必大家都不陌生。 Standard(標準) SingleTop(棧頂複用) SingleTask(棧內複用) SingleInstance(單例模式) 但是我們真的懂如何運用,或者這些Mode設計的原因是

MySQL系列:走進資料庫,相關概念明白

資料庫,一個我們常常提到的名詞,但是你有沒有想過,它到底是什麼意思呢,而我們常說的 MySQL、Oracle 等又到底指什麼呢? 資料庫 資料庫(DataBase),簡稱 DB,是資料庫是儲存資料的集合,你可以把它理解為多個數據表。資料庫是“按照資料結構來組織、儲存和管理資料的倉庫”,是一個長期儲存在計算機內

List的擴容機制,真的明白

## 一:背景 ### 1. 講故事 在前一篇大記憶體排查中,我們看到了Dictionary正在做擴容操作,當時這個字典的count=251w,你把字典玩的66飛起,其實都是底層為你負重前行,比如其中的擴容機制,當你遇到幾百萬甚至千萬的大集合這個擴容機制還真的需要挖一下,免的入戲太深,難以自拔。