天天看點

如何打造一個高并發,處理海量資料,高性能,易擴充,可伸縮,高可用的網站?

簡而言之,采用分布式系統,分布式應用和服務,分布式資料和存儲,分布式靜态資源,分布式計算,分布式配置和分布式鎖。

負載均衡,故障轉移,實作高并發。

高可用:

主要是利用備援資料的原理,應用和伺服器部署在多台機器上,資料存儲部署在多台機器上,在多台機器上利用mysql的主從分離實作多态伺服器資料互相備份,萬一有一台伺服器當機,直接轉移另外一台資料伺服器上讀取資料。也不會導緻資料丢失。

對于應用伺服器,可以通過nginx負載均衡實作裝置組成一個叢集,如果有伺服器當機,就需要把請求切換到其他伺服器上,這樣級可以實作高可用,但是,在應用伺服器上不能儲存請求的會話資訊,伺服器當機,會話丢失,即使将使用者請求轉發到其他伺服器上也無法完成業務處理。

對于存儲伺服器,它是存儲資料,資料需要實時備份,當伺服器當機時,隻需要将請求轉移到其他可用的伺服器上即可。

叢集:可伸縮性

伸縮性是指可以動态的向叢集伺服器中添加一個節點或者減少一個節點。

但是,對于緩存伺服器,添加節點或者減少節點都會導緻資料不可讀,雖然可以通過從新通路資料庫獲得資料,但是,如果應用已經嚴重依賴緩存,讀取那些無法通路的資料,也會導緻整個網站癱瘓,是以要改進路由算法來保證緩存資料的可讀性。

異步:各個系統之間越獨立,它們之間關系越少,越好

單一伺服器可以通過多線程實作共享記憶體隊列的方式實作異步,将處在業務前面的線程将輸出寫入隊列,後面的線程将從隊列中讀取資料進行處理。在分布式系統中,多個伺服器叢集通過分布式消息隊列實作異步,分布式消息可以看成是記憶體隊列的分布式部署。

1.松耦合,異步架構是典型的消費者和生産者模式,兩者之間不存在直接調用,隻要保持資料結構一緻,彼此功能可以随意改動沒有任何影響,可擴充性高。

2.提高可靠性,一旦消費者伺服器發聲故障,資料會在消費者消息隊列中堆積,不會影響生産者可以繼續處理業務請求,系統整體表現無故障,消費者伺服器恢複後,繼續處理消費者消息隊列資料。

3.加快網頁反應速度,處在業務處理前的生産者将消息傳遞給消息隊列後,不需要等待消費者傳回消息就可以直接傳回,響應延遲減少。比如:秒殺業務等。

4.消除并發通路高峰,雙11等活動高峰,可能會造成網站并發量大,負載過重,響應延遲,嚴重甚至當機,使用消息隊列就會将請求資料的消息放入消息隊列中,等伺服器依次處理,就不會造成伺服器壓力大,負載過重等情況。

備援:

利用伺服器備援運作,資料備援備份,這樣當某台伺服器當機的時候,可以将其上的服務和資料通路轉移到其他伺服器上。

通路和負載很小的服務也必須部署至少兩台伺服器構成的一個叢集,其目的就是通過備援實作高可用。資料庫除了定期備份,實作冷備份外,為了保證線上業務高可用,還需要對資料庫進行主從分離(ameba),實時同步實作熱備份。