寫給程式設計師---技術感悟及有關高併發伺服器框架設計
以一個從業19年的it技術人員視角看,有時候感覺到現在的程式設計師挺幸福的,各種開源產品,多種開發框架,所謂的架構設計更多的是選擇/選型;再想想曾經的微控制器,受限記憶體,低頻cpu,程式語言以彙編為主,到後來c/c++......日漸蒼白的頭髮,天知道我們經歷了什麼!
技術發展的步伐伴隨著我們這代人的成長,見證著程式猿們為了變“懶”開始契而不捨的追求“複用”,從一開始的原始碼級複用,到工程/模組複用,再到二進位制複用,直到今天的服務化複用,我們經歷著從編碼規範,到分層架構,再到動態庫,進而追隨MS發展出的com/dcom,直到SOA及各種openRPC、微服務......一晃已是不惑之年!
什麼是技術?在我看來所謂的技術其實是利用趁手的工具解決問題的能力,而經驗是在你看多了失敗後,從直接或間接的教訓中收穫的;經驗可在很大層度上避免犯錯,而解決問題的能力是要求總能找到最佳解決方案。時間沉澱下來的是:沒吃過豬肉,但見過各種豬各種跑法;收穫總是負面的,很多時候你會覺得,所謂流行或牛逼的技術,其實大多都是新瓶裝老酒。
之前有朋友熱衷高併發伺服器架構設計,其實這是個偽命題,實際情況是:併發能力90%以上的場景是取決於業務的,更多的因該考慮scale out,再明確點就是需要考慮業務邏輯及資料訪問的scale out,這也是很多網際網路大廠解決方案的核心所在。對於另外10%的情況如果從純技術架構上探討高併發框架,應該考慮的事情包括但不限於:
1. 需要實現一個AIO框架,如果需要跨平臺至少需要考慮適配 iocp/select/poll/epoll/kqueue/port等平臺相關實現方案,需要抽象出操作介面及事件介面。
2. 需要實現一個高效的thread-pool,需要儘可能降低執行緒切換機率(滿負荷情況下),因此你可能需要一個lock-free佇列/或連結串列,精心設計機制,避免執行緒飢餓或任務延遲
3. 需要設計高效的事件處理機制,事件佇列建議使用lock-free實現;有必要使用thread-pool進行任務分發,另外最好考慮一下IO執行緒和任務處理執行緒的隔離,防止io檢測不及時;協議解析歸到哪類執行緒(IO/業務),也需要慎重考慮。最好的辦法是讓執行緒池保留對應數量的“緊急任務”執行緒,然後讓IO/業務按規則共享池內執行緒。
4. 框架的對外程式設計介面需要規範。建議封裝良好,遮蔽socket控制程式碼,讓外部使用者僅僅運算元據。至少需要暴露操作介面和事件介面。
曾經大致按照這個思路實現過一個網路框架,效能還行,http小報文(64B)QPS高於nginx約30%(nginx約85萬/s,自研框架約110萬/s),測試環境24C/64G,雙千兆網路卡,併發連線數2048,CPU滿負。已用於商用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69911776/viewspace-2643051/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 高併發設計技術方案
- 給程式設計師的幾點程式設計經驗----《編寫高質量程式碼》程式設計師
- 《java併發程式設計的藝術》Executor框架Java程式設計框架
- 《java併發程式設計的藝術》併發容器和框架Java程式設計框架
- [仁潤雲技術團隊]併發程式設計-(2)併發程式設計的目標程式設計
- 一個老程式設計師的程式設計之路,寫給年輕的程式設計師們程式設計師
- Java 併發程式設計 Executor 框架Java程式設計框架
- 高併發網路程式設計程式設計
- 好程式設計師技術教程分享JavaScript運動框架程式設計師JavaScript框架
- 【高併發寫】庫存系統設計
- Java併發程式設計-鎖及併發容器Java程式設計
- Java併發程式設計藝術Java程式設計
- 程式設計師如何寫好一篇技術文章?程式設計師
- Java程式設計師必讀:最新流行的Java開發程式設計技術Java程式設計師
- 高併發程式設計-AQS深入解析程式設計AQS
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 高併發業務下的無損技術方案設計
- 程式設計師的工資高,到底程式設計師的工資有多高?程式設計師
- 寫給新入行的程式設計師小朋友程式設計師
- 寫給前端程式設計師的命令列入門前端程式設計師命令列
- 程式設計師的技術遺產程式設計師
- 程式設計師有哪些常用的技術網站呢?程式設計師網站
- it程式設計師常用的技術社群網站有哪些?程式設計師網站
- Java併發程式設計的藝術,解讀併發程式設計的優缺點Java程式設計
- 程式設計師寫好技術文章的幾點小技巧程式設計師
- 併發程式設計程式設計
- 程式設計師、技術主管和架構師程式設計師架構
- Java併發程式設計-讀寫鎖(ReentrantReadWriteLock)Java程式設計
- 寫給Java程式設計師學習路線圖Java程式設計師
- 寫給前端程式設計師的英文學習指南前端程式設計師
- WebGL程式設計指南(8)高階技術Web程式設計
- 如何設計高併發介面?
- 高併發設計筆記筆記
- 關於PHP程式設計師技術職業生涯規劃PHP程式設計師
- 程式設計師技術入股的那些坑程式設計師
- 程式設計師如何利用技術管理技巧程式設計師
- Java外包程式設計師的技術出路Java程式設計師
- 《java併發程式設計的藝術》併發工具類Java程式設計