色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

如意 ? 來(lái)源:CSDN ? 作者:finethere ? 2020-06-20 09:16 ? 次閱讀

在日常運(yùn)營(yíng)中,公眾號(hào)會(huì)通過(guò)給用戶下發(fā)營(yíng)銷或者科普類的消息來(lái)通知客戶。 根據(jù)經(jīng)驗(yàn),微信消息下發(fā)后10分鐘后流量會(huì)逐步上升,30分鐘左右到達(dá)峰值,1個(gè)小時(shí)后會(huì)顯著下降。在這個(gè)時(shí)間段內(nèi),系統(tǒng)的壓力會(huì)很大。

在系統(tǒng)設(shè)計(jì)和改進(jìn)中,系統(tǒng)的很多場(chǎng)景使用異步進(jìn)行實(shí)現(xiàn),一方面能縮短主流程的時(shí)間處理,另一方面能夠通過(guò)異步隊(duì)列進(jìn)行一定程度的削峰。今天重點(diǎn)介紹單個(gè)JVM內(nèi)的異步優(yōu)化實(shí)踐,不涉及分布式時(shí)的異步優(yōu)化實(shí)踐。在異步執(zhí)行時(shí),可以調(diào)用遠(yuǎn)程的服務(wù)集群來(lái)實(shí)現(xiàn)一定的任務(wù)分解。

部署示意圖

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

整個(gè)系統(tǒng)都部署在公有云上,虛擬機(jī)上有部署1個(gè)Nginx,4個(gè)Tomcat,Nginx使用隨機(jī)的方式負(fù)載均衡到Tomcat上面。虛機(jī)之間通過(guò)LB將客戶請(qǐng)求轉(zhuǎn)發(fā)到Nginx上面負(fù)載均衡,Nginx再將請(qǐng)求分配到tomcat應(yīng)用服務(wù)器上。

由多臺(tái)應(yīng)用服務(wù)器,對(duì)外服務(wù)提供Rest服務(wù),在每個(gè)Tomcat內(nèi)部使用異步隊(duì)列。同時(shí)由一臺(tái)控制服務(wù)器,進(jìn)行異步任務(wù)的補(bǔ)償任務(wù)和管理功能。Tomcat和Redis使用多級(jí)緩存來(lái)降低對(duì)Redis的壓力,并減少依賴。

為什么要在虛機(jī)上部署Nginx將請(qǐng)求轉(zhuǎn)發(fā)到Tomcat,而不是由LB直接轉(zhuǎn)發(fā)到Tomcat。這是因?yàn)長(zhǎng)B能夠支持的IP個(gè)數(shù)是有限的。

典型的用戶場(chǎng)景

在公眾號(hào)的運(yùn)營(yíng)過(guò)程中,典型的事件包括:

發(fā)送短信驗(yàn)證碼

購(gòu)買成功或者抽獎(jiǎng)成功短信通知

卡券或優(yōu)惠券發(fā)放

發(fā)放微信紅包

微信消息通知

訂單流程處理

定時(shí)批處理(比如數(shù)據(jù)同步)

工作流性質(zhì)的異步任務(wù)(未完成異步任務(wù)補(bǔ)償)

面詳細(xì)說(shuō)明不同場(chǎng)景能夠異步的原因:

不同場(chǎng)景(用戶注冊(cè),用戶購(gòu)買產(chǎn)品等)下的短信驗(yàn)證碼發(fā)送,可以使用異步方式發(fā)送: 一方面是因?yàn)榭蛻暨@個(gè)時(shí)效性要求沒(méi)有那樣高,另一方面在特定時(shí)間范圍內(nèi)用戶沒(méi)有收到驗(yàn)證碼,用戶可以點(diǎn)擊再次發(fā)送驗(yàn)證碼。

