MySQL之應用層優化(二)

應用層優化

Web服務器問題

尋找最優并發度

每個Web服務器都有一個最佳并發度——就是說,讓進程處理請求盡可能快,并且不超過系統負載的最優的并發連接數。這就是前面說的最大系統容量。進行一個簡單的測量和建模,或者只是反復試驗,就可以找到這個"神奇的數",為此花一些時間是值得的。
對于大流量的網站,Web服務器同一時刻處理上千個連接是很常見的。然而,只有一小部分連接需要進程實時處理。其他的可能是讀請求,處理文件上傳,填鴨式服務內容,或者只是等待客戶端的下一步請求。隨者并發的增加,服務器會逐漸到達它的最大吞吐量。在這之后,吞吐量通常開始降低,更重要的是,響應時間(延遲)也會i那位排隊而開始增加。為什么會這樣呢?試想,如果服務器只有一個CPU,同時接受到100個請求,,會發生什么事情呢?j假設CPU每秒能夠處理一個請求。即便理想情況下操作系統沒有調度的開銷,也沒有上下文切換的成本,那100個請求也需要CPU花費整整100s才能完成。
處理請求i的最好辦法是什么?可以將其一個個地排到隊列中,也可以并行地執行在不同請求之間切換,每次切換都給每個請求相同的服務時間。在這兩種情況下,吞吐量都是每秒處理一個請求。然而,如果使用隊列(并發=1),平均延時是50s,如果是并發執行(并發=100)則是100s。在實踐中,并發執行會使平均延時更高,主要是因為上下文切換的代價。
對于CPU密集型工作負載,最佳并發度等于CPU數量(或者CPU核數)。然而,進程并不總是處于可運行狀態的,因為會有一些阻塞式請求,例如IO、數據庫查詢,以及網絡請求。因此,最佳并發度通常會比CPU數量高一些。
可以預測最優并發度,但是這需要精確的分析。嘗試不同的并發值,看看在不增加響應時間的情況下的最大吞吐量是多少,或者測量真正的工作負載進行分析,這通常更容易。Percona Toolkit的pt-tcp-model工具可以幫助從TCP轉儲中測量和建模分析系統的可擴展性和性能特性。

緩存

緩存對高負載應用來說至關重要。一個典型的Web應用程序會提高大量的內容,直接生成這些內容的成本比采用緩存要高得多(包括檢查和緩存超時的開銷),所以采用緩存通常可以獲得數量級的性能提升。訣竅是找到正確的粒度和緩存過期策略組合。另外也需要決定哪些內容適合緩存,緩存在哪里。
典型的高負載應用會有很多層緩存。緩存并不僅僅發生在服務器上,而是在每一個環節,甚至包括用戶的Web瀏覽器(這就是內容過期頭的用處)。通常,緩存越接近客戶端,就越節省資源并且效率更高。從瀏覽器緩存提供一張圖片比從Web服務器的內容獲取快得多,而從服務器的內存讀取又比從服務器的磁盤上讀取好得多。每種類型的緩存有其不一樣的特點,例如容量和延時。
可以把緩存分成兩大類:被動緩存和主動緩存。被動緩存除了存儲和返回數據外不做任何事情。當從被動緩存請求一些內容時,要么可以得到結果,要么得到"結果不存在"。被動緩存的一個典型例子時memcached.相比之下,主動緩存會在訪問未命中時做一些額外的工作。通常會將請求轉發給應用的其他部分來生成請求結果,然后存儲該結果并返回給應用。Squid緩存代理服務器就是一個主動緩存。設計應用程序時,通常希望緩存是主動的(也可以叫做透明的),因為它們對應用隱藏了檢查——生成——存儲這個邏輯過程。也可以在被動緩存的前面構建一個主動緩存。

應用層以下的緩存

