為什麼我要選擇erlang+go進行伺服器架構(1)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

原創文章,轉載請註明出處:伺服器非業餘研究http://blog.csdn.net/erlib 作者Sunface

估計很多同學看到這裡都會覺得迷惑,go的大名已經如雷貫耳了,但是erlang?這個東東是神馬?難道是程式設計語言?怎麼從來沒聽說過。

這裡請允許我先介紹一下使用Erlang開發的比較有名的應用:

一:whatsapp

      只憑32個技術人員,如何應付4.5億的使用者?對於剛剛被Facebook用190億美元收購的WhatsApp來說,答案是Erlang——一種誕生於上世紀80年代的程式設計語言,終於在此時走到了聚光燈下。

      這個應用把erlang的特性發揮到了極致,利用到了它最好的vm、 叢集基礎設施、資料庫mnesia, 消除了非常多的資料Scale、記憶體池和鎖的問題, 提到的技術和修正點非常值得我們參考。

雖然大部分的解決方案我們在日常都差不多用過。但是他很系統的整理出來,用在商業系統了,這是個非常大的飛躍。

可以服務4.5億使用者的高可靠架構:

需要注意的是, WhatsApp的整體架構並未公開,這裡僅僅是從不同資訊源中擷取不同的片段。Rick Reed的講座主要分享了使用Erlang實現單伺服器200萬串連數,雖然很有價值,但是並不是整個應用架構

這些統計是當下系統的一些資料,更多針對資料存放區、訊息、meta-clustering以及新加入的BEAM/OTP補丁。

·4.5億的活躍使用者,並且是史上最快達到這個數位公司

·32個工程師,平均每人支撐1400萬活躍使用者

·每天收發跨7個平台的500億訊息

·平均每天註冊使用者過百萬

·0廣告開銷

·800萬投資

·數百個節點

·8000+核心

·數百TB記憶體

·每秒Erlang訊息超過7000萬

·在2011年,WhatsApp單伺服器取得 100萬個tcp會話,同時還有記憶體和CPU剩餘。在2012年,tcp會話發展到了200萬。


·

2013年WhatsAppf發表twriter聲明70億訊息入站,110億訊息出戰,即每天處理180億訊息,偉大的2013!

二百多萬的長串連push伺服器:

whatsapp資料集mnesia的規模:

生產系統的資料:

每秒的訊息數:

發展曆程:

1. WhatsApp伺服器基本上完全使用Erlang實現

·做後端訊息路由的伺服器系統使用Erlang實現

·值得炫耀的是,如此龐大數量的活躍使用者只使用非常少的伺服器來管理,團隊一致認為這很大程度上歸功於Erlang。

·值得注意的是,Facebook Chat就是在2009年使用Erlang開發,他們棄用Erlang的原因是難以招聘到優秀的程式員。

2. WhatsApp伺服器最早從Ejabberd開始

·Ejabberd是個非常出名的開源Jabber伺服器,使用Erlang實現。

·最初選用它的原因是開放、廣受開發人員關注、易於開始以及Erlang在大型通訊系統上的長期口碑。

·接下來的許多年一直從事Ejabberd的重寫和修改,包括從XMPP轉換到內部開發協議、調整程式碼程式庫以及重設計一些核心組件,對Erlang VM做了大量的修改以獲得高效能。

3. 為了應對每天500億訊息,工作重心被放到可靠系統的打造上,貨幣化對於我們來說還是件遙遠的事情。

4. 系統的健康情況主要看隊列的長度,每個節點上訊息佇列的長度都會被一直監控,超過預先設定的臨界值則會發出提醒,多個警報發生則標誌著系統進入了下一個瓶頸。

5. 通過上傳圖片、音頻、視頻到一個HTTP伺服器上來發送多媒體訊息,然後將連結與Base64編碼的縮圖一起添加到內容(如果可用)。

6. 有些代碼基本上每天都在變化,通常情況下是一天幾次;當然,峰值期間必須避開的。Erlang非常適用於將修改或者是新功能添加到產品,熱載入意味著無需重新啟動就可以實現修改,錯誤可以很快的得到解決,同樣通過熱載入,系統變得更加松耦合,這可以讓更新快速的發布。

7. WhatsApp使用了什麼樣的協議?WhatsApp伺服器集區使用了SSL Socket,在用戶端重新串連對訊息進行檢索之前,所有訊息都會在伺服器上排隊。訊息的成功檢索會發回給WhatsApp伺服器,它將會被重新轉寄給原始寄件者;一旦用戶端成功接收這條訊息,它就會在伺服器儲存中擦除。

8. WhatsApp註冊程式的內部工作機制是什麼樣的?WhasApp依賴電話IMEI號碼來建立使用者名稱/密碼,這點在最近已經修改。WhatsApp現在會讓應用發送一個包含5位元Pin的一般請求,然後給這個電話號碼發送一個SMS,這意味著WhatsApp用戶端不再受限於某台手機。基於Pin的號碼,應用會從WhatsApp請求一個唯一的鍵,這個鍵將作為未來的使用密碼,這同樣意味著在新的裝置上註冊後會無效原有裝置上的鍵。

結果

開始時每個伺服器有20萬個並發串連。

第一個瓶頸出現每台伺服器42.5萬個串連的時候。系統遇到了很多衝突,工作停止了。安裝調度器檢測有多少有用的任務被停止、睡眠,或迴轉了。在載入時,它開始遇到睡眠鎖,整個系統只用35-45%的CPU利用率,但發送器的CPU利用率卻達到了95%。

第一輪修複使串連數超過100萬個。

VM利用率為76%,CPU利用率為73%,BEAM模擬器利用率為45%,與使用者百分比很吻合,這是件好事,因為模擬器得和使用者一樣。

通常CPU利用率並不是好的評估方法,因為可能由於發送器使用CPU導致系統看起來很忙。

一個月以後解決了瓶頸,每個伺服器串連數達到200萬個。

BEAM利用率為80%,與FreeBSD開始分頁的情況接近。CPU利用率大致相同,有兩倍的串連數。發送器遇到了衝突,但運行得很好。

看來測試可以暫停了,這時開始分析Erlang代碼。

最初每個串連有兩個Erlang進程,消減為一個。

用計時器完成一些工作。

在每個伺服器有280萬串連時達到頂峰

571k pkts/sec, >200k dist msgs/sec

做一些記憶體最佳化,VM載入下降到70%。

嘗試過將串連數增加到300萬,但沒有成功。

·當系統遇到故障時,查看長訊息隊列(單個訊息佇列或訊息佇列總和)。

·將每個進程的訊息佇列統計添加到BEAM裝置上。包括髮送/接收了多少條訊息以及發送/接收的速度。


二:RabbitMq

    這個相信大家都聽說過,世界上最好的企業訊息佇列系統之一。

三:Web架構

    Mochiweb,CowBoy等

四:電信層級的應用

    愛立信等電信公司

五:遊戲伺服器領域的大範圍應用

    特別是在頁遊和手遊領域,erlang簡直如魚得水,用erlang開發出的千萬級流水遊戲也是數不勝數

六:資料庫

    CouchDB,Riak等

七:其他領域的應用

    目前據我所知,在銀行業務,醫學業務,雲業務領域都可以看到erlang活躍的身影.


欲知下文,請繼續閱讀:為什麼我要選擇erlang+go進行伺服器架構(2)



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.