2009-07-12 129 views

回答

10

如果您希望您的網站擴展到單個服務器的能力之外,那麼您需要仔細規劃。設計,以下將是可能的: -

  • 使它可以讓你的數據庫可以在一個單獨的服務器上。這通常不會太難。
  • 確保您的所有靜態內容都可以移動到CDN,因爲這通常會將大量負載從您的服務器上卸下。
  • 準備在硬件上花費很多錢。更多的RAM和更快的磁盤幫助LOT。
  • 當您需要將數據庫或php從單個服務器分割到多個服務器時,它會變得更加困難,因此,從代碼,數據庫架構,服務器配置以及任何您可以想到的任何其他內容儘可能地放下最後一步。

除此之外,你所能做的只是壓力測試你的網站,找出瓶頸在哪裏,並嘗試去設計它們。

+1

同意,我只是補充說,緩存可能是您在創建大型網站時應該做的第一件事。 – usoban 2009-07-12 17:27:01

+0

是的。確保MySQL的緩存功能設置良好,併爲您的代碼使用強大的緩存。在其他答案中提到的幾個很好。 – 2009-07-12 17:35:23

17
  1. 在重負載下測試您的網站。
  2. 監控所有統計
  3. 查找瓶頸
  4. 修復瓶頸
  5. 回到1

好運

0

使用固體OOP技術開發您的網站。您將需要您的站點是模塊化的,因爲並非所有的性能瓶頸在一開始都是顯而易見的。隨着流量的增加,隨時準備重構部分網站。我寫的第一句話會幫助你更輕鬆,更安全地做到這一點。此外,使用測試驅動的開發,因爲重構意味着新引入的錯誤,良好的TDD在抓住它們進入生產之前很好。
儘可能將服務器端代碼中的客戶端代碼儘可能分開,因爲如果您的網站流量證明了這一點,它們可能會從不同的服務器提供服務。
閱讀文章(例如閱讀YSlow提示)。

GL

4

退房this talk由拉斯姆斯·勒多夫(PHP的創造者)

特別第8頁和超越。

+0

謝謝ÓlafurWaage – webkul 2009-11-02 07:49:24

1

很相似:How Is PHP Done the Right Way?

可擴展性是不小的主題,當然更多的材料相比,可以合理地覆蓋在一個單一的問題。

例如,對於某些類型的應用程序,聯接(在SQL中)不會擴展,這會引發各種緩存和分片策略。

Beanstalk是高性能PHP站點中的另一種可伸縮性和性能工具。作爲memcache(不同類型)。

1

按重要性排序:

  1. 如果你運行PHP,使用操作碼緩存像APC。 (這足以在下一代PHP中內置)

  2. 使用YSlowGoogle Page Speed來識別瓶頸。 (這將顯示您的網站會影響客戶端和服務器性能的結構性問題。)

  3. 確保您的Web服務器爲靜態內容(圖像,Javascript,CSS)發送適當的Expires標頭,以便瀏覽器可以緩存它正確。 (YSlow也會對此提出警告。)

  4. 使用HTTP加速器,例如Varnish。 (This picture說,這一切 - 他們已經到位有一個HTTP加速器。)

2

許多人提到的工具,用於識別瓶頸,這當然是必要的。如果不知道速度緩慢,你就無法花費大量時間來加速某些事情。但是你需要知道的另一件事是你的目標可伸縮性在哪裏。花費幾個月的時間花費幾個月的時間,使您的網站擴展到與Twitter相同的用戶數量是否物有所值?在產品需求方面,您是否有已知的交易率或響應延遲或用戶數量?如果是這樣,請將這些數字作爲優化策略的目標。如果沒有,找到那些出之前追逐表現大鼠下來的洞。

1

可擴展性的最大問題通常是像DBMS這樣的共享資源。問題的產生是因爲DBMS通常無法放鬆一致性保證。

如果您希望在使用類似MySQL的東西時增加可伸縮性,則必須更改模式設計以放鬆一致性。例如,您可以將數據庫架構分開,使其具有用於寫入的標準化數據模型,以及用於90%讀取操作的複製只讀非標準化部分。只讀數據可以分佈在多個服務器上。

提高數據庫可伸縮性的另一種方法是對數據進行分區,例如,將數據分成每個部門的數據庫,並將它們集中在ORM或DBMS中。

0

除了其他建議,考慮拆分您的網站幾個層次,如multitier architecture。如果操作正確,則可以使用每層一臺服務器。