日本在线免费视频,国产精品视频2020,亚洲一区二区色,亚洲精品在线播放

淘寶雙11秒殺在哪個位置 秒懂:淘寶0點0分0秒搶購攻略

Hi,大家好,美好的一天從這里開始,今天主要講解淘寶雙11秒殺在哪個位置,淘寶0點0分0秒搶購攻略,以及淘寶雙11秒殺的一系列相關干貨,其實這篇文章主要還是為新手朋友整理的,總的來說思路還是很重要!

其實對于交易平臺來說,面對的不僅僅是人肉,還有很多腳本,外掛自動化的搶購系統,壓力可想而知。

秒殺的優化手段很多,就拿數據庫來說,有用排隊機制的,有用異步消息的,有用交易合并的。

今天,我要給大家介紹一種更極端的秒殺應對方法,裸秒。

(其實我很久以前就寫過類似的文章,趁雙十一跟大伙再練練)

目前可能只有PostgreSQL支持裸秒,也即是說,來吧,強暴我吧,一起上。 有點淫蕩,但是確實就是這么暴力。

PostgreSQL提供了一種ad lock,可以讓用戶盡情的釋放激情,以一臺32核64線程的機器為例,每秒可以獲取、探測約130萬次的ad lock。

試想一下,對單條記錄的秒殺操作,達到了單機100萬/s的處理能力后,秒殺算什么?100臺機器就能處理1億/s的秒殺請求,不行我的小心臟受不了了,下面聽我娓娓道來。

秒殺場景簡介

雖然秒殺已經很普遍了,但是出于文章的完整性,還是簡單介紹一下秒殺的業務背景。

例如,Iphone的1元秒殺,如果我只放出1臺Iphone,我們把它看成一條記錄,秒殺開始后,誰先搶到(更新這條記錄的鎖),誰就算秒殺成功。

對數據庫來說,秒殺瓶頸在于并發的對同一條記錄的多次更新請求,只有一個或者少量請求是成功的,其他請求是以失敗或更新不到記錄而告終。

例如有100臺IPHONE參與秒殺,并發來搶的用戶有100萬,對于數據庫來說,最小粒度的為行鎖,當有一個用戶在更新這條記錄時,其他的999999個用戶是在等待中度過的,以此類推。

除了那100個幸運兒,其他的用戶的等待都是無謂的,甚至它們不應該到數據庫中來浪費資源。

傳統的做法,使用一個標記位來表示這條記錄是否已經被更新,或者記錄更新的次數(幾臺Iphone)。

update tbl set xxx=xxx,upd_cnt=upd_cnt+1 where id=pk and upd_cnt+1<=5; — 假設可以秒殺5臺

這種方法的弊端:

獲得鎖的用戶在處理這條記錄時,可能成功,也可能失敗,或者可能需要很長時間,(例如數據庫響應慢)在它結束事務前,其他會話只能等著。

等待是非常不科學的,因為對于沒有獲得鎖的用戶,等待是在浪費時間。

常用的秒殺優化手段

1. 一般的優化處理方法是先使用for update nowait的方式來避免等待,即如果無法即可獲得鎖,那么就不等待。

begin;select
1 from tbl where id=pk for update nowait; —
如果用戶無法即刻獲得鎖,則返回錯誤。從而這個事務回滾。update tbl set xxx=xxx,upd_cnt=upd_cnt+1
where id=pk and upd_cnt+1<=5;end;

這種方法可以減少用戶的等待時間,因為無法即刻獲得鎖后就直接返回了。

2. 合并請求,即將多個更新合并到一個更新的請求,這種做法需要修改內核,同時會破壞ACID,因為如果合并后的請求失敗了,會導致合并中的所有人的請求失敗。(與分組提交不一樣,分組提交是不會破壞ACID的)。

那么接下來我們看看AD LOCK。

什么是ad lock

手冊中的說明,AD LOCK是一種面向用戶的輕量級鎖,鎖的目標是一個整型,分為事務級和會話級的鎖,以及共享和排他鎖。

在單個DB內,只要鎖的整型值不一樣,就可以獲得鎖,如果值一樣,可以使用TRY來加鎖,沒有獲得則立即返回FALSE。

https://www.postgresql.org/docs/current/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS

Table 9-87. Advisory Lock Functions

