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