MySQL服務器有自己的內部緩存,但也可以構建你自己的緩存和匯總表。可以對緩存表量身定制,使他們最有效地過濾、排序、與其它表關聯、計數,或者用于其他用途。緩存表也比許多應用層緩存更持久,因為在服務器重啟后它們還存在。

緩存并不總是有用。
必需確認緩存真的可以提升性能,因為有時候緩存可能沒有任何幫助。例如,在實踐中發現從Nginx的內存中獲取內容比從緩存中代理中獲取要快,如果代理的緩存在磁盤上則尤其如此.
原因很簡單:緩存自身也有一些開銷。比如檢查緩存是否存在,如果命中則直接從緩存中返回數據。另外將緩存對象失效或者寫入新的緩存對象都會有開銷。緩存只在這些開銷比沒有緩存的情況下生成和提供數據的開銷少時才有用。如果直到所有這些操作的開銷,就可以計算出緩存能提供多少幫助。沒有緩存時的開銷就是每個請求生成數據的開銷。有緩存的開銷是檢查緩存的開銷加上緩存不命中的概率乘以生成數據的開銷,再加上緩存命中的概率乘以緩存提供數據的開銷。如果有緩存時的開銷比沒有時要低,則說明緩存可能有用,但依然不能保證。還要記住,就像從Nginx的內存中獲取數據比從代理在磁盤中的緩存獲取要好一樣,有些緩存的開銷比另外一些要低

應用層緩存

應用層緩存通常在同一臺機器的內存中存儲數據,或者通過網絡存在另一臺機器的內存中。因為應用可以緩存部分計算結果,所以應用緩存可能比更低層次的緩存更有效。因此應用層緩存可以節省兩方面的工作:獲取數據以及基于這些數據進行計算。一個很好的例子是HTML文本塊。應用程序可以生成例如頭條新聞的標題這樣的HTML片段,并且做好緩存。后續的頁面試圖就可以簡單地插入這個緩存過的文本。一般來說,在緩存數據前對數據做的處理越多,緩存命中節省的工作越多。
但應用層緩存也有缺點,那就是緩存命中率可能更低,并且可能使用較多的內存。假設需要50個不同版本的頭條新聞標題,以使不同地區生活的用戶看到不同的內容,那就需要足夠的內存去存儲全部50個版本,任何給定版本的標題命中次數都會更少,并且失效策略也會更加復雜。
應用緩存有許多種,下面是其中的一小部分:

1.本地緩存

這種緩存通常很小,只在進程處理請求期間存在于進程內存中。本地緩存可以有效地避免對某些資源的重復請求。這種類型的緩存技術并不復雜:通常只是應用代碼中的一個變量或者哈希表。這種類型的緩存技術并不復雜:通常只是應用代碼中的一個變量或者哈希表。例如,假設需要顯式一個用戶名,而且已經直到其ID,就可以創建一個get_name_from_id()函數并且在其中增加緩存。像下面這樣:
在這里插入圖片描述
在這里插入圖片描述

<?php
function get_name_from_id($user_id) {
static $name; // static makes the variable persist
if (!$name) {
// fetch name from database
}return $name;}
?>

如果使用的是Perl,那么Memoize模塊是函數調用結果標準的緩存方式:

use Memoize qw(memoize);
memoize 'get_name_from_id';
sub get_name_from_id {
my ($user_id) = @_;
my $name = # get name from database
return $name;
}

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

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

相關文章

2024年湖南省各市科小申報時間(科技型中小企業申報流程、條件、好處)新政

湖南省各市科小申報時間流程 一、評價管理 省科技廳牽頭負責科技型中小企業評價工作的組織和監督、實地核查、公示公告、入庫登記及編號撤銷和集中抽查工作&#xff0c;及時處理相關異議、投訴和舉報信息。 各市州科技局負責科技型中小企業評價工作的具體實施&#xff0c;組…

nginx SSI(Server Side Include)服務端包含 合并拼裝靜態內容