Name Return Type Description
pg_advisory_lock(key bigint) void Obtain exclusive session level advisory lock
pg_advisory_lock(key1 int, key2 int) void Obtain exclusive session level advisory lock
pg_advisory_lock_shared(key bigint) void Obtain shared session level advisory lock
pg_advisory_lock_shared(key1 int, key2 int) void Obtain shared session level advisory lock
pg_advisory_unlock(key bigint) boolean Release an exclusive session level advisory lock
pg_advisory_unlock(key1 int, key2 int) boolean Release an exclusive session level advisory lock
pg_advisory_unlock_all() void Release all session level advisory locks held by the current session
pg_advisory_unlock_shared(key bigint) boolean Release a shared session level advisory lock
pg_advisory_unlock_shared(key1 int, key2 int) boolean Release a shared session level advisory lock
pg_advisory_xact_lock(key bigint) void Obtain exclusive transaction level advisory lock
pg_advisory_xact_lock(key1 int, key2 int) void Obtain exclusive transaction level advisory lock
pg_advisory_xact_lock_shared(key bigint) void Obtain shared transaction level advisory lock
pg_advisory_xact_lock_shared(key1 int, key2 int) void Obtain shared transaction level advisory lock
pg_try_advisory_lock(key bigint) boolean Obtain exclusive session level advisory lock if available
pg_try_advisory_lock(key1 int, key2 int) boolean Obtain exclusive session level advisory lock if available
pg_try_advisory_lock_shared(key bigint) boolean Obtain shared session level advisory lock if available
pg_try_advisory_lock_shared(key1 int, key2 int) boolean Obtain shared session level advisory lock if available
pg_try_advisory_xact_lock(key bigint) boolean Obtain exclusive transaction level advisory lock if available
pg_try_advisory_xact_lock(key1 int, key2 int) boolean Obtain exclusive transaction level advisory lock if available
pg_try_advisory_xact_lock_shared(key bigint) boolean Obtain shared transaction level advisory lock if available
pg_try_advisory_xact_lock_shared(key1 int, key2 int) boolean Obtain shared transaction level advisory lock if available

通常數據庫支持的最小粒度的鎖(指開放給用戶的)是行鎖,行鎖相比LWLOCK,SPINLOCK等是非常重的,所以傳統的行鎖在秒殺中會成為非常大的瓶頸,包括鎖的等待。

ad lock的用途

ad lock的用途,除了我接下來要說的秒殺,其實還有很多用途,例如

并發的安全性檢查,

遞歸調用中用于UPSERT的場景,

業務邏輯設計中用來確保原子操作等。

ad lock的性能指標

因為AD LOCK很輕量化,不需要訪問數據,不需要執行冗長的代碼,所以很高效。

32核64線程機器測試可以達到131萬次/s的鎖請求。

vi test.sql

\set id random(1,100000000)

select pg_try_advisory_xact_lock(:id);

pgbench -M prepared -n -r -P 1 -f ./test.sql -c 96 -j 96 -T 100transaction type: ./test.sql

scaling
factor: 1query mode: preparednumber of clients: 96number of threads:
96duration: 100 snumber of transactions actually processed:
131516823latency average = 0.072 ms

latency stddev = 0.070 ms

tps = 1314529.211060 (including connections establishing)

tps = 1315395.309707 (excluding connections establishing)script statistics:

– statement latencies in milliseconds: 0.001 \set id random(1,100000000) 0.074 select pg_try_advisory_xact_lock(:id);

ad lock用于秒殺的例子

在數據庫中,商品通常有唯一ID,我們可以對這個ID加鎖,(當然,如果對不同的表這個ID有重疊的可能,我們可以加偏移量或者其他的手段來達到無沖突)。

加鎖成功才會去對行加鎖,執行更新,這樣就能規避掉無效的行鎖等待,以及冗長的查詢代碼。

使用 AD LOCK 對單條記錄的并發更新處理QPS可以達到39.1萬/s,被秒殺的商品很快就會變成售罄狀態,不會再浪費數據庫的資源。

create table test(id int primary key, crt_time timestamp);insert into test values (1);vi test.sql

update test set crt_time=now() where id=1 and pg_try_advisory_xact_lock(1);

pgbench -M prepared -n -r -P 1 -f ./test.sql -c 64 -j 64 -T 100transaction type: ./test.sql

scaling
factor: 1query mode: preparednumber of clients: 64number of threads:
64duration: 100 snumber of transactions actually processed:
39104368latency average = 0.163 ms

latency stddev = 0.216 ms

tps = 391012.743072 (including connections establishing)

tps = 391175.983419 (excluding connections establishing)script statistics:

– statement latencies in milliseconds: 0.163 update test set crt_time=now() where id=1 and pg_try_advisory_xact_lock(1);

此時數據庫主機還有66.2%的空閑CPU資源可用使用。

