2012-03-04 59 views
0

約我目前的狀況一點點:我應該使用哪些技術來創建高性能的可伸縮Web應用程序?

  • 我OOP PHP體面的知識

  • 我的MySQL,一個體面的理解,這是我的選擇(主要是因爲它是所有的數據庫我知道)

  • 我的Symfony2 +學說

  • 我現在坐的一個很好的理解e使用Elastica(彈性搜索的PHP庫)...雖然我注意到結果與facebook搜索相比很慢。

  • 我使用jQuery的前端開發

  • 我有HTML/CSS的一個堅實的理解

  • 我主持我的網站在Amazon EC2上

我有一個我想回答幾個具體問題

隨意添加其他任何東西你覺得會有所幫助。我的主要目標是學習創建高性能企業應用程序的最新技術。另外,我很好奇我會注意到多少性能提升,比如升級我的亞馬遜盒子。 Andddd,對於以下問題:

  1. Facebook如何快速返回他們的搜索結果,並且幾乎是在輸入時立即輸入?

  2. Facebook如何在聊天窗口之上實現其狀態更新。我可以輕而易舉地將一些東西拼湊在一起,每5秒鐘調用一次後端腳本並更新UI,但我不確定我會遇到什麼類型的性能問題,或者這是甚至Facebook如何做。

  3. facebook狀態更新如何彙總並僅與朋友相關和/或訂閱源偏好。

  4. MySQL不再是速度和可伸縮性選擇的數據庫嗎?

  5. 我應該查看和閱讀哪些資源和書籍?我花了每天閱讀有關我已經使用的東西......但我想更好地把精力集中在潛在的更有用的東西上。

  6. 一般來說,什麼技術,包括語言,服務器和數據庫「棧」將被用於創建類似Facebook的(請注意,我不希望建立一個社交網站)

  7. 是使用像symfony2這樣的框架,而不是編寫定製的定製解決方案,性能會受到很大影響嗎?(我知道代碼的質量明顯的問題,但總的來講)

如果你沒有回答所有這些,數三,四,五可能是最重要的。

在此先感謝。快樂的編碼。

回答

2

可伸縮性是關於數據的位置,它是如何檢索以及如何更新的。實現語言幾乎無關緊要。

如果您有一個真相源,它會立即成爲瓶頸。這可能不會那麼糟糕。如果瓶頸是5萬QPS,那麼您可能不需要修復它一段時間。

你問很多關於Facebook,然後解釋說你不想建立一個。縮放系統完全是關於選擇適合您嘗試提供的數據的設計。所以除非你給我們提供一些你想要構建的想法,否則幫助你設計縮放比較困難。

作爲一個微不足道但具體的例子,Google的websearch和GMail系統的數據存儲設計完全不同。兩者都非常快,但他們的設計是不同的,因爲數據,它的使用模式,更新和它的特點都非常不同。

要開始數據設計過程,首先需要了解您需要的數據。然後想想

  1. 全局一致性 - 是否所有用戶都需要查看數據的一致視圖?如果是這樣,縮放將非常困難。 (想想Facebook,GMail和Stackoverflow--在這些情況下,我們不需要看到數據的即時一致視圖)。

  2. 耐用性 - 是否可以接受丟失更新?如果不是,那麼在告訴調用者請求已完成之前,您需要堅持所有數據(在硬件丟失不是問題的不同位置,記住您不願意丟失更新)。

  3. 性能 - 用戶的性能需求是什麼?

在大多數系統中,你只能設計得到這三件事中的兩件,而你必須犧牲第三件才能做到這一點。

繪製您的設計圖。指向它上面的每個盒子(一個盒子可以是計算機,路由器,數據庫實例,磁盤,內存數據結構等,但不是表格或數據庫行)。問,「我們有多少,最多?」如果答案是「1」,那麼你的設計是不可擴展的。如果答案是「儘可能多,但他們需要同步」,那將是您的縮放挑戰;再看看上面編號的點。

+0

這真的讓我思考。我的應用程序中有一些區域應該具有全局一致性。這通常是用某種類型的javascript計時器完成的,該計時器根據特定條件檢查後端是否有新的更新。有一個領域我很想了解更多。也就是說,Facebook的搜索如何幾乎瞬間恢復(並在輸入時檢索結果?) – ThinkingInBits 2012-03-04 15:59:14

+1

我認爲您誤解了全球一致性。這是系統的屬性,在任何給定時刻的所有外部交互都會顯示相同的數據視圖。例如,您和我在同一天(例如)在10:00:00.000處查看(比如說)Twitter,並且必須看到相同的Tweets。相反,如果我在8秒之後纔看到用戶@foobar發佈的最新推文,只要我確實能夠看到它,會造成什麼樣的危害?用戶通常更關心性能和數據持久性。 – 2012-03-05 23:10:36

相關問題