摘要:服務(wù)器性能數(shù)據(jù)庫性能網(wǎng)絡(luò)連接甚至編程語言都會影響并發(fā)數(shù)。但總結(jié)起來,高并發(fā)無非就是拆拆拆分分分。比如我們在多個端口配置啟動其他分庫分表合理的基本的優(yōu)化,比如盡量避免全表掃描我個人理解的高并發(fā)就是,把傳統(tǒng)的單元操作進行拆分,分的越細致越好。
服務(wù)器性能、數(shù)據(jù)庫性能、網(wǎng)絡(luò)連接甚至編程語言都會影響并發(fā)數(shù)。但總結(jié)起來,高并發(fā)無非就是拆拆拆分分分。
樂觀鎖樂觀鎖是數(shù)據(jù)庫優(yōu)化的典范。即,通過對數(shù)據(jù)條目的“版本控制”,來約束數(shù)據(jù),防止臟讀寫操作。在實際操作中并不獨占資源。在設(shè)計思路上是通過引入“版本”概念來放棄資源約束。
舉例:
數(shù)據(jù)庫中設(shè)置`CREATE TABLE tbl (
id varchar(32) , /** 樂觀鎖字段 **/ optimistic_lock numeric(12)
)`
java中使用spring @version 關(guān)鍵字,
@Version @Column(name = "optimistic_lock", columnDefinition = "INTEGER") private long optimisticLock;讀寫分離
數(shù)據(jù)庫中的讀寫分離知識數(shù)據(jù)庫集群的一種典型。并不一定需要按讀寫分離數(shù)據(jù)庫,也可以根據(jù)特定的業(yè)務(wù)邏輯來進行分開操作。
我們以讀寫分離舉例:
通常設(shè)計兩個數(shù)據(jù)庫master和slave數(shù)據(jù)服務(wù)器,在spring中配置兩個datasource
并在dao層調(diào)用時進行讀寫分別調(diào)用。
為保證master/slave服務(wù)器的數(shù)據(jù)一致性,兩個服務(wù)器間會有同步。
我們以圖片分離存儲為例,在web場景中,頁面加載的圖片是非常消耗資源的,通常我們會放在其他的服務(wù)器上來進行存儲,針對圖片資源進行優(yōu)化加速。這就像是java編程理念中的“解耦”。
同理,js文件、css文件、zip文件等皆可通過這種方式進行分離,再配合CDN加速技術(shù),實現(xiàn)訪問速度和并發(fā)能力的提升。
CDN加速就是在靠近用戶的物理位置上架設(shè)服務(wù)器,根據(jù)就近原則使用戶訪問物理上最近的服務(wù)器來節(jié)省網(wǎng)絡(luò)傳輸時間。
通常這種CDN加速的服務(wù)器分散到全國設(shè)置世界各地,并適當采用的緩存、專線等技術(shù)。
為保證數(shù)據(jù)的一致性,服務(wù)器間進行同步。
我們把一次HTTP請求的時間分成幾段:request--> calculate--> response,那么靜態(tài)資源簡化甚至省略了calculate步驟,實現(xiàn)請求-->響應(yīng)的簡單模型。
我們可以將“冪等”的請求進行靜態(tài)化處理。我們舉例來理解這件事:
比如用戶想快速的查詢自己近一個月的交易總額,按照傳統(tǒng)模式我們需要服務(wù)器在用戶查詢后進行累加計算來統(tǒng)計用戶這一個月的交易數(shù)據(jù)。那么我們可以在每天凌晨運行一次spring batch 來統(tǒng)計所有用戶的交易總額信息,并存儲在用戶對應(yīng)的表里,當用戶查詢時,直接獲取。
緩存可以理解為動態(tài)轉(zhuǎn)靜態(tài)的一個實例。也可以理解為將硬盤上的數(shù)據(jù)存入內(nèi)存方便讀取。通常設(shè)計為key-value形式。
以常用的memcache舉例:
MemCachedClient mc = new MemCachedClient(); String key = "cacheKey1"; Object value = SomeClass.getObject(); mc.set(key, value);服務(wù)器鏡像
與CDN加速的設(shè)計類似,根據(jù)不同地域、網(wǎng)絡(luò)服務(wù)商等網(wǎng)絡(luò)條件假設(shè)多個服務(wù)器的“鏡像”來實現(xiàn)網(wǎng)絡(luò)傳輸環(huán)節(jié)的優(yōu)化。
以此我們可以引出“負載均衡”。
負載均衡的設(shè)計理念是根據(jù)資源請求消耗情況來自動調(diào)節(jié)平衡。
比如我們在多個端口配置啟動tomcat:
分庫、分表
合理的Synchronized
基本的SQL優(yōu)化,比如盡量避免全表掃描
我個人理解的高并發(fā)就是,把傳統(tǒng)的“單元操作”進行拆分,分的越細致越好。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39560.html
摘要:武器工欲善其事,必先利其器,處理高并發(fā)我們當然少不了好的武器。 前言 今天看見有人聊目前系統(tǒng)有2億的PV,該如何優(yōu)化?當我看到這個話題的時候,突然在想自己工作中也遇到了不少高并發(fā)的場景了,所以即興發(fā)揮,在這里簡單總結(jié)和分享下,歡迎指正和補充。 正文 讀操作 關(guān)于讀,我們一般遵循如下優(yōu)先級: 優(yōu)先級 技術(shù)方案 說明 示例 最高 盡可能靜態(tài)化 對實時性要去不高的數(shù)據(jù),盡可能全走C...
摘要:服務(wù)器性能數(shù)據(jù)庫性能網(wǎng)絡(luò)連接甚至編程語言都會影響并發(fā)數(shù)。但總結(jié)起來,高并發(fā)無非就是拆拆拆分分分。比如我們在多個端口配置啟動其他分庫分表合理的基本的優(yōu)化,比如盡量避免全表掃描我個人理解的高并發(fā)就是,把傳統(tǒng)的單元操作進行拆分,分的越細致越好。 服務(wù)器性能、數(shù)據(jù)庫性能、網(wǎng)絡(luò)連接甚至編程語言都會影響并發(fā)數(shù)。但總結(jié)起來,高并發(fā)無非就是拆拆拆分分分。 樂觀鎖 樂觀鎖是數(shù)據(jù)庫優(yōu)化的典范。即,通過對數(shù)...
閱讀 1630·2021-11-11 10:59
閱讀 2639·2021-09-04 16:40
閱讀 3675·2021-09-04 16:40
閱讀 2996·2021-07-30 15:30
閱讀 1671·2021-07-26 22:03
閱讀 3174·2019-08-30 13:20
閱讀 2238·2019-08-29 18:31
閱讀 450·2019-08-29 12:21