什么是高并發,如何避免高并發

之前我將高并發的解決方法誤認為是線程或者是隊列可以解決,因為高并發的時候是有很多用戶在訪問,導致出現系統數據不正確、丟失數據現象,所以想到 的是用隊列解決,其實隊列解決的方式也可以處理,比如我們在競拍商品、轉發評論微博或者是秒殺商品等,同一時間訪問量特別大,隊列在此起到特別的作用,將 所有請求放入隊列,以毫秒計時單位,有序的進行,從而不會出現數據丟失系統數據不正確的情況。

今天我經過查資料,高并發的解決方法有倆種,一種是使用緩存、另一種是使用生成靜態頁面;還有就是從最基礎的地方優化我們寫代碼減少不必要的資源浪費:(

1.不要頻繁的new對象,對于在整個應用中只需要存在一個實例的類使用單例模式.對于String的連接操作,使用StringBuffer或者StringBuilder.對于utility類型的類通過靜態方法來訪問。

  1. 避免使用錯誤的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做條件判斷,盡量使用比的條件判斷方式.使用JAVA中效率高的類,比如ArrayList比Vector性能好。)

首先緩存技術我一直沒有使用過,我覺得應該是在用戶請求時將數據保存在緩存中,下次請求時會檢測緩存中是否有數據存在,防止多次請求服務器,導致服務器性能降低,嚴重導致服務器崩潰,這只是我自己的理解,詳細的資料還是需要在網上收集;

使用生成靜態頁面我想大家應該不模式,我們見過很多網站當在請求的時候頁面的后最已經變了,如“http://developer.51cto.com/art/201207/348766.htm”該頁面其實是一個服務器請求地址,在轉換成htm后,訪問速度將提升,因為靜態頁面不帶有服務器組件;在這里我就多多介紹一下:
一、什么是頁面靜態化:

簡 單的說,我們如果訪問一個鏈接 ,服務器對應的模塊會處理這個請求,轉到對應的jsp界面,最后生成我們想要看到的數據。這其中的缺點是顯而易見的:因為每次請求服務器都會進行處理,如 果有太多的高并發請求,那么就會加重應用服務器的壓力,弄不好就把服務器 搞down 掉了。那么如何去避免呢?如果我們把對 test.do 請求后的結果保存成一個 html 文件,然后每次用戶都去訪問 ,這樣應用服務器的壓力不就減少了?

那么靜態頁面從哪里來呢?總不能讓我們每個頁面都手動處理吧?這里就牽涉到我們要講解的內容了,靜態頁面生成方案… 我們需要的是自動的生成靜態頁面,當用戶訪問 ,會自動生成 test.html ,然后顯示給用戶。

二、下面我們在簡單介紹一下要想掌握頁面靜態化方案應該掌握的知識點:

1、 基礎- URL Rewrite

什么是 URL Rewrite 呢 ? URL 重寫。用一個簡單的例子來說明問題:輸入網址 ,但是實際上訪問的卻是 abc.com/test.action,那我們就可以說 URL 被重寫了。這項技術應用廣泛,有許多開源的工具可以實現這個功能。

2、 基礎- Servlet web.xml

如果你還不知道 web.xml 中一個請求和一個 servlet 是如何匹配到一起的,那么請搜索一下 servlet 的文檔。這可不是亂說呀,有很多人就認為 /xyz/*.do 這樣的匹配方式能有效。

如果你還不知道怎么編寫一個 servlet ,那么請搜索一下如何編寫 servlet.這可不是說笑呀,在各種集成工具漫天飛舞的今天,很多人都不會去從零編寫一個 servlet了。

三、基本的方案介紹
在這里插入圖片描述
其中,對于 URL Rewriter的部分,可以使用收費或者開源的工具來實現,如果 url不是特別的復雜,可以考慮在 servlet 中實現,那么就是下面這個樣子:
在這里插入圖片描述
總 結:其實我們在開發中都很少考慮這種問題,直接都是先將功能實現,當一個程序員在干到1到2年,就會感覺光實現功能不是最主要的,安全性能、質量等等才是 一個開發人員最該關心的。今天我所說的是高并發,我的解決思路是,1、采用分布式應用設計2、分布式緩存數據庫3、代碼優化

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.sync 修飾符的理解

正常 子組件&#xff1a; this.$emit(update:title, newTitle)父組件&#xff1a; <text-documentv-bind:title"doc.title"v-on:update:title"doc.title $event" ></text-document>簡潔&#xff1a; <text-document v-bind:title.sync&quo…

L1-025 正整數A+B

題的目標很簡單&#xff0c;就是求兩個正整數A和B的和&#xff0c;其中A和B都在區間[1,1000]。稍微有點麻煩的是&#xff0c;輸入并不保證是兩個正整數。 輸入格式&#xff1a; 輸入在一行給出A和B&#xff0c;其間以空格分開。問題是A和B不一定是滿足要求的正整數&#xff0c;…

到底多大才算高并發?

一、什么是高并發 定義&#xff1a; 高并發(High Concurrency)是使用技術手段使系統可以并行處理很多請求。關鍵指標&#xff1a; -響應時間(Response Time) -吞吐量(Throughput) -每秒查詢率QPS(Query Per Second) -每秒事務處理量TPS(Transaction Per Second) -同時在…

eclipse安裝maven插件

1、在線安裝插件 a.打開eclipse&#xff0c;菜單“Help”-“Install New Software...” b.在Work with 地址欄輸入&#xff1a;http://download.eclipse.org/releases/對應eclipse版本名稱 c.在filter框中輸入maven d.選擇“Collaboration”-“m2e - Maven Integration for Ecl…

VS2017 網站打包發布生成的文件中包含.pdb文件,解決辦法

右鍵點擊項目屬性&#xff0c;選擇打包/發布 Web&#xff0c;勾選 排除生成的調試符號&#xff1a; 再次發布&#xff0c;就不會再生成.pdb文件 轉載于:https://www.cnblogs.com/JoinLet/p/10297254.html

java分布式學習路線

先理解為什么需要分布式&#xff0c;因為服務器處理的能力需要提升&#xff0c;這里有兩個方面&#xff0c;第一是縱向 也就是增加cpu的能力&#xff0c;或者加內存&#xff1b;另一個方向就是 橫向 &#xff0c;就是分布式。將本來一臺計算機的壓力分給多太計算機&#xff0c;…

深入Nginx之《常用參數配置技巧》

常見參配置實戰技巧 下面會講解實戰中應該怎么配置更為合理。 1.user 默認是nobody&#xff0c;如果使用nobody&#xff0c;Nginx在運行過程中會出現很多操作沒有權限&#xff0c;比如寫硬盤。一般都是用低于root級別的用戶&#xff0c;比如www&#xff0c;并且可以在linux下設…

transform、transition 動畫效果

transform 轉換&#xff0c;變形 origin 定義旋轉基點&#xff08;left top center right bottom 坐標值&#xff09; transform-origin: 50px 50px; transform-origin: left;。 rotate 旋轉 transform:rotate(50deg) 旋轉角度可以為負數&#xff0c;需要先定義…

eslint 規則

"off"或0- 關閉規則 "warn"或1- 將規則作為警告打開&#xff08;不影響退出代碼&#xff09; "error"或2- 將規則作為錯誤打開&#xff08;觸發時退出代碼為1&#xff09;轉載于:https://www.cnblogs.com/smzd/p/10844161.html

分布式學習路線

由于分布式系統所涉及到的領域眾多&#xff0c;知識龐雜&#xff0c;很多新人在最初往往找不到頭緒&#xff0c;不知道從何處下手來一步步學習分布式架構。 本文試圖通過一個最簡單的、常用的分布式系統&#xff0c;來闡述分布式系統中的一些基本問題。 負載均衡分布式緩存分…

洛谷p2704 炮兵陣地

典型的狀態壓縮題&#xff0c;只是要定義dp[i][j][k]&#xff0c; #include<bits/stdc.h>using namespace std;int n,m,state[1<<10],tot0;int dp[110][66][66],sum[1<<10],mp[110];int getsum(int x){ int cnt0; while(x){ if(x&1) cnt; …

Flask 框架app = Flask(__name__) 解析

1 #!/usr/local/bin/python2 # codingutf-83 4 from flask import Flask5 app Flask(__name__)6 7 app.route(/)8 def hello_world():9 return Hello World! 10 11 if __name__ __main__: 12 app.run(host0.0.0.0,port9000) 第4行&#xff0c;引入Flask類&#x…

發布訂閱

發布訂閱 在軟件架構中&#xff0c;發布訂閱是一種消息范式&#xff0c;消息的發送者&#xff08;稱為發布者&#xff09;不會將消息直接發送給特定的接收者&#xff08;稱為訂閱者&#xff09;。而是將發布的消息分為不同的類別&#xff0c;無需了解哪些訂閱者&#xff08;如果…

ps 命令

ps 為我們提供了進程的一次性的查看&#xff0c;它所提供的查看結果并不動態連續的&#xff1b;如果想對進程時間監控&#xff0c;應該用 top 工具。kill 命令用于殺死進程。linux上進程有5種狀態: 1. 運行(正在運行或在運行隊列中等待) 2. 中斷(休眠中, 受阻, 在等待某個條件的…

python練習題-day8

1、有如下文件&#xff0c;a1.txt&#xff0c;里面的內容為&#xff1a; 老男孩是最好的培訓機構&#xff0c; 全心全意為學生服務&#xff0c; 只為學生未來&#xff0c;不為牟利。 我說的都是真的。哈哈 分別完成以下的功能&#xff1a; a,將原文件全部讀出來并打印。 with o…

消息中間件應用場景

消息中間件應用場景

IDEA開發vue.js卡死問題

在執行cnpm install后會在node_modules這個文件下面生成vue的相關依賴文件&#xff0c; 這個時候當執行cnpm run dev命令時&#xff0c;會導致IDEA出現卡死的問題&#xff0c;解決方法如下&#xff1a; 轉載于:https://www.cnblogs.com/heqiuyong/p/10301925.html

[BZOJ4698][SDOI2008]Sandy的卡片(后綴自動機)

差分之后就是求多串LCS。 對其中一個串建SAM&#xff0c;然后把其它串放在上面跑。 對SAM上的每個狀態都用f[x]記錄這個狀態與當前串的最長匹配長度&#xff0c;res[x]是對每次的f[x]取最小值。答案就是res[]的最大值。 考慮f[x]的求法&#xff0c;把s[]放在SAM上跑時&#xff…

點對點

數據傳輸的可靠性是通過數據鏈路層和網絡層的點對點和傳輸層的端對端保證的。點對點是基于MAC地址或者IP地址&#xff0c;是指一個設備發數據給另外一個設備&#xff0c;這些設備是指直連設備包括網卡&#xff0c;路由器&#xff0c;交換機。端對端是網絡連接&#xff0c;應用程…

none

module.exports {root: true,env: {node: true},extends: [plugin:vue/essential, vue/prettier],rules: {no-console: process.env.NODE_ENV production ? error : off,no-debugger: process.env.NODE_ENV production ? error : off,prettier/prettier: [error,{// tab縮…