購(gòu)買成功或者抽獎(jiǎng)成功后短信或者郵件通知,可以通過(guò)異步的方式進(jìn)行。 因?yàn)樯婕坝脩舻睦妫?jǐn)慎對(duì)待。一方面一定要把數(shù)據(jù)先存到數(shù)據(jù)庫(kù)或者日志里面(注意信息安全^-^,別存敏感明文信息或者加密存儲(chǔ)),然后再放入到異步隊(duì)列中執(zhí)行。

另一個(gè)方面,要考慮到應(yīng)用服務(wù)意外停止時(shí),沒(méi)有發(fā)送成功數(shù)據(jù)的補(bǔ)償機(jī)制。 這種情況不常見(jiàn),并且為了減少耦合和當(dāng)前異步程序的復(fù)雜度。我們使用單獨(dú)的服務(wù)上部署異步任務(wù)補(bǔ)償程序,來(lái)掃描未完成的任務(wù),并且進(jìn)行重放(一定要注意嚴(yán)謹(jǐn)性)。

優(yōu)惠券和卡券的發(fā)放,跟購(gòu)買成功或抽獎(jiǎng)成功的方式類似。\u000b可以在當(dāng)前活動(dòng)高峰后延時(shí)發(fā)放,并且使用異步的方式進(jìn)行。

微信紅包,因?yàn)樾枰⑿胚M(jìn)行交互,并且微信會(huì)通知客戶紅包的情況,可以使用異步的方式進(jìn)行。 當(dāng)涉及資金或者禮品時(shí),一定要謹(jǐn)慎對(duì)待設(shè)計(jì),并且需要有方便進(jìn)行異步任務(wù)停止和啟動(dòng)的功能。

微信消息通知,因?yàn)楦⑿胚M(jìn)行交互,成功后微信進(jìn)行通知,可以使用異步。 這個(gè)跟短信驗(yàn)證碼類似。

訂單流程處理,可以使用異步,因?yàn)樯婕暗胶罄m(xù)步驟可以使用簡(jiǎn)單工作流來(lái)完成。有幾個(gè)開(kāi)源的框架可以參考。

數(shù)據(jù)同步或者異步任務(wù)補(bǔ)償,因?yàn)槭茄訒r(shí)處理,可以使用異步進(jìn)行處理。在使用時(shí),可以配合定時(shí)任務(wù),比如cron4j來(lái)周期性的進(jìn)行補(bǔ)償。適合后面總-分-總的任務(wù)處理模式。

針對(duì)這些“無(wú)處不在的異步”,后面詳細(xì)分析其內(nèi)在模型。

無(wú)處不在的異步

下圖包含了4種典型的異步隊(duì)列模型(圖片來(lái)源于網(wǎng)絡(luò)):

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

一個(gè)生產(chǎn)者生產(chǎn)數(shù)據(jù),一個(gè)消費(fèi)者消費(fèi)數(shù)據(jù),一般用在后臺(tái)處理的業(yè)務(wù)邏輯中。

一個(gè)生產(chǎn)者生產(chǎn)數(shù)據(jù),多個(gè)消費(fèi)者消費(fèi)數(shù)據(jù)(這里面有兩種情況:同一個(gè)消息,可以被多個(gè)消費(fèi)者分別消費(fèi)。或者多個(gè)消費(fèi)者組成一個(gè)組,一個(gè)消費(fèi)者消費(fèi)一個(gè)數(shù)據(jù))。

多個(gè)生產(chǎn)者生產(chǎn)數(shù)據(jù),單個(gè)消費(fèi)者消費(fèi)數(shù)據(jù),可以用在限流或者排隊(duì)等候單一資源處理的場(chǎng)景中。

多個(gè)生產(chǎn)者分別生產(chǎn)數(shù)據(jù),多個(gè)消費(fèi)者消費(fèi)數(shù)據(jù)(這里面有兩種情況:同一個(gè)消息,可以被多個(gè)消費(fèi)者分別消費(fèi)。或者多個(gè)消費(fèi)者組成一個(gè)組,一個(gè)消費(fèi)者消費(fèi)一個(gè)數(shù)據(jù))。

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

總分總?cè)蝿?wù)模型:特別適第一個(gè)線程取出一批數(shù)據(jù)放到隊(duì)列中(比如select);由多個(gè)線程分別執(zhí)行業(yè)務(wù)邏輯;執(zhí)行后的結(jié)果由一個(gè)線程來(lái)執(zhí)行(比如update操作,這樣能夠防止數(shù)據(jù)庫(kù)鎖)

這是從技術(shù)上分析的幾種常見(jiàn)模型,在實(shí)踐中涉及怎樣選擇框架。

使用堵塞隊(duì)列的線程池

使用固定步長(zhǎng)或固定時(shí)間的隊(duì)列

使用Disruptor

使用MQ或Kafka

使用線程池實(shí)現(xiàn)異步 (支持多生產(chǎn)者,多消費(fèi)者)

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

特點(diǎn):可以使用JDK自帶的線程池實(shí)現(xiàn)異步,編程簡(jiǎn)單,資料多。建議在并發(fā)量小的場(chǎng)景下優(yōu)先選擇。

使用Guava Queues (支持多生產(chǎn)者單消費(fèi)者)

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

特點(diǎn):異步批量隊(duì)列,在隊(duì)列到達(dá)指定長(zhǎng)度,或者到達(dá)指定時(shí)間后,批量進(jìn)行數(shù)據(jù)處理。適合于對(duì)響應(yīng)時(shí)間要求低,能夠容忍一定的數(shù)據(jù)丟失的場(chǎng)景。比如短小文本數(shù)據(jù)的批量保存。

在經(jīng)過(guò)一段時(shí)間調(diào)研后,我們發(fā)現(xiàn)Disruptor更能滿足我們需要。

首先介紹一下Disruptor的強(qiáng)悍的性能。

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

這張圖包含我列舉的上述的異步隊(duì)列模型景,因此很有代表意義。Disruptor因?yàn)槭褂脽o(wú)鎖的隊(duì)列方式,具有很高的性能。具體的原理不詳述,大家可以搜索看到。Disruptor支持上面典型場(chǎng)景,并且靈活使用Disruptor的工作流機(jī)制,能簡(jiǎn)化編程。

再貼一下官方的測(cè)試結(jié)果。

案例參考:一個(gè)Java高并發(fā)異步應(yīng)用

使用異步后的煩惱

煩惱一: 數(shù)據(jù)丟失的風(fēng)險(xiǎn)

解決方式:先寫(xiě)日志或數(shù)據(jù)庫(kù),后放入異步隊(duì)列。

煩惱二:對(duì)其他系統(tǒng)的壓力變大

解決方式:使用一定的限流和熔斷,對(duì)其他系統(tǒng)進(jìn)行保護(hù)。

煩惱三:數(shù)據(jù)保存后異步任務(wù)未執(zhí)行

解決方式:使用異步任務(wù)補(bǔ)償?shù)姆绞剑ㄆ趶臄?shù)據(jù)庫(kù)中獲取數(shù)據(jù),放到隊(duì)列中進(jìn)行執(zhí)行,執(zhí)行后更新數(shù)據(jù)狀態(tài)位。

煩惱四:怎樣隊(duì)列長(zhǎng)設(shè)置和消費(fèi)者數(shù)量

解決方式:使用實(shí)際的壓力測(cè)試來(lái)獲得隊(duì)列長(zhǎng)度。或者使用排隊(duì)論的數(shù)學(xué)公式得到初步的值,然后進(jìn)行實(shí)際壓測(cè)。

最后介紹一下項(xiàng)目中的經(jīng)驗(yàn):

量力而行:根據(jù)業(yè)務(wù)特點(diǎn)進(jìn)行技術(shù)選型,業(yè)務(wù)量小盡量避免使用異步。有所為,有所不為

數(shù)據(jù)說(shuō)話:異步時(shí)一定要進(jìn)行必要的壓力測(cè)試

先找出系統(tǒng)的關(guān)鍵點(diǎn):優(yōu)化單體系統(tǒng)內(nèi)的性能,再通過(guò)整體系統(tǒng)分解來(lái)全局優(yōu)化

根據(jù)團(tuán)隊(duì)和項(xiàng)目的特點(diǎn)選擇框架。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2971

    瀏覽量

    104854
  • 異步
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    18070
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS如何使用異步并發(fā)能力進(jìn)行開(kāi)發(fā)

    并發(fā)概述 并發(fā)是指在同時(shí)間段內(nèi),能夠處理多個(gè)任務(wù)的能力。為了提升應(yīng)用的響應(yīng)速度與幀率,以及防止耗時(shí)任務(wù)對(duì)主線程的干擾,HarmonyOS系統(tǒng)提供了
    的頭像 發(fā)表于 02-18 09:18 ?546次閱讀

    從服務(wù)端視角看并發(fā)難題

    `所謂服務(wù)器大流量并發(fā)指的是:在同時(shí)或極短時(shí)間內(nèi),有大量的請(qǐng)求到達(dá)服務(wù)端,每個(gè)請(qǐng)求都需要服務(wù)端耗費(fèi)資源進(jìn)行處理,并做出相應(yīng)的反饋。 從服務(wù)端視角看并發(fā)服務(wù)端處理請(qǐng)求需要耗費(fèi)服務(wù)端的
    發(fā)表于 11-02 15:11

    java異步回調(diào)和同步回調(diào)

    java異步回調(diào)和同步回調(diào) 最近,在準(zhǔn)備有關(guān)Java并行流的討論時(shí),我注意到經(jīng)典文章“ 免費(fèi)午餐結(jié)束 ”(TFLiO)已經(jīng)過(guò)了十歲生日。 對(duì)于大多數(shù)程序員而言,本文及其伴隨的宣傳是他們的第一個(gè)
    發(fā)表于 07-28 08:36

    詳細(xì)介紹了Java泛型、注解、并發(fā)編程

    介紹了Java泛型、注解、并發(fā)編程、數(shù)據(jù)傳輸與序列化、高效IO、容器集合、反射與類加載以及JVM重點(diǎn)知識(shí)線程、內(nèi)存模型、JVM運(yùn)行時(shí)內(nèi)存、垃圾回收與算法、Java中四種引用類型、GC 分代收集算法
    發(fā)表于 08-20 06:09

    如何去實(shí)現(xiàn)種基于SpringMVC的電商并發(fā)秒殺系統(tǒng)設(shè)計(jì)

    參考博客Java并發(fā)秒殺系統(tǒng)API目錄業(yè)務(wù)場(chǎng)景要解決的問(wèn)題Redis的使用業(yè)務(wù)場(chǎng)景首頁(yè)倒計(jì)時(shí)秒殺活動(dòng),搶購(gòu)商品要解決的問(wèn)題并發(fā)下庫(kù)存的控
    發(fā)表于 01-03 07:50

    HarmonyOS如何使用異步并發(fā)能力進(jìn)行開(kāi)發(fā)

    并發(fā)概述 并發(fā)是指在同時(shí)間段內(nèi),能夠處理多個(gè)任務(wù)的能力。為了提升應(yīng)用的響應(yīng)速度與幀率,以及防止耗時(shí)任務(wù)對(duì)主線程的干擾,HarmonyOS系統(tǒng)提供了
    發(fā)表于 09-22 17:35

    Java并發(fā)程序設(shè)計(jì)教程

    Java并發(fā)程序設(shè)計(jì)教程
    發(fā)表于 03-19 11:23 ?2次下載

    Java并發(fā)編程實(shí)戰(zhàn)

    Java并發(fā)編程實(shí)戰(zhàn)
    發(fā)表于 03-19 11:24 ?7次下載

    java之volatile并發(fā)

    。內(nèi)存模型的相關(guān)概念 二。并發(fā)編程中的三個(gè)概念 三.Java內(nèi)存模型 四。.深入剖析volatile關(guān)鍵字 五。使用volatile關(guān)鍵字的場(chǎng)景 若有不正之處請(qǐng)多多諒解,并歡迎批評(píng)指
    發(fā)表于 09-27 10:20 ?6次下載
    <b class='flag-5'>java</b>之volatile<b class='flag-5'>并發(fā)</b>

    詳解java并發(fā)機(jī)制

    般性開(kāi)發(fā)中,筆者經(jīng)常看到很多同學(xué)在對(duì)待java并發(fā)開(kāi)發(fā)模型中只會(huì)使用些基礎(chǔ)的方法。比如Volatile,synchronized。像Lock和atomic這類高級(jí)
    發(fā)表于 09-27 14:31 ?0次下載

    java并發(fā)編程實(shí)戰(zhàn)之輔助類用法

    Java并發(fā)編程:CountDownLatch、CyclicBarrier和Semaphore2017-09-18 13:07程序設(shè)計(jì)/58 在java 1.5中,提供了些非常有用的
    發(fā)表于 09-27 16:50 ?0次下載

    JAVA并發(fā)編程實(shí)踐

    JAVA并發(fā)編程實(shí)踐資料免費(fèi)下載。
    發(fā)表于 06-01 15:31 ?15次下載

    Java并發(fā)編程的藝術(shù)

    Java并發(fā)編程的藝術(shù)說(shuō)明。
    發(fā)表于 06-01 15:31 ?16次下載

    個(gè)并發(fā)、輕量級(jí)的信息泄露掃描工具BBScan

    BBScan 是個(gè)并發(fā)、輕量級(jí)的信息泄露掃描工具。
    的頭像 發(fā)表于 09-21 10:19 ?1653次閱讀

    java redis鎖處理并發(fā)代碼

    并發(fā)編程中,個(gè)常見(jiàn)的問(wèn)題是如何確保多個(gè)線程安全地訪問(wèn)共享資源,避免產(chǎn)生競(jìng)態(tài)條件和數(shù)據(jù)異常。而Redis作為種高性能的內(nèi)存數(shù)據(jù)庫(kù),可以提供分布式鎖的功能,通過(guò)Redis鎖,我們可以
    的頭像 發(fā)表于 12-04 11:04 ?963次閱讀
    主站蜘蛛池模板: 久久合| 日本又黄又爽又色又刺激的视频| 国产精品久久国产三级国不卡顿| 国产第81页| 国产乱码二卡3卡四卡| 果冻传媒2021精品影视| 精品国产影院| 老师你狠狂| 日本黄色www| 午夜毛片在线观看| 亚洲午夜无码久久久久蜜臀av| 战狼4在线观看完免费完整版| 99E久热只有精品8在线直播| 啊灬啊灬啊灬快灬深高潮啦| 国产黄a三级三级三级| 极品内射少妇精品无码视频| 美女爱爱网站| 色琪琪丁香婷婷综合久久| 亚洲合集综合久久性色| 最近中文字幕高清中文字幕MV| www.青青草.com| 国产色精品久久人妻无码| 久久99re8热在线播放| 嫩草影院未满十八岁禁止入内| 三级中国免费的| 亚洲色图另类小说| nxgx69日本护士| 国产在线综合色视频| 麻豆国产人妻精品无码AV| 色男人的天堂久久综合| 亚洲毛片网| caoporn 超碰在线视频| 国产色无码精品视频国产| 老师别揉我胸啊嗯小说| 日本乱子伦一区二区三区| 亚洲免费观看视频| xlxx美女| 久久91精品国产91久| 日本三区四区免费高清不卡| 野花韩国高清完整版在线观看5| 啊灬啊别停灬用力啊老师|