如何獲得高併發的經驗?

時間 2021-05-08 20:14:49

1樓:飛援科技 章躍平

首先,需要機會參與有高併發產品機會,因為實戰經驗是前提;其次,需要對網路,系統架構,開發語言,資料庫調優有足夠的知識;再次,需要和測試同事保持密切合作,在系統上線之前,把高併發問題扼殺在搖籃;最後系統上線後,做好監控,運維工作,隨時把握系統流量壓力。最後還需要再安全,防doss攻擊上做好準備。

2樓:

先分析你這個問題

獲得高併發的經驗,目的是為了職業晉級,提出這個問題的人應該是缺乏實際高併發的開發場景。

如何解決這個問題

沒有捷徑,大家都是走殊途同歸的路線。需要掌握的知識大體一樣的,

首先明白unix檔案系統的設計原理,io操作除了簡單的write/read,還有epoll事件模型,讀取資料除了buffer/pipe外還有零拷貝技術。

二是弄明白各種網路模型的原理與區別,多程序模型/多執行緒模型的區別,不同語言不同框架採用的模型是哪一種

三是資料結構,我個人推薦讀redis的原始碼,了解它儲存資料的結構設計

了解前面三點後,你對單機的高併發設計有清楚的認識了,然後就是分布式系統設計的知識積累

未完待補……

3樓:silent night

第一,大公司招聘要求高併發經驗並不是絕對的,主要還是考驗你對多執行緒、高併發的理解;

第二,想獲取高併發經驗、好多框架以及設計都可以了解,最典型的就是看看資料庫PG、oracle等是怎麼處理日誌、事務以及併發請求的,多看原始碼;

第三,想要自己切身體會以及測驗,可以了解一下效能測試、壓力測試,自己高一些併發請求。

4樓:EnjoyMoving

現在分布式、高併發什麼的,都是爛大街,相關介紹的書籍都已經層出不窮了,這些書籍裡描述的就是一些應對高併發的經驗,

關於高併發 這篇文章裡提到的觀點,我是比較贊同的。只要有資源,就是搭積木一樣搭起來就行了。並沒有太多的神秘的東西。

當然,能真正對分布式、高併發系統有真實體感的,確實大多還是那些去過中大型公司的同學。不過需要說明的是,即使去了大公司,你也基本上沒什麼機會接觸到「高併發」,畢竟大公司一套負載均衡、幾百台機器,流量就扛住了,用不著個人業務開發考慮太多。

5樓:iseeyou

把功能完成和把功能做好是兩個不同的標準,我們在平時工作中要注意積累,比如乙個登陸,如果想實現這個功能很簡單,只需要匹配下使用者們和密碼即可,但如果要做好,那需要考慮的事情就太多了

怎麼保證安全性?網路傳輸安全,資料儲存安全等同賬戶多處登陸是否允許?

能支援多大併發?

如果暴力破解、暴力撞庫怎麼處理?

登陸頁面的效能如何?多長時間首屏,多長時間響應?

如果把這些事情都考慮並實現了,那麼所謂的高併發高效能經驗也就水到渠成了,這裡附乙個我們系統的一些優化經驗供參考:支付平台系統優化方法

6樓:張埃迪

做了幾年遊戲伺服器,答一回吧。併發上不去,首先當然要查效能熱點,看看是某個業務有效能問題,還是整個系統的底層介面成為了效能瓶頸。

前者要麼優化演算法,要麼讀快取,要麼自己做特殊業務的負載均衡(比如網遊裡面的登入排隊系統);

後者的話,分清楚哪些是cpu熱點,哪些是I/O熱點,一般底層介面做I/O呼叫很容易造成效能問題,比如很多阻塞性的系統呼叫,檔案的read,網路的阻塞性recv,資料庫的阻塞性查詢等等。所以目前主流的框架都主張使用多路I/O復用+非阻塞性呼叫,這樣就可以把分散在多個底層介面裡面的細粒度I/O呼叫,轉變成框架內的粗粒度呼叫,把作業變成流水線活,可以參考select/epoll這些模型的思想。這些都是架構上需要考慮的問題。

