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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

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

  • make (安裝 redis)

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

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

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

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

    成本:

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

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

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

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

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

    查看全部
  • 秒殺地址接口分析:因?yàn)橐恢滦跃S護(hù)成本低,所以適合服務(wù)端緩存

    查看全部
  • CDN的理解

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

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

    查看全部
  • CDN特點(diǎn):CDN是和請(qǐng)求對(duì)應(yīng)的資源是不變化的,比如靜態(tài)資源和JavaScript(URL對(duì)應(yīng)的結(jié)果不變)
    CDN是什么:
    ? ? ?1:CDN是(內(nèi)容分發(fā)網(wǎng)絡(luò))加速用戶獲取數(shù)據(jù)的系統(tǒng),例如視頻資源
    ? ? ?2:部署在離用戶最近的網(wǎng)絡(luò)節(jié)點(diǎn)上 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最重要的一個(gè)加速的功能點(diǎn) 怎樣讓系統(tǒng)抗住很高的并發(fā)的時(shí)候CDN也是一個(gè)點(diǎn)

    高并發(fā)出現(xiàn)的點(diǎn):
    1.獲取系統(tǒng)時(shí)間(但是不用優(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àn)楹蠖司彺婵梢杂梦覀兊臉I(yè)務(wù)系統(tǒng)來控制。
    ? ? ?比如先訪問數(shù)據(jù)庫拿到秒殺的數(shù)據(jù)放到Redis緩存里面去,當(dāng)一次訪問的時(shí)候直接去緩存里面查找,
    ? ? ?緩存有就直接返回,而不去訪問我們數(shù)據(jù)庫了。
    ? ?4.一致性維護(hù)成本比較低:當(dāng)我們秒殺的東西或秒殺的對(duì)象改變了的時(shí)候,
    ? ? ?我們可以修改我們的數(shù)據(jù)庫,同時(shí)在改一下我們的緩存,或者干脆不改,等超時(shí)之后在改

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

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

    1:瓶頸分析:
    update 減庫存:客戶端會(huì)執(zhí)行update,根據(jù)拿到結(jié)果是否更新了,當(dāng)我們的SQL通過網(wǎng)絡(luò)發(fā)送給數(shù)據(jù)庫時(shí)本身就有網(wǎng)絡(luò)延遲,
    ? ? ? ? ? ? ? 除了網(wǎng)絡(luò)延遲還有java GC(garbage collection,垃圾回收)操作 -> 不需要手動(dòng)去回收,
    ? ? ? ? ? ? ? GC自動(dòng)就幫我們回收了,新生代GC會(huì)暫停所有的事務(wù)代碼(Java代碼)后,執(zhí)行GC(一般在幾十ms),
    ? ? ? ? ? ? ? 并且,同一行事務(wù)是做串行化的。
    ---->insert 購買明細(xì):也會(huì)存在網(wǎng)絡(luò)延遲和GC
    ---->commit/rollback
    也就是說如果是Java客戶端去控制這些事務(wù)會(huì)有什么問題:update 減庫存(網(wǎng)絡(luò)延遲,可能的GC,GC不一定每次都出現(xiàn),但一定會(huì)出現(xiàn))
    --> 執(zhí)行insert 購買明細(xì)(在網(wǎng)絡(luò)延遲等待insert語句的返回,然后也可能會(huì)GC) --> 最后commit/rollback。
    當(dāng)前面的這些操作都執(zhí)行完之后,第二個(gè)等待行鎖的線程菜能夠有機(jī)會(huì)拿到這一行的鎖在去執(zhí)行update減庫存

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

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

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

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

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

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

    -記錄行為信息-通過消息隊(duì)列MQ

    -消息接收落地-處理mysql

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

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

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

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


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

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

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


    查看全部

舉報(bào)

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

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

微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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

友情提示:

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