當前位置:
首頁 > 科技 > 趙麗穎、馮紹峰的官宣炸了微博的高並發系統!

趙麗穎、馮紹峰的官宣炸了微博的高並發系統!

2018 AI開發者大會是一場由中美人工智慧技術高手聯袂打造的AI技術與產業的年度盛會!這裡有15+矽谷實力講師團、80+AI領軍企業技術核心人物、100+技術&大眾實力媒體、1500+AI專業開發者——我們只講技術,拒絕空談!

參加2018 AI開發者大會,請點擊

【 CSDN 編者按】風雨之後見彩虹,分手季之後就是喜訊季。時針撥到了今晨的 10 點 07 分,演員趙麗穎和馮紹峰同時發了一則微博,正式向公眾官宣:

消息一出,八方祝福,還有無數網友點贊良心明星趙麗穎和馮紹峰,畢竟在這個正常的工作日、正常的工作時間來報告喜訊,一沒讓各路小編在節假日加班,二沒讓她們大半夜起來趕稿,但是,唯一讓人心疼的還要非微博的程序員小哥哥莫屬,說好的支持八位明星並發出軌的呢?怎麼一對結婚就又癱了呢?

因為微博又雙叒叕崩潰了!

回想上一次微博大範圍的宕機事件,還是在去年 10 月鹿晗和關曉彤宣布戀情的時候。彼時的微博程序員小哥哥還在結婚典禮上,遇上了鹿晗公布戀情,不得不從酒席上離開處理微博異常後繼續婚禮。

此後,為了避免類似事件再次發生,微博工程師們加班加點經過一個月的努力,終於揚眉吐氣地表示「新浪微博系統可同時支持 8 位明星並發出軌了」。

萬萬沒想到,事實再一次證明了猝不及防的喜訊扎破了吹大的牛皮,對此,微博回應稱,內部會仔細復盤,將加強技術儲備,完善應對方案。而針對此前的「支持 8 位明星並發出軌了」消息,微博 CEO@來去之間發博表示,該公司的技術專家胡忠想老師指的是信息流,目前熱搜同事沒有立過 flag。

那麼回歸技術本身,面對如此大的高並發流量和屢次崩潰的系統,作為程序員是否可以有較好的方法來應對及解決?在此,技術專家極客猴為我們分享了一篇有關解決高並發的科普文,希望對大家有所裨益。

以下為全文:

「高並發」對後台開發同學來說,既熟悉又陌生。熟悉是因為面試和工作經常會提及它,陌生的原由是伺服器因高並發導致出現各位問題的情況少之又少。同時,想收穫這方面的經驗也是"摸著石頭過河", 需要大量學習理論知識,再去探索。

如果是客戶端開發的同學,字典中是沒有「高並發」這個名詞的。這驗證了一句老話,"隔行如隔山"。客戶端開發,特別是手機應用開發,更多地是考慮如何優化應用的性能,降低 App 的卡頓率等。

什麼是高並發?

由於分散式系統的問世,高並發(High Concurrency)通常是指通過設計保證系統能夠同時並行處理很多請求。通俗來講,高並發是指在同一個時間點,有很多用戶同時的訪問同一 API 介面或者URL 地址。它經常會發生在有大活躍用戶量,用戶高聚集的業務場景中。

其實,高並發也離我們的生活並不遙遠,例如大學學校的選課系統。一到選課的時候,一大批學生同時選課,導致系統出現「不良反應」;再如淘寶的 618 和雙 11 購物活動;遇到節假日,12306 上演的「搶票大戰」。另外,DDos 攻擊也屬於高並發的場景之一。

高並發會帶來的後果

服務端:

高並發會導致站點伺服器 /DB 伺服器資源被佔滿崩潰,甚至出現伺服器宕機的情況;數據的存儲不完整,數據更新異常問題。

用戶端:

服務端的問題是高並發的直接反饋,而客戶端是間隔反饋。它反饋給用戶情況是糟糕的體驗。

提高系統並發能力的方式

在這個「雲」的時代,提高分散式系統並發能力的方式,方法論上主要有兩種:垂直擴展(Scale Up)與水平擴展(Scale Out)。

1、垂直擴展