一、什么是SSI 在被傳送給瀏覽器之前&#xff0c;服務器會對 HTML 文檔進行完全地讀取、分析以及修改&#xff0c;使用SSI指令將文本、圖片或代碼信息包含到網頁中。對于整個頁面可以拆分成多個模塊&#xff0c;通過SSI指令將幾個模塊拼接成一個完整的頁面&#xff0c;當有內容…

【數據庫原理】課程筆記

數據庫原理 一、數據庫系統基礎 數據模型的類型 概念數據模型&#xff1a; 概念數據模型也稱概念模型或信息模型,是對現實世界中問題域內事務(特性)的描述,是以用戶觀點實現世界的模型(圖形表示)。主要用于描述事物的概念化結構,使數據庫的設計人員在設計初期,避開計算機系統及…

ATA-L2水聲功率放大器驅動水聲換能器的測試研究

隨著水聲通信技術的發展&#xff0c;水下通信設備也開始逐步走向實用化&#xff0c;為了滿足其實際的使用要求&#xff0c;功率放大器的設計需要具有高效率的特性&#xff0c;并能在水下長時間連續可靠的工作。 壓電陶瓷換能器主要負責電信號與聲信號之間的轉換&#xff0c;換能…

mybatis配置返回boolean類型

先大概說明一下ResultMap和ResultType的使用場景 ResultMap適用于復雜的查詢&#xff0c;可以處理多表關聯查詢、嵌套查詢等情況。通過ResultMap&#xff0c;可以更精確地控制查詢結果的映射。ResultType適用于簡單的查詢&#xff0c;而ResultMap適用于復雜的查詢。具體使用哪…

學習整理在php中使用PHPExcel讀取excel表列數大于Z時讀取不到的解決方案

php讀取excel列數大于Z時讀取不到 背景解決方案關鍵代碼 背景 表格數據超過26列&#xff0c; 也就是在Z列之前沒有AA列及以后的情況&#xff0c; 測試一直都沒有問題&#xff0c;超過&#xff0c;就會獲取不到數據了 解決方案 private function getExcelData(){//獲取excel文…

使用Python進行文件屬性修改

哈嘍,大家好,我是木頭左! 在計算機中,文件屬性是指與文件相關的元數據,如創建時間、修改時間、訪問時間等。這些屬性對于管理和組織文件非常重要。Python提供了一些內置的函數和方法,可以方便地修改文件的屬性。本文將介紹如何使用Python進行文件屬性的修改。 1. 獲取文件…

應用密碼學—(擴展)歐幾里得、DES、RSA、SHA-1算法

1. 歐幾里得算法 1.1 分析算法的實現原理 歐幾里德&#xff08;Euclid&#xff09;算法&#xff0c;也既常說的“輾轉相除法”&#xff0c;公式為gcd(m, n) { return gcd(n, m%n); }&#xff0c;對于任意兩個正整數m、n&#xff0c;每次求的一個數字r m % n&#xff0c;然后把…

教育場景中的自動化分揀系統!基于大象機器人UltraArm P340機械臂和傳送帶的實現

引言 今天我們將展示一個高度自動化的模擬場景&#xff0c;展示多個機械臂與傳送帶協同工作的高效分揀系統。在這個場景中&#xff0c;機械臂通過視覺識別技術對物體進行分類&#xff0c;并通過精確的機械操作將它們放置在指定的位置。這一系統不僅提高了分揀的速度和準確性&am…

PTrade怎么獲取KDJ隨機指標?想做量化策略怎么申請PTrade量化軟件?

get_KDJ - 隨機指標 get_KDJ(high, low, close, n9, m13, m23) 使用場景 該函數僅在回測、交易模塊可用 接口說明 獲取隨機指標KDJ指標的計算結果 PTrade是恒生公司開發的一款專業量化軟件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 參數 high&…

什么是分庫分表?它有哪些實現類型?

