2018-07-10-淺談高并發(fā)和設(shè)計的一些原則(JAVA)

前言

在設(shè)計一個系統(tǒng)的時候,因為場景露泊、時間而異喉镰、資源配備等不是一下子就能設(shè)計得非常完美,在有限的資源下解決最核心的問題惭笑,預(yù)測并發(fā)現(xiàn)以后可能出現(xiàn)的問題侣姆,并逐步解決,所以說系統(tǒng)設(shè)計是一個不斷迭代的過程沉噩,不要過度設(shè)計捺宗,從迭代中演變和完善。

關(guān)于并發(fā)川蒙?
并發(fā)包括并行從概念上來講都是為了提高效率蚜厉,在最短的時間內(nèi)怎么來完成最多的事情。
包括現(xiàn)在的雙十一派歌、雙十二等等弯囊,在一秒鐘完成了多少的訂單,這些都會涉及到并發(fā)胶果。
并發(fā)和并行
有大神關(guān)于兩者的闡述:“并發(fā)關(guān)乎結(jié)構(gòu)匾嘱,并行關(guān)乎執(zhí)行”

  • 并發(fā):在不同時間內(nèi)處理多個任務(wù),單個CPU輪流使用早抠。比方說在你吃飯的時候去上了個廁所又回來吃飯霎烙。
  • 平行:同時處理多個任務(wù),多個CPU執(zhí)行蕊连。比方說你邊吃飯邊上廁所悬垃。

并發(fā)類型

  • 計算密集型:需要非常多的CPU計算資源,對于密集型完全取決CPU核數(shù)甘苍,避免過多的線程上下文切換來充分發(fā)揮優(yōu)勢尝蠕,理想方案:JDK1.8中增加了一個并行計算,較理想線程數(shù)=CPU核數(shù)*2
  • IO密集型:涉及到大量的網(wǎng)絡(luò)傳輸载庭,不僅如此看彼,和數(shù)據(jù)庫廊佩、和緩存間的交互也涉及到IO,一旦發(fā)生IO靖榕,當(dāng)前就會進(jìn)入等待狀態(tài)标锄,當(dāng)IO結(jié)束,數(shù)據(jù)準(zhǔn)備好后茁计,才會繼續(xù)執(zhí)行料皇。理想方案:線程數(shù)=CPU核數(shù)/(1-阻塞系數(shù)),這個阻塞系數(shù)一般為0.8~0.9之間星压。

設(shè)計高并發(fā)原則

  1. 無狀態(tài)無狀態(tài)就是無需做持久化操作践剂,有狀態(tài)就會涉及到數(shù)據(jù)同步,消耗內(nèi)存消耗寬帶同時還會涉及到鎖的操作租幕,影響快速擴(kuò)容舷手。
  2. 粒度化讀寫分離也好,應(yīng)用服務(wù)化也好就是為了控制之間的依賴劲绪,分散請求提高并發(fā)效率男窟,同時管理起來也比較清晰。
  3. 場景化合適的場景選擇合適的技術(shù)(消息隊列贾富、數(shù)據(jù)異構(gòu)歉眷、緩存銀彈、并發(fā)化)
    • 消息隊列:解耦一些不需要同步調(diào)用的服務(wù)颤枪,或者訂閱一些關(guān)心的變化汗捡,還能流量削峰/緩沖,某些場景會有重復(fù)消息(弊端)畏纲,可以在業(yè)務(wù)層做防重和校對處理扇住。
      流量削峰/緩沖

      RDBMS注重的是ACID,NOSQL注重的是CAP和BASE盗胀,一般是犧牲強(qiáng)一致性艘蹋,而保證最終一致性。
      BASE
    • 數(shù)據(jù)異構(gòu):我們都知道系統(tǒng)都是由數(shù)據(jù)構(gòu)成的票灰,而數(shù)據(jù)的存儲位置和獲取的環(huán)境不一樣女阀,速度也就不一樣。單表肯定比聯(lián)表快屑迂,內(nèi)存取肯定比磁盤取快浸策;就像前面的文章有提過,也是我個人非常喜歡的一句話:時間換空間惹盼,空間換時間庸汗。所以可以根據(jù)實際場景和業(yè)務(wù)來設(shè)計,包括根據(jù)數(shù)據(jù)的權(quán)重犧牲一部分的資源來提高效率手报,例如:聯(lián)表可以考慮數(shù)據(jù)冗余夫晌,或者關(guān)鍵數(shù)據(jù)的獲取合并存儲雕薪。
    • 緩存銀彈:緩存對于讀取服務(wù)來說就是顆抗流量的特效武器昧诱。
      緩存
    • 并發(fā)化:并發(fā)化的理論其實很簡單晓淀,把沒有依賴關(guān)系的數(shù)據(jù)并行獲取≌档担可能不太好理解凶掰,例如:B依賴A C沒有依賴 D依賴B,那么最好的方式就是A蜈亩、C并行獲取懦窘,然后再獲取B,再是D稚配。

附上設(shè)計例圖:


高并發(fā)

結(jié)語

關(guān)于例圖里面的一些詳細(xì)示例以后再慢慢補(bǔ)充吧畅涂,說了淺談就是淺談,要有原則(別打我~~~)道川!
里面的圖片用的是思維導(dǎo)圖Xmind做的午衰。
推薦:淺談高可用和設(shè)計的一些原則(JAVA)
個人博客~
簡書~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冒萄,隨后出現(xiàn)的幾起案子臊岸,更是在濱河造成了極大的恐慌,老刑警劉巖尊流,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帅戒,死亡現(xiàn)場離奇詭異,居然都是意外死亡崖技,警方通過查閱死者的電腦和手機(jī)逻住,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迎献,“玉大人瞎访,你說我怎么就攤上這事》拊危” “怎么了装诡?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長践盼。 經(jīng)常有香客問我鸦采,道長,這世上最難降的妖魔是什么咕幻? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任渔伯,我火速辦了婚禮,結(jié)果婚禮上肄程,老公的妹妹穿的比我還像新娘锣吼。我一直安慰自己选浑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布玄叠。 她就那樣靜靜地躺著古徒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪读恃。 梳的紋絲不亂的頭發(fā)上隧膘,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音寺惫,去河邊找鬼疹吃。 笑死,一個胖子當(dāng)著我的面吹牛西雀,可吹牛的內(nèi)容都是我干的萨驶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼艇肴,長吁一口氣:“原來是場噩夢啊……” “哼腔呜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豆挽,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤育谬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后帮哈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膛檀,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年娘侍,在試婚紗的時候發(fā)現(xiàn)自己被綠了咖刃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡憾筏,死狀恐怖嚎杨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氧腰,我是刑警寧澤枫浙,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夺艰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一紧帕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桅打,春花似錦是嗜、人聲如沸愈案。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽站绪。三九已至,卻和暖如春涩嚣,著一層夾襖步出監(jiān)牢的瞬間崇众,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工航厚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锰蓬。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓幔睬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芹扭。 傳聞我的和親對象是個殘疾皇子麻顶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353