top
– 13:12:43 up 51 days, 18:41, 2 users, load average: 1.12, 0.97,
0.78Tasks: 1463 total, 28 running, 1435 sleeping, 0 stopped, 0
zombieCpu(s): 24.5%us, 9.3%sy, 0.0%ni, 66.2%id, 0.0%wa, 0.0%hi, 0.0%si,
0.0%stMem: 529321832k total, 235226420k used, 294095412k free, 903076k
buffersSwap: 0k total, 0k used, 0k free, 62067636k cached

對比傳統的例子

傳統的消除等待的做法是這樣的,通過select for update nowait。

begin;select
1 from tbl where id=pk for update nowait; —
如果用戶無法即刻獲得鎖,則返回錯誤。從而這個事務回滾。update tbl set xxx=xxx,upd_cnt=upd_cnt+1
where id=pk and upd_cnt+1<=5;end;

在PG中,可以使用do語句,把以上合成到一個塊里面操作。

使用傳統的方法,每秒可以處理8.6萬。

vi
test.sqldo language plpgsql $$ declare begin with t as (select * from
test where id=1 for update nowait) update test set crt_time=now() from t
where t.id=test.id; exception when others then return; end; $$;

pgbench -M prepared -n -r -P 1 -f ./test.sql -c 64 -j 64 -T 100

transaction type: ./test.sql

scaling factor: 1

query mode: prepared

number of clients: 64

number of threads: 64

duration: 100 s

number of transactions actually processed: 8591222

latency average = 0.744 ms

latency stddev = 0.713 ms

tps = 85888.823884 (including connections establishing)

tps = 85924.666940 (excluding connections establishing)

script statistics:

– statement latencies in milliseconds:

0.744 do language plpgsql $$ declare begin with t as (select * from
test where id=1 for update nowait) update test set crt_time=now() from t
where t.id=test.id; exception when others then return; end; $$;

CPU剩余54.5%

top
– 13:13:48 up 51 days, 18:42, 2 users, load average: 8.14, 2.69,
1.37Tasks: 1464 total, 21 running, 1442 sleeping, 0 stopped, 1
zombieCpu(s): 41.7%us, 3.8%sy, 0.0%ni, 54.5%id, 0.0%wa, 0.0%hi, 0.0%si,
0.0%stMem: 529321832k total, 235256052k used, 294065780k free, 903176k
buffersSwap: 0k total, 0k used, 0k free, 62068308k cached

ad lock相比其他秒殺優化的優勢

淘寶雙11秒殺在哪個位置,淘寶0點0分0秒搶購攻略,淘寶雙11秒殺

使用AD LOCK可以使得CPU開銷最小化,等待最小化,從本文的測試CASE來看,單條記錄的更新可以達到39.1萬/s。

傳統的手段只能達到8.6萬/s。

使用AD LOCK不破壞ACID,單個請求單個事務,不影響其他的事務。

合并優化,本質上是破壞了ACID的,如果合并失敗,會導致所有相關的請求失敗。

這篇文章的所有內容到這里就完了,希望能幫助到你們,看完了淘寶雙11秒殺在哪個位置「秒懂:淘寶0點0分0秒搶購攻略」,收獲很多,歡迎幫忙分享一下。我在這邊先謝謝各位了哈!

本文發布者:百事通,不代表巢座耶立場,轉載請注明出處:http://www.sdwldmy.com/p/7742.html

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 jubao226688#126.com 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2023年5月30日 15:31
下一篇 2023年5月31日 08:49