說起來容易做起來難,比如伺服器要接入乙個新的資料庫,而官方和第三方的driver只有同步介面,那麼要改成非同步,就需要你自己分析資料庫互動的底層協議了,自己抽象出非同步介面,最終問題還是變為網路的多路I/O復用問題上。如果要求不是特別高,上線程池解決也可以。

7樓:王下邀月熊

有很多比賽還是挺有意思的,譬如阿里雲的天池大資料等等。。。。我寫這個回答的目的是坐等大神指教國內外還有什麼類似的比賽,感激不盡。。。

8樓:

高併發的解決方案並非唯一,具體還是要根據實際情況來解決問題,據我了解,可以用多執行緒+佇列的方式或者快取+多執行緒+定時器的方式來解決。主要目的是減輕伺服器和資料庫的壓力

9樓:偉倫

高併發需要根據具體業務場景來做,曾經2年前寫了乙個毀weibo全自動系統..

一般高併發導致資料庫(死鎖)、伺服器端(超多請求阻塞)出現瓶頸。

要根據具體情況去設計一種合理的解決方案,當你遇到這問題的時候,就自然會去想方案,哪種方案最實際。我當時遇到的問題是一台伺服器,每天都是不停地跑各種API請求,資料庫讀寫不會停..就是伺服器永遠都不會空閒,因為伺服器任務太多,單位時間內如果跑不完,就會不斷疊加..

最終結果就是伺服器崩潰卡死。(.....後面有空再補充..

洗個澡先=.=)

10樓:冒泡

作為乙個QQ伺服器端開發表示,高併發的工作也不一定要求你有高併發經驗才能進,主要還是看基礎,以及你有沒有往這個方向想,比如你只有1k併發的業務,但是可以通過簡單擴充套件支撐更多併發,那就沒問題,如果你的系統只是針對這1k的業務量來設計,那估計沒戲了

高併發經驗其實沒啥,絕大多數技術跟你做低併發的差不多,有差別的那些也就是實踐中的一些技巧,多看看一些開源框架或伺服器吧

11樓:

混進大公司當小工,初級工程師(後端的什麼活兒),自學各種併發相關的元件,以及常用技術。。。然後慢慢成長,然後獲取老大的信任,然後,慢慢把手頭的東西託管給你,自己好好幹,小流量處理好了,然後獲得中流量的管理,最後獲得大併發的管理。

Java Web高併發搶單如何實現?

於Mr 簡單的,分布式服務用redis做個簡單的分布式鎖,因為redis是單執行緒多路復用,判斷incr返回就行,比如你有十個庫存,超過的全部返回失敗。其餘細節退貨或者下單失敗恢復庫存什麼的自己考慮一下。 張鵬飛 圓胖腫 首先第一步,你得讓海量請求進來,第二步才是對進來的請求排隊處理。第二步只是時間...

1秒1000併發 高併發需要什麼樣的伺服器?

網易數帆 題主的兩個問題可以理解成高併發下對MongoDB的技術優化需求,可以從兩個層面出發考慮 首先我們知道幾個概念 MongoDB是NoSQL面向文件型儲存資料庫,屬於重記憶體的型別,特別是在MongoDB 3.2預設的 WiredTiger引擎下,缺省會占用大量的記憶體來保證自身效能。因此Mo...

大佬們,請教個高併發下的場景問題?

涼夜 簡單點寫的話你就用阻塞佇列去實現 使用兩個執行緒A執行緒和B執行緒,A執行緒可以當做你說的a方法作為生產者,B執行緒當做b方法,作為消費者,另外有個阻塞佇列,這個阻塞是是事件通知的關鍵 首先A執行緒負責處理你的a方法呼叫的結果,可以將結果存入乙個map中,然後檢查map數量,數量不足則繼續結束...