1. 程式人生 > >微信紅包的支撐架構原理是什麼?

微信紅包的支撐架構原理是什麼?

每次到過年過節的時候,我們總是會在群裡發上幾個紅包,那麼全國各地的人都在發紅包,伺服器端要處理的請求量非常大,那麼它是怎麼實現能處理這麼多請求的呢?

那麼他就涉及到了以下幾個特點:

  • 高併發

  • 快速響應
  • 高處理量

 那麼我們如何實現高併發?

說到高併發,我們一般採用的使用叢集的方式解決單個伺服器硬體上的不足,叢集可以採用nginx進行負載均衡,將程式模組化,但是他會增加伺服器之間的網路io,雖然會有那麼一點的浪費,但是為了保證伺服器硬體上的支援,我麼還是選擇使用集權吧。。。

那麼我們又是如何實現的快速響應的呢?

快速響應一般指的就是cpu的使用,因為同一時間一個cpu只能處理一個數據,那麼我們就只能從減少每一個數據的cpu佔用時間

來下手,那麼cpu效能的浪費有主要體現在他的等待時間,比如我們的cpu要進行一個a+b的操作,但是a和b都是網路傳輸過來的,這時我們就可以在cpu等待資源過來前的這段時間,rangcpu去處理別的請求,那麼我們順藤摸瓜就能想出來,應該有一個佇列去儲存它要進行得操作,保證任何時間cpu都在處理資料,這樣訊息佇列的概念也就出來了。

儲存方面我們為了加快io可以使用cache快取資料庫,這樣可加快讀寫速度,因為我們的時間浪費一般浪費在io上邊(網路io或者本地磁碟io等),因此資料庫可以選擇快取資料庫。

為了降低伺服器的壓力,微信採用了將紅包在傳送者客戶端進行計算分割的功能,即紅包被髮過來時已經被分好份,而且

我們在進行網路傳輸時要儘量傳字串,因為字串不需要進行序列化和反序列化(及其耗費資源的一項工作)

那麼使用快取式資料庫,我們如何保證伺服器意外關機導致資料丟失呢?

這是我們就可以採用雙寫或者多寫,即同時寫入至少兩個快取資料庫,進行資料備份,那麼我們的記憶體終究是有限的,因此我們也要定期將資料寫入關係資料庫,以便長久儲存。

系統架構圖如下: