第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java高并發(fā)秒殺API之高并發(fā)優(yōu)化

  • D D dAS

    查看全部
  • 啊啊啊啊啊啊

    查看全部
  • 結(jié)果提交了,鎖就結(jié)束了網(wǎng)絡(luò)延遲影響就沒多大影響了

    查看全部
  • 換順序了,sql就放在mysql里面執(zhí)行,mysql只要告訴我結(jié)果就可以了,就可以忽略網(wǎng)絡(luò)延遲的影響了。

    查看全部
  • fgt
    查看全部
  • fgt
    查看全部
  • jedis序列化
    查看全部
  • 效率最高的序列號工具,高并發(fā)場景優(yōu)先用:protostuff

    查看全部
  • 優(yōu)化分析

    CDN的特點和相關(guān)信息:
    使用CDN 獲取公共js http://www.bootcdn.cn/
    CDN特點:CDN是和請求對應(yīng)的資源是不變化的,比如靜態(tài)資源和JavaScript(URL對應(yīng)的結(jié)果不變)
    CDN是什么:
    ? ? ?1:CDN是(內(nèi)容分發(fā)網(wǎng)絡(luò))加速用戶獲取數(shù)據(jù)的系統(tǒng),例如視頻資源
    ? ? ?2:部署在離用戶最近的網(wǎng)絡(luò)節(jié)點上 3:命中CDN不需要訪問后端服務(wù)器
    ? ? ?4:互聯(lián)網(wǎng)公司自己搭建或租用CDN
    使用CDN的好處:
    ? ? ?01 不用去官網(wǎng)直接下載 02 當(dāng)我們的服務(wù)上線一些穩(wěn)定可靠的CDN比直接發(fā)布到我們的服務(wù)器更有效
    ? ? ?03 CDN也是web最重要的一個加速的功能點 怎樣讓系統(tǒng)抗住很高的并發(fā)的時候CDN也是一個點

    高并發(fā)出現(xiàn)的點:
    1.獲取系統(tǒng)時間(但是不用優(yōu)化,訪問一次內(nèi)存(Cacheline)大約10ns)
    2.秒殺地址接口分析:
    ? ?1.無法使用CDN緩存
    ? ?2.但是它適合放在服務(wù)器緩存:Redis等->內(nèi)存的服務(wù)器端的緩存可以抗很高的QPS,10^5/sQPS,
    ? ? ?現(xiàn)在Redis可以做集群,做了之后QPS可以達(dá)到10^6/s。
    ? ?3.為什么要做后端緩存 -> 因為后端緩存可以用我們的業(yè)務(wù)系統(tǒng)來控制。
    ? ? ?比如先訪問數(shù)據(jù)庫拿到秒殺的數(shù)據(jù)放到Redis緩存里面去,當(dāng)一次訪問的時候直接去緩存里面查找,
    ? ? ?緩存有就直接返回,而不去訪問我們數(shù)據(jù)庫了。
    ? ?4.一致性維護(hù)成本比較低:當(dāng)我們秒殺的東西或秒殺的對象改變了的時候,
    ? ? ?我們可以修改我們的數(shù)據(jù)庫,同時在改一下我們的緩存,或者干脆不改,等超時之后在改

    秒殺地址接口優(yōu)化:請求地址 -> Redis[一致性維護(hù)(超時穿透到SQL語句/當(dāng)SQL語句更新時主動更新)] -> SQL語句

    3.秒殺操作優(yōu)化分析(是最重要的一個秒殺按鈕操作):
    ? ?1.也是不能使用CDN緩存的,CDN不可能把你最核心的東西給緩存(大部分寫操作或最核心的數(shù)據(jù)請求一般沒辦法使用CDN)
    ? ?2.后端緩存困難:庫存的問題,不可能在緩存里面減庫存,否則會產(chǎn)生數(shù)據(jù)不一致問題。所以要通過事務(wù)來保證數(shù)據(jù)的一致性
    ? ?3.一行數(shù)據(jù)競爭:熱點商品,會對數(shù)據(jù)庫表中的那一行數(shù)據(jù)產(chǎn)生大量的update減庫存競爭

    1:瓶頸分析:
    update 減庫存:客戶端會執(zhí)行update,根據(jù)拿到結(jié)果是否更新了,當(dāng)我們的SQL通過網(wǎng)絡(luò)發(fā)送給數(shù)據(jù)庫時本身就有網(wǎng)絡(luò)延遲,
    ? ? ? ? ? ? ? 除了網(wǎng)絡(luò)延遲還有java GC(garbage collection,垃圾回收)操作 -> 不需要手動去回收,
    ? ? ? ? ? ? ? GC自動就幫我們回收了,新生代GC會暫停所有的事務(wù)代碼(Java代碼)后,執(zhí)行GC(一般在幾十ms),
    ? ? ? ? ? ? ? 并且,同一行事務(wù)是做串行化的。

    ----》insert 購買明細(xì):也會存在網(wǎng)絡(luò)延遲和GC
    ----》commit/rollback
    也就是說如果是Java客戶端去控制這些事務(wù)會有什么問題:update 減庫存(網(wǎng)絡(luò)延遲,可能的GC,GC不一定每次都出現(xiàn),但一定會出現(xiàn))
    --> 執(zhí)行insert 購買明細(xì)(在網(wǎng)絡(luò)延遲等待insert語句的返回,然后也可能會GC) --> 最后commit/rollback。
    當(dāng)前面的這些操作都執(zhí)行完之后,第二個等待行鎖的線程菜能夠有機會拿到這一行的鎖在去執(zhí)行update減庫存

    特點:
    ? ?根據(jù)上面的拆分,所以QPS很好分析了 --->(我們所有的SQL執(zhí)行時間 + 網(wǎng)絡(luò)延遲時間 + 可能的GC)
    ? ?這一行數(shù)據(jù)就是當(dāng)前可以執(zhí)行的時間.比如時間是2ms,概念是1s之內(nèi)只能有500次減庫存的秒殺操作,但是對于
    ? ?秒殺系統(tǒng),特別是熱點系統(tǒng)來說其實是不能滿足我們的要求的,特別是排隊特別長的時候,性能會呈現(xiàn)指數(shù)級別下降
    得到的點是:行級鎖是在commit/rollback之后釋放的;
    優(yōu)化方向:怎樣減少行級鎖持有的時間 ---> (當(dāng)你update表中一行數(shù)據(jù)的時候,一定要快速的commit/rollback,
    ? ? ? ? ?因為其他還在等待,因為這是一個熱點的數(shù)據(jù));

    2:延遲分析:
    延遲問題是很關(guān)鍵的;
    優(yōu)化思路:
    -把客戶端邏輯放到MySQL(數(shù)據(jù)庫)服務(wù)端,避免網(wǎng)絡(luò)延遲和GC影響
    -如何放到MySQL服務(wù)端:

    --兩種解決方案:
    ---定制SQL方案: 早期的阿里巴巴的天貓做了一個MySQL的源碼層的修改 --->update/*+[auto_commit]*/,
    ? ?但是執(zhí)行完這句update之后,會自動進(jìn)行回滾(條件是:當(dāng)update影響的記錄數(shù)是1,它就會commit,如果等于0就會rollback)
    ? ?也就是說它不給Java客戶端和MySQL之間網(wǎng)絡(luò)延遲,然后在由Java客戶端去控制commit還是rollback,而是直接用這條語句直接發(fā)過去
    ? ?告訴它是commit還是rollback。本質(zhì)上也是降低了網(wǎng)絡(luò)延遲和GC的干擾,但是成本很高 --> 需要修改MySQL源碼,大公司可以這樣的團(tuán)隊

    --使用存儲過程: 整個事務(wù)在MySQL端完成;存儲過程設(shè)計出來的本質(zhì)就是想讓我們的一組SQL組成一個事務(wù),然后在服務(wù)器端完成,
    ? 而避免客戶端去完成事務(wù)造成的一個性能的干擾。一般情況下像是spring聲明式事務(wù)或我們手動控制事務(wù)都是客戶端控制事務(wù),
    ? 這個事務(wù)在行級鎖沒有那么高的競爭情況下是完全OK的,但秒殺是一個特殊的應(yīng)用場景,它會在同一行中產(chǎn)生熱點,大家都競爭同一行父,
    ? 那么這個時候存儲過程就發(fā)揮作用了,它把整個這條SQL執(zhí)行過程完全放在MySQL中完成了,
    ? MySQL執(zhí)行的效率非常高,因為我們都是通過主鍵去執(zhí)行的,查詢或更新

    優(yōu)化總結(jié):
    1:前端控制:暴露接口,按鈕防重復(fù)
    2:動靜態(tài)數(shù)據(jù)分離:CDN緩存,后端緩存
    3:事務(wù)競爭優(yōu)化:減少事務(wù)鎖時間 ---> 這是秒殺用MySQL解決秒殺問題的很重要的一個關(guān)鍵點;
    ? ?因為用事務(wù)有一個很大的優(yōu)點是:保證原子性、隔離性、一致性、持久性。

    查看全部
  • 先買后減庫存

    查看全部
  • 架構(gòu)123

    查看全部
  • java秒殺

    查看全部
  • 行級鎖優(yōu)化

    查看全部
  • redis優(yōu)化點

    查看全部
  • redis作為緩存的常用方法

    查看全部

舉報

0/150
提交
取消
課程須知
《Java高并發(fā)秒殺API》是系列課程,共四門課,分別為業(yè)務(wù)分析和DAO層,Service層,Web層和高并發(fā)優(yōu)化。本門課程是第二門課程,學(xué)習(xí)前需要了解如下知識: 1、精通JavaWeb基礎(chǔ) 2、熟悉SpringMVC、Spring和MyBatis框架 3、了解事務(wù)和存儲過程的概念
老師告訴你能學(xué)到什么?
1、掌握秒殺業(yè)務(wù) 2、能夠進(jìn)行SpringMVC+Spring+MyBatis的整合開發(fā) 3、能夠?qū)γ霘I(yè)務(wù)的瓶頸有所了解 4、能夠?qū)崿F(xiàn)對秒殺業(yè)務(wù)的優(yōu)化

微信掃碼,參與3人拼團(tuán)

微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對慕課網(wǎng)的支持!