假如你正在使用關系型數據庫開發一款健康類系統。業務發展很好&#xff0c;系統有很多活躍的新老用戶&#xff0c;這些用戶會和平臺的醫生團隊進行交互&#xff0c;每天可能會生成數萬甚至數十萬級別的業務數據。這樣的話&#xff0c;隨著數據量越來越大&#xff0c;系統中的某…

如何在返利App中進行高效的異常處理與監控

如何在返利App中進行高效的異常處理與監控 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在開發返利App過程中&#xff0c;高效的異常處理與監控是確保系統穩定性和用戶體驗的關鍵。本文將深入探討…

被?絡罪犯利?的5?ChatGPT越獄提?

?ChatGPT發布的近18個月以來&#xff0c;?絡罪犯們已經能夠利??成式AI進?攻擊。OpenAI在其內容政策中制定了限制措施&#xff0c;以阻??成惡意內容。作為回應&#xff0c;攻擊者們創建了??的?成式AI平臺&#xff0c;如 WormGPT和FraudGPT&#xff0c;并且他們還分享了…

IP地址定位中多源數據融合的應用

IP地址定位如今在諸如網絡安全、地理信息服務、智能交通等領域發揮著關鍵作用。然而&#xff0c;傳統的基于單一數據源&#xff08;如IP數據庫&#xff09;的定位方法往往存在精度有限、可靠性不足等問題。多源數據融合技術的出現為解決這些問題提供了新的思路和方法。今天我們…

石墨烯分散液制備方法眾多 應用領域廣泛

石墨烯分散液制備方法眾多 應用領域廣泛 石墨烯分散液指將石墨烯納米片均勻分散在特定溶劑中制成的溶液。石墨烯分散液具有化學穩定性好、生物相容性好、熱穩定性好等優勢&#xff0c;未來有望在涂料、纖維制品、電池制造、油墨等領域獲得廣泛應用。 石墨烯分散液以石墨…

深入解析某音item_search_video接口:技術原理與應用探索

item_search_video接口是某音提供的一個用于根據關鍵詞搜索相關視頻內容的API。通過該接口&#xff0c;用戶可以獲取到與搜索關鍵詞相關的視頻列表&#xff0c;包括視頻的基本信息&#xff08;如標題、描述、封面圖URL&#xff09;、發布者信息以及視頻的播放和互動數據等。這為…

絕區零卡頓嚴重、延遲高的解決方法提前看

絕區零這款游戲背后是一個錯綜復雜的架空世界&#xff0c;仿佛一幅波瀾壯闊的史詩畫卷緩緩展開。在這個世界中&#xff0c;神秘莫測的“空洞”災害如影隨形&#xff0c;給大地帶來了無盡的破壞和混沌。經過米哈游團隊的精心雕琢&#xff0c;無論是畫面UI的細膩呈現&#xff0c;…

C++ 左值右值

文章目錄 概述左值右值右值引用左值和右值的互換 小結 概述 左值和右值屬于2中不同的表達式類型&#xff1b;它們在表達式中扮演不同的角色&#xff0c;特別是在賦值操作和函數參數傳遞中。 左值 定義&#xff1a;左值是指那些在內存中有確定位置的表達式&#xff0c;可以出…

灌區量測水管理系統是如何實現灌區節水?

隨著全球水資源日益緊張&#xff0c;節水已成為農業生產中不可忽視的一環。在灌區管理中&#xff0c;量測水管理系統以其精準的數據監測和科學的灌溉管理&#xff0c;為實現灌區節水提供了強有力的技術支持。 灌區量測水管理系統是一套集成了自動化監測、數據傳輸、數據分析和…

Springboot交流論壇網站00304

Springboot交流論壇網站 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了交流論壇網站的開發全過程。通過分析交流論壇網站管理的不足&#xff0c;創建了一個計算機管理交流論壇網站的方案。文章介紹了交流論壇…