相關推薦

  • 淘寶褥羊毛啥意思「秒懂:2021年最新薅羊毛平臺網站」

    HI,大家好,廢話不多說,直接上干貨:淘寶褥羊毛啥意思,2021年最新薅羊毛平臺網站,以及褥羊毛啥意思這些一系列的相關干貨內容,成功的路上不會一帆風順,每一個成功的背后都有一個驚人的故事。 就目前來說,“薅羊毛”的定義已經不僅僅局限于互聯網金融領域,已經滲透到社會各個領域,外賣優惠券、減免優惠、送話費、送流量等諸多活動,都可以稱之為薅羊毛。 本意“薅羊毛”是…

    2023年1月12日 ? 百科
  • 進口食品專賣店怎么樣 秒懂:說說進口零食店品牌推薦

    小伙伴們你們好,李圓圓很高興又和各位見面了,今天主要來講講進口食品專賣店怎么樣,說說進口零食店品牌推薦,還有干貨進口食品專賣店等等各種精品,這篇文章對新手朋友來說是比較重要的,因為涉及到各個方面,閱讀完你一定能有所收獲! 甜蜜的法國味道—-Lafayette Gourmet 無論您想尋覓布列塔尼海鹽、波爾多右岸葡萄酒、手工切片的半成品鵝肝,還是要…

    2023年7月21日 ? 百科
  • 支付寶芝麻信用分怎么提高教程 秒懂:芝麻信用分暴漲攻略

    最近有很多朋友問衛錦文關于支付寶芝麻信用分怎么提高教程,芝麻信用分暴漲攻略的事情,以及支付寶芝麻信用分怎么提高這些一系列的相關干貨內容,希望你們能通過這篇文章很好的掌握其中的技巧,下面我就來為大家全部一一解析! 芝麻信用分是螞蟻金服對用戶以往的信用歷史、日常的消費行為、自身的履約能力、自身的身份信息以及日常的人脈網絡進行評估而得出來的一個分數,芝麻分的高低直…

    2024年4月25日
  • 優酷連續包月怎么取消支付寶 秒懂:自動續費取消詳細步驟

    小伙伴們大家好,這次何玥玲早帶大家來分析下關于優酷連續包月怎么取消支付寶,自動續費取消詳細步驟,還有關于優酷連續包月怎么取消這些的內容,只要你每天都能來,我就能每天整理一些不錯的干貨分享給你們! 昨天看某視頻網站一個電影發現時候VIP會員才可以看,就看了看如何成為會員,有一下幾個選項 選項一:包一個月25元 選項二:連續包月15元 選項三:三個月68元 選項…

    2024年3月15日 ? 百科
  • 怎樣開淘寶網店需要多少錢 推薦淘寶開店費用明細

    很高興又和大家見面了,今天王立輝來和大家聊一聊怎樣開淘寶網店需要多少錢,淘寶開店費用明細,還有開淘寶網店需要多少錢等等等各種相關干貨內容,想要做好首先一定要把基本功練好了,否者是很難持續提升的。 很多朋友跟我咨詢開淘寶店的費用問題,當我把詳細的數字列出來的時候,她們“震驚”了,因為大家都認為淘寶是免費開店,怎么會花這么多呢? 1. 保證金(必須): 普通類目…

    2024年5月12日 ? 百科
  • 開一家零食店要多少錢 最新零食店成本及利潤分析

    HI,小伙伴們你們好,今天楊莊城比較忙,抽個時間來說下關于開一家零食店要多少錢,零食店成本及利潤分析,還有干貨開一家零食店要多少錢等等各種精品,既然來了就別走了,好好的靜下心把這篇文章閱讀完相信你會有一定的收獲哦! 零食行業的前景得到了很多投資者的肯定,直到今天零食行業的規模還在不斷擴大,零食行業本身也在不斷地完善,并走向成熟。現在的消費者不管是男女老少,他…

    2023年12月5日