提升單機處理能力。垂直擴展的方式又有兩種:

增強單機硬體性能,例如增加 CPU 核數如 32 核,升級更好的網卡如萬兆,升級更好的硬碟如 SSD,擴充硬碟容量如 2T,擴充系統內存如 128G;

提升單機架構性能,例如使用 Cache 來減少 I/O 次數,使用非同步來增加單服務吞吐量,使用無鎖數據結構來減少響應時間。

2、水平擴展

只要增加伺服器數量,就能線性擴充系統性能。虛擬化技術的出現,讓水平擴展變得輕鬆且簡單。現在的雲主機幾乎是虛擬主機,而不是物理主機。這樣的話,線性擴充也就是分分鐘的事,前提是要有足夠的物理主機支撐。

高並發的三個經典問題

1、單台伺服器最大並發

單台伺服器最大並發問題,一般是指一台伺服器能夠支持多少 TCP 並發連接。

一種理論說法是受到埠號範圍限制。操作系統上埠號 1024 以下是系統保留的,從 1024-65535 是用戶使用的。由於每個 TCP 連接都要佔一個埠號,所以我們最多可以有 60000 多個並發連接。

但實際上單機並發連接數肯定要受硬體資源(內存、網卡)、網路資源(帶寬)的限制。特別是網卡處理數據的能力,它是最大並發的瓶頸。

2、C10K 並發連接問題

C10K 並發連接問題是指單機 1 萬個並發連接問題。如何突破單機性能局限,是高性能網路編程所必須要直面的問題。這些局限和問題最早被 Dan Kegel 進行了歸納和總結,並首次成系統地分析和提出解決方案,後來這種普遍的網路現象和技術局限都被大家稱為 C10K 問題 。

C10K問題本質上是操作系統的問題。對於 Web1.0/2.0 時代的操作系統而言, 傳統的同步阻塞 I/O 模型都是一樣的,處理的方式都是 requests per second,並發 10K 和 100K 的區別關鍵在於 CPU。

創建的進程線程多了,數據拷貝頻繁(緩存 I/O、內核將數據拷貝到用戶進程空間、阻塞), 進程/線程上下文切換消耗大,導致操作系統崩潰,這就是C10K 問題的本質。

3、C10M並發連接問題

C10M 並發連接問題指的是單機伺服器實現 C10M(即單機千萬並發連接)。回顧過去的 10 年裡,我們面臨高性能網路編程領域著名的 C10K 問題,最終也成功提出解決方案。下一個 10 年,是時候考慮 C10M 並發問題了。

Django 與高並發的聯繫

想弄清楚這個問題,首先要了解下 Django 在伺服器中所處的位置。

Django 應用伺服器可以分為三層:

Web 框架層:Web框架層就是我們開發出來的 Django Web 應用程序。它負責處理 HTTP 請求的動態數據。

WSGI 層:WSGI 不是用於與程序交互的API,也不是真實的代碼,它只是一種介面,僅適用於 Python 語言,其全稱為 Web Server Gateway Interface。其定義了 Web 伺服器和 Web 應用之間的介面規範。

Web 伺服器層:Web 服務層作用是主要是接收 HTTP 請求並返迴響應。常見的 Web伺服器有 Nginx、Apache、IIS等。

特別是 Nginx,它的出現是為了解決 C10K 問題。Nginx 依靠非同步事件驅動架構來幫助其處理大量的並發會話,由於其對資源的輕量利用和伸縮自如的特性,它成為了廣受歡迎的 Web 伺服器。

Django 框架注重的數據交互,所以考慮的問題是 Django 適不適合於高並發的場景。它是一個經過大型網站規模驗證的框架。Instagram 支撐上億日活,所以 Django 能適用於高並發場景。所以不是想著 Django 框架能支撐到多大的並發量,而是我們想要抗住很大的並發量,怎麼優化現有框架。

作者:極客猴,熱衷於 Python,目前擅長於利用 Python 製作網路爬蟲以及 Django 框架。

聲明:本文為作者投稿,版權歸其個人所有。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

微軟曾經的二號人物永遠地離開了
微軟原生 Notepad 融入 VS Code 才是出路?

TAG:CSDN |