原创 高併發服務器的設計--架構與瓶頸的設計

做架構設計,難免有時候被人問及系統的瓶頸在哪,那首先來了解下什麼是瓶頸? 打個形象的比方,人的嘴巴可以吞下一整個麪包,但是卻咽不下去,因爲食管不給力,它比較細,所以嘴巴能吞下的食物大小要受到食管的粗細限制。 城市內部每天會產生幾十萬件跨城

原创 搭建一個後臺服務器--服務端(阻塞)

爲什麼 要在標題後面加個“阻塞”呢,因爲系統爲了增大併發,減小等待(阻塞),建立了另一種事件模式,後文將介紹,這裏只介紹阻塞的模型。 阻塞服務器要乾的事大致可以分爲以下幾步: 1.創建服務端監聽連接 2.產生用戶連接 3.接收用戶請求 4

原创 高併發服務器的設計--內存池的設計

不同的業務,設計也不盡相同,但至少都一些共同的追求,比如性能。 做服務器開發很多年了,有時候被人問到,服務器性能是什麼呢?各種服務器間拼得是什麼呢? 簡單的回答就是QPS,併發數,但有時候想想也許也不對。 QPS與併發數是針對同樣的業務而

原创 高併發服務器的設計--連接池的設計

高併發服務器需要有一些池的設計,如內存池,連接池,數據庫連接池。 池(pool)的設計主要考慮到一些資源的頻繁申請和釋放,尤其是在高併發的服務器中,幾萬甚至幾十萬併發每秒,設計人員不得不去考慮這些。 比如數據庫連接池(sql pool)

原创 rbtree 設計

什麼是樹? 大街上到處都是,大夥別說沒看過,除非你在沙漠中。 樹大致可以分爲根,莖,枝,葉。 大樹枝會套小樹枝,樹枝上都有葉子。 西方人有個聖誕節,聖誕來了,聖庭老人在樹上的每個枝丫上都掛了禮物,禮物上都寫上一個小朋友的名字,讓小朋友去樹

原创 大併發服務器之陣痛1---傳輸響應模式

如果你在淘寶上買過衣服,你會發現,模特的圖片一張張的加載起來實在是有點慢。有時候體驗簡直很糟糕。 我們來分析下傳輸生命線: 這是ald.taobao.com 域名下的三次請求,我們發現是按順序的請求響應,不禁要問,爲什麼三個請求不同時進

原创 搭建一個後臺服務器--客戶端

上篇規定的協議請求部分: request: username/password, 約定username與password  各佔32個字節(聯同末位0) 可以將客戶端的邏輯設計成: 1.將username,password  封

原创 高併發服務器的設計--緩存的設計

爲什麼需要緩存呢? 很簡單的道理,拿QQ做個比方,每天有幾億用戶登錄、查詢個人信息,且這些信息基本不會變化,如果你是架構師,你會選擇全部從數據庫中查詢麼,估計會被笑的。 一些業務要求大量且高速查詢的,數據庫必然會成爲瓶頸,雖然可以通過橫向

原创 hashmap 設計

先來看看泛型的數據隊列。 自然界中的數據關係多分爲兩種,拿人類來看,一類是靠人與人之間的關係來互相關聯,我稱爲關係型,另一種是靠屁股相互關聯,我稱爲位置型。 對於關係型,一個富豪家族,女屌絲想成爲其中成員很簡單,與其中一個老頭建立夫妻關係

原创 程序員也有風騷的青春

看完致青春,頗有感慨。 人家的青春可以拍成電影,咱的青春只能留做回憶了。 開發之路開始是很苦很累的,想當年剛剛創業的時候全靠家裏支出,剛來深圳一個月才掙三千塊。 剛畢業我去的是二線公司,有些同學畢業去了華爲騰訊,壓力比我還大,我掙得少點,

原创 大併發服務器不得不說的技術--http 緩存

前面所說技術訂都是服務器端一個人在努力,有時候也需要客戶端配合。 一個鏈接請求過程大致可以分成幾個階段 如果客戶端發送同樣的請求,且結果都一樣,我們是不是可以緩衝一下呢?是不是可以減少幾步呢?  的確可以,一般來說以下幾種方法: 1

原创 高併發服務器的設計--fastcgi的設計

服務器開發中不何或缺的要使用fastcgi,其使用方法如下: while( FCGI_Accept() >= 0 ){ printf( "Content-type: text/plain \r\n"

原创 搭建一個流媒體服務器--引子

在家休息一段時間了,中間有小公司老闆邀請,也有企鵝的幾個事業部的邀請,說實話要是放在以前應該都挺有興趣,不過現在看的淡了。 和企鵝幾個HR聊過,人家總是自我感覺良好,以爲薪水高一點就可以搞定原則了,其實在南山住的人有哪個不知道那個半夜12

原创 大併發服務器內存轉換的靈活運用,memcpy的思考

在很多的網絡開發中,經常會碰到一些內存轉換,如下面的場景: #define PACKAGE_PARSE_ERROR -1 #define PACKAGE_PARSE_OK 0 int parse_package( int* a, in

原创 搭建一個後臺服務器--引子

最近去了幾家公司面試,有一些大公司(比如企鵝)的考覈內容真心弱智,考的都是些算法,尼瑪,拿一個剛畢業的學生來做說不定也可以過的,看來本來就不是在招搞服務器的,舉個例子,企鵝多個部門都曾出的一道題:如何知道集合A,B中的相關性。 意思就是哪