日本在线免费视频,国产精品视频2020,亚洲一区二区色,亚洲精品在线播放
久久精品久久99精品久久| 精品国产免费视频| 麻豆91精品视频| 狠狠色丁香婷综合久久| 国内精品嫩模私拍在线| 国产一区视频在线看| 国产成人无遮挡在线视频| 岛国一区二区在线观看| 91官网在线观看| 日韩一区二区高清| 精品国产一区二区三区四区四 | 一区二区三区视频在线看| 亚洲欧美日韩一区二区三区在线观看| 一区2区3区在线看| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产成人av电影在线观看| 欧美日韩www| 亚洲激情av在线| 欧美在线不卡视频| 精品国产乱码久久久久久牛牛 | 精品处破学生在线二十三| 久久国产尿小便嘘嘘尿| 91精品国产综合久久精品性色| 国产精品水嫩水嫩| 99久久久久久| 一区二区三区成人| 欧美一级一区二区| 国产毛片精品一区| 国产精品免费视频观看| 99精品国产热久久91蜜凸| 夜夜亚洲天天久久| 欧美成人一区二区| 婷婷成人综合网| 国产精品美女久久久久aⅴ| 久久精品国产成人一区二区三区| 日韩一区二区中文字幕| 青青草一区二区三区| 国产丝袜在线精品| 日韩视频一区二区| 欧美综合在线视频| 粗大黑人巨茎大战欧美成人| 亚洲电影一区二区三区| 欧美激情在线一区二区三区| 在线这里只有精品| 国产成人精品www牛牛影视| 亚洲成人一二三| 亚洲精品国产品国语在线app| 精品视频一区三区九区| 色综合咪咪久久| 成人av资源站| av电影一区二区| 国产jizzjizz一区二区| 色综合色综合色综合| 91香蕉国产在线观看软件| 成人精品一区二区三区四区 | 亚洲高清免费一级二级三级| 国产色91在线| 亚洲国产综合91精品麻豆| 一区二区欧美精品| 麻豆国产91在线播放| 国产成人精品免费一区二区| 91亚洲男人天堂| 久久影视一区二区| 亚洲影院理伦片| 美女视频一区二区| 懂色av中文一区二区三区| 91蜜桃网址入口| 久久亚洲影视婷婷| 青青青伊人色综合久久| 色婷婷综合久久久中文一区二区 | 99在线精品免费| 久久久久国产精品麻豆ai换脸| 国产精品毛片久久久久久| 日韩高清中文字幕一区| aa级大片欧美| 中文字幕av资源一区| 视频一区国产视频| 91福利小视频| 香蕉乱码成人久久天堂爱免费| 国产成人三级在线观看| 欧美mv和日韩mv国产网站| 夜夜嗨av一区二区三区中文字幕| 国产精品中文有码| 欧美国产视频在线| 成人精品一区二区三区四区| 日本一区二区三区dvd视频在线| 久久99热这里只有精品| 精品国产精品一区二区夜夜嗨| 视频一区二区国产| 日韩区在线观看| 久久av中文字幕片| 中文在线一区二区| 日韩午夜激情视频| 国产精品综合二区| 一区二区高清在线| 久久女同精品一区二区| 91小视频免费观看| 国产在线播放一区| 一级精品视频在线观看宜春院| 9191国产精品| 岛国av在线一区| 日韩和欧美一区二区| 国产精品伦一区二区三级视频| 丁香婷婷综合五月| 日韩黄色免费电影| 一区二区免费看| 亚洲精品国产成人久久av盗摄| 久久九九久久九九| 日韩欧美久久一区| 91蝌蚪国产九色| 99精品欧美一区二区蜜桃免费| 男女男精品网站| 狠狠色狠狠色合久久伊人| 亚洲最大成人网4388xx| 国产精品国产三级国产aⅴ中文| 精品福利一二区| 欧美国产一区二区在线观看 | 26uuu国产日韩综合| 精品美女被调教视频大全网站| 久久嫩草精品久久久精品一| 国产无人区一区二区三区| 一区免费观看视频| 丝袜诱惑亚洲看片| 国产一区二区免费视频| 色综合欧美在线| 精品久久久久一区二区国产| 国产女主播在线一区二区| 综合自拍亚洲综合图不卡区| 亚洲黄色片在线观看| www.视频一区| 欧美不卡一区二区三区| 亚洲精品免费在线播放| 久久99热狠狠色一区二区| 色猫猫国产区一区二在线视频| 2023国产一二三区日本精品2022| 亚洲午夜羞羞片| 欧美日韩亚州综合| 亚洲美女免费在线| 国产999精品久久| 久久欧美一区二区| 国产高清亚洲一区| 久久欧美中文字幕| 国产伦精一区二区三区| 日韩视频一区二区三区在线播放| 一区二区三区高清| 欧美一个色资源| 成人免费av网站| 亚洲一区电影777| 日韩女优电影在线观看| 久久精品国产成人一区二区三区| 欧美大片在线观看| 91老司机福利 在线| 亚洲与欧洲av电影| 久久午夜免费电影| jlzzjlzz亚洲日本少妇| 亚洲成av人片www| 久久久一区二区三区| 99re这里都是精品| 免费久久99精品国产| 中文字幕在线一区二区三区| 欧美三级电影网站| 一本大道久久a久久综合婷婷| 亚洲大尺度视频在线观看| 久久一留热品黄| 精品国精品国产尤物美女| 欧美亚洲图片小说| 色播五月激情综合网| 91小视频在线| 色综合久久天天| 99精品国产视频| 欧美日韩精品免费| 欧美日韩一区不卡| 欧洲亚洲精品在线| 3d成人h动漫网站入口| 欧美午夜一区二区| 日韩欧美精品在线| 精品剧情v国产在线观看在线| 日韩免费一区二区| 国产视频一区不卡| 一区二区三区在线观看欧美| 中文字幕一区二区三区蜜月| 亚洲欧美日韩国产成人精品影院| 国产精品国产三级国产普通话三级| 日韩欧美国产综合一区 | 日韩欧美一级精品久久| 国产午夜精品理论片a级大结局| 精品福利av导航| 亚洲精品国产a久久久久久 | 亚洲图片你懂的| 日本aⅴ亚洲精品中文乱码| 处破女av一区二区| 91精品国产一区二区| 亚洲天堂久久久久久久| 久久99精品国产.久久久久| 色婷婷激情综合| 国产精品美日韩| 国产精品亚洲专一区二区三区 | 欧美电影免费提供在线观看| 亚洲激情中文1区| 91麻豆免费在线观看|