新聞資訊  快訊  焦點  財經  政策  社會
互 聯 網   電商  金融  數據  計算  技巧
生活百科  科技  職場  健康  法律  汽車
手機百科  知識  軟件  修理  測評  微信
軟件技術  應用  系統  圖像  視頻  經驗
硬件技術  知識  技術  測評  選購  維修
網絡技術  硬件  軟件  設置  安全  技術
程序開發  語言  移動  數據  開源  百科
安全防護  資訊  黑客  木馬  病毒  移動
站長技術  搜索  SEO  推廣  媒體  移動
財經百科  股票  知識  理財  財務  金融
教育考試  育兒  小學  高考  考研  留學
您當前的位置:首頁 > IT百科 > 程序開發 > 語言 > JAVA

Java解決高并發秒殺

時間:2019-06-17 14:50:03  來源:  作者:
<a href=http://www.encras.tw/it/cxkf/yy/JAVA/ target=_blank class=infotextkey>JAVA</a>解決高并發秒殺

 

一:問題

首先我們要考慮的是為什么要解決高并發,高并發瓶頸出現在哪里,有了解過的朋友肯定知道是在數據庫,因為在大量請求去操作數據庫時會出現數據的錯亂,超賣,系統崩潰,MySQL死鎖等現象。

Java解決高并發秒殺

 

二:思路

  • 1. 頁面靜態化:就是將整個頁面存儲到redis中,下次訪問時去讀取redis中的頁面值
  • 2. cdn:主要對整個網站的靜態資源文件進行加速,如圖片,css,js等(去阿里看教程)
  • 3.數學驗證碼:用戶在計算驗證碼結果時可以減少大量請求同時進入,減少redis, mysql,服務器的壓力。
  • 4:庫存標識:這是一個巨大優化,通過標識來判斷redis的庫存是否足夠,如不足就中斷去讀取redis庫存。例:boolean over = map.get(goodsId);當我們map通過key讀取到value值為true的時候,就返回錯誤提示給用戶, if(over) { return Result.error(‘庫存不足’); }.....這樣不管以后有多個請求進入都只運行兩行代碼,以下的操作無法進入。
  • 5.生成動態url:主要是防止惡意用戶通過固定url進行提前秒殺商品(安全方面問題這個不可掉以輕心,你連安全措施都沒做好以下的那些操作都是白搭的)
  • 6. redis預減庫存:在用戶秒殺商品前去redis獲取當前的庫存數量,然后在秒殺時候直接減去redis存儲的庫存(大家放心這里Redis和MySQL數據是同步的,只要進入MQ隊列操作完成下單,MySQL數據庫會-1數量),從而避開去MySQL讀取庫存數據。
  • 7. MQ消息隊列:它是一個中間消息鍵,通過生產者發送消息給消費者,進行業務操作,而生產者無需知道執行結果,也就是用戶點擊秒殺之后等待處理結果,之后再去輪詢查詢處理結果(異步操作),這樣就避開了不斷請求去操作數據庫。(這里的輪詢查詢也是直接從redis里面去查詢,因為秒殺成功之后會將秒殺的結果放到redis中,輪詢時候通過key去查詢)
  • 8. Nginx:解決高并發的好方法,也就是我們多增加幾個Tomcat服務器。當用戶訪問的時候,請求可以提交到空閑的tomcat服務器上。
  • 9.數據庫集群、庫表散列

①大型網站都有復雜的應用,這些應用必須使用數據庫,那么在面對大量訪問的時候,數據庫的瓶頸很快就能顯現出來,這時一臺數據庫將很快無法滿足應用,于是我們需要使用數據庫集群或者庫表散列。

②在數據庫集群方面,很多數據庫都有自己的解決方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是類似的方案,您使用了什么樣的DB,就參考相應的解決方案來實施即可。

③上面提到的數據庫集群由于在架構、成本、擴張性方面都會受到所采用DB類型的限制,于是我們需要從應用程序的角度來考慮改善系統架構,庫表散列是常用并且最有效的解決方案。

④我們在應用程序中安裝業務和應用或者功能模塊將數據庫進行分離,不同的模塊對應不同的數據庫或者表,再按照一定的策略對某個頁面或者功能進行更小的數據庫散列,比如用戶表,按照用戶ID進行表散列,這樣就能夠低成本的提升系統的性能并且有很好的擴展性。

  • 10.負載均衡

負載均衡將是大型網站解決高負荷訪問和大量并發請求采用的高端解決辦法。

  • 11.反向代理

客戶端直接訪問的服務器并不是直接提供服務的服務器,它從別的服務器獲取資源,然后將結果返回給用戶。

代理服務器和反向代理服務器:

代理服務器是代我們訪獲取資源,然后將結果返回。例如,訪問外網的代理服務器。反向代理服務器是我們正常訪問一臺服務器的時候,服務器自己調用了別的服務器。

反向代理就是說,用戶的請求請求到負載均衡的設備上,負載均衡設備再講請求分發到空閑的應用服務器上處理,處理完成之后再通過負載均衡設備返回給用戶,這樣對于用戶來說,后來的分發是不可見的。

Java解決高并發秒殺

 

反向代理的實現

1)需要有一個負載均衡設備來分發用戶請求,將用戶請求分發到空閑的服務器上

2)服務器返回自己的服務到負載均衡設備

3)負載均衡將服務器的服務返回用戶

代理服務器我們主動使用,是為我們服務的,不需要有自己的域名;反向代理是服務器自己使用的,我們并不知道,有自己的域名。
 



Tags:Java   點擊:()  評論:()
聲明:本站部分內容來自互聯網,內容觀點僅代表作者本人,如有任何版權侵犯請與我們聯系,我們將立即刪除。
▌相關評論
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
▌相關推薦
1.關于面向對象的概念a. 類 class :在js中就是構造函數*在傳統的買你想對象語言中,使用一個叫做類的東西定義模板,然后使用模板創建對象。*在構造方法中也具有類似的功能,因此稱...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
Scanner識別庫,識別器可選擇,這里有你常用的二維碼/條碼識別,還有你可能用到的身份證、銀行卡識別,如果沒有你想要的,可以自定義識別器。該庫只識別掃描框內的圖像,識別速率上大大...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
在2011年7月28日,jdk1.7被正式發布。他的一個最大的亮點就是將原來的NIO類庫生成到了NIO2.0,也被叫做AIO。這篇文章將通過案例對AIO進行一個講解。一、IO的演進在jdk1.4之前,ja...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
在Java中,兩個Integer類型的數,都為127時,用雙等判斷是否相等時,返回true。如圖: 但是,當大于127時,比如加了1,當128時,再這樣判斷,就會失敗。如圖: 直接說原因:雙等用在對象上時,判斷的...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
前言在談CAS算法時,我們先來了解一下無鎖的概念。無鎖分為以下兩大派系: 對于樂觀派系而言,它們認為事情總會往好的方向去發展,總是認為壞的情況發生概率特別小,可以無所顧忌的做...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
初始化一個類,生成一個實例的時候;newInstance() 和 new 有什么區別?用newInstance與用new是區別的,區別在于創建對象的方式不一樣,前者是使用類加載機制,那么為什么會有兩種創建...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
創建線程,是多線程編程中最基本的操作,彤哥總結了一下,大概有8種創建線程的方式,你知道嗎?...【詳細內容】
2019-10-10   Java  點擊:(1)  評論:(0)  加入收藏
1. 前言對于Flink中各個組件(JobMaster、TaskManager、Dispatcher等),其底層RPC框架基于Akka實現,本文著重分析Flink中的Rpc框架實現機制及梳理其通信流程。 2. Akka介紹由于Fli...【詳細內容】
2019-10-09   Java  點擊:(8)  評論:(0)  加入收藏
Java中的return語句總是和方法有密切關系,return語句總是用在方法中,有兩個作用,一個是返回方法指定類型的值(這個值總是確定的),一個是結束方法的執行(僅僅一個return語句)。在...【詳細內容】
2019-10-09   Java  點擊:(8)  評論:(0)  加入收藏
大家經常瀏覽一些網站時候會彈出在線聊天窗口,點擊后可以和客服人員聊天,非常方便,之前也做過一款簡單的在線聊天工具,下面就說說在線聊天通訊的主要幾種技術手段。1、Ajax在htm...【詳細內容】
2019-10-09   Java  點擊:(4)  評論:(0)  加入收藏
java中基本類型中,long和double的長度都是8個字節,32位(4字節)處理器對其讀寫操作無法一次完成,那么,JVM,long和double是原子性的嗎?...【詳細內容】
2019-10-08   Java  點擊:(5)  評論:(0)  加入收藏
引言js的異步操作,已經是一個老生常談的話題,關于這個話題的文章隨便google一下都可以看到一大堆。那么為什么我還要寫這篇東西呢?在最近的工作中,為了編寫一套相對比較復雜的插...【詳細內容】
2019-10-08   Java  點擊:(5)  評論:(0)  加入收藏
你可能還記得,Liskov 代換原則是關于承諾和契約的規則。但具體是怎樣的承諾呢?為了確保 subtype(子類型)的安全性,意味著必須保證可以合理地從超類型推導出 subtype,而且這個過程...【詳細內容】
2019-10-08   Java  點擊:(5)  評論:(0)  加入收藏
McGovernTheory在StackOverflow提了這樣一個問題:?Java虛擬機最多支持多少個線程?跟虛擬機開發商有關么?跟操作系統呢?還有其他的因素嗎?...【詳細內容】
2019-10-08   Java  點擊:(5)  評論:(0)  加入收藏
我們平常的生活工作中,百度、谷歌這些搜索網站已經成為了我們受教解惑的學校,俗話說得好,“有問題找度娘”。那么百度是如何在海量數據中找到自己需要的數據呢?為什么它搜索的速...【詳細內容】
2019-10-08   Java  點擊:(7)  評論:(0)  加入收藏
今天一位同事問我關于本文標題描述的功能如何實現,Jerry在網上隨便搜了一下,類似的例子非常多,這里隨便找了一個例子做了精簡,方便Jerry以后重用。 其實之前Jerry的文章 只要200...【詳細內容】
2019-10-08   Java  點擊:(4)  評論:(0)  加入收藏
如何創建和初始化一個HashMap,看似簡單的問題,其實真的挺簡單的,但我們希望從多種方法中,選擇一個最簡潔方便、可讀性也高的方法。 代碼塊初始化可以使用靜態代碼塊和非靜態代碼...【詳細內容】
2019-09-29   Java  點擊:(11)  評論:(0)  加入收藏
前言明代王陽明先生在《傳習錄》談為學之道時說:私欲日生,如地上塵,一日不掃,便又有一層。著實用功,便見道無終窮,愈探愈深,必使精白無一毫不徹方可。代碼中的"壞味道",如"私欲"如"...【詳細內容】
2019-09-29   Java  點擊:(11)  評論:(0)  加入收藏
一、數據庫架構原則 高可用 高性能 一致性 擴展性二、常見的架構方案方案一:主備架構,只有主庫提供讀寫服務,備庫冗余作故障轉移用 jdbc:mysql://vip:3306/xxdb1、高可用分析:高...【詳細內容】
2019-09-27   Java  點擊:(6)  評論:(0)  加入收藏
人與人之間通過交流構成了這個豐富多彩的世界,在計算機中,通過即時通信工具傳遞信息為我么的生活增添了很多樂趣也提供了很多遍歷,而在java線程的世界里,線程之間的通信,可以極大...【詳細內容】
2019-09-27   Java  點擊:(4)  評論:(0)  加入收藏
推薦資訊
相關文章
欄目更新
欄目熱門
31选7开奖11185