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

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

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

  • make (安裝 redis)

    查看全部
  • 優(yōu)化總結(jié)。

    查看全部
  • 優(yōu)化Update更新庫存(2)

    查看全部
  • 優(yōu)化Update更新庫存(1)

    查看全部
  • 高并發(fā)優(yōu)化常用方案

    成本:

    1)運維成本和穩(wěn)定性:NoSQL,MQ等

    2)開發(fā)成本:數(shù)據(jù)一致性,回滾方案等

    3)冪等性難保證:重復(fù)秒殺問題

    4)不適合新手的架構(gòu)

    查看全部
  • 秒殺操作優(yōu)化分析:后端緩存困難(庫存問題)

    查看全部
  • 秒殺地址接口分析:因為一致性維護成本低,所以適合服務(wù)端緩存

    查看全部
  • CDN的理解

    查看全部
  • 詳情頁部署到CDN

    查看全部
  • redis緩存工具的使用,以及配置

    查看全部
  • 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 當我們的服務(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可以達到10^6/s。
    ? ?3.為什么要做后端緩存 -> 因為后端緩存可以用我們的業(yè)務(wù)系統(tǒng)來控制。
    ? ? ?比如先訪問數(shù)據(jù)庫拿到秒殺的數(shù)據(jù)放到Redis緩存里面去,當一次訪問的時候直接去緩存里面查找,
    ? ? ?緩存有就直接返回,而不去訪問我們數(shù)據(jù)庫了。
    ? ?4.一致性維護成本比較低:當我們秒殺的東西或秒殺的對象改變了的時候,
    ? ? ?我們可以修改我們的數(shù)據(jù)庫,同時在改一下我們的緩存,或者干脆不改,等超時之后在改

    秒殺地址接口優(yōu)化:請求地址 -> Redis[一致性維護(超時穿透到SQL語句/當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é)果是否更新了,當我們的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 購買明細:也會存在網(wǎng)絡(luò)延遲和GC
    ---->commit/rollback
    也就是說如果是Java客戶端去控制這些事務(wù)會有什么問題:update 減庫存(網(wǎng)絡(luò)延遲,可能的GC,GC不一定每次都出現(xiàn),但一定會出現(xiàn))
    --> 執(zhí)行insert 購買明細(在網(wǎng)絡(luò)延遲等待insert語句的返回,然后也可能會GC) --> 最后commit/rollback。
    當前面的這些操作都執(zhí)行完之后,第二個等待行鎖的線程菜能夠有機會拿到這一行的鎖在去執(zhí)行update減庫存

    特點:
    ? ?根據(jù)上面的拆分,所以QPS很好分析了 --->(我們所有的SQL執(zhí)行時間 + 網(wǎng)絡(luò)延遲時間 + 可能的GC)
    ? ?這一行數(shù)據(jù)就是當前可以執(zhí)行的時間.比如時間是2ms,概念是1s之內(nèi)只能有500次減庫存的秒殺操作,但是對于
    ? ?秒殺系統(tǒng),特別是熱點系統(tǒng)來說其實是不能滿足我們的要求的,特別是排隊特別長的時候,性能會呈現(xiàn)指數(shù)級別下降
    得到的點是:行級鎖是在commit/rollback之后釋放的;
    優(yōu)化方向:怎樣減少行級鎖持有的時間 ---> (當你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之后,會自動進行回滾(條件是:當update影響的記錄數(shù)是1,它就會commit,如果等于0就會rollback)
    ? ?也就是說它不給Java客戶端和MySQL之間網(wǎng)絡(luò)延遲,然后在由Java客戶端去控制commit還是rollback,而是直接用這條語句直接發(fā)過去
    ? ?告訴它是commit還是rollback。本質(zhì)上也是降低了網(wǎng)絡(luò)延遲和GC的干擾,但是成本很高 --> 需要修改MySQL源碼,大公司可以這樣的團隊

    --使用存儲過程: 整個事務(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)點是:保證原子性、隔離性、一致性、持久性。

    查看全部
  • 原子技術(shù)-存儲到redis等nosql數(shù)據(jù)庫

    -記錄行為信息-通過消息隊列MQ

    -消息接收落地-處理mysql

    查看全部
  • 并發(fā)優(yōu)化!

    查看全部
  • 【W(wǎng)EB層技術(shù)回顧】

    restful接口:用來描述資源,通過不同的提交方式(GET/POST)來達到描述行為的目的;

    寫一般通過post,讀一般通過get。


    查看全部
  • 【業(yè)務(wù)層技術(shù)回顧】

    站在使用者角度設(shè)計接口,而不是考慮怎么去實現(xiàn)這個接口,達到干凈直接的目的;

    SpringIOC配置,XML配置,注解,包掃描。


    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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