高併發:
1、傳統專案:
1、資料庫方向:建立索引,儲存過程、觸發器、盡量少的使用子查詢
2、快取:session,
cookie
;3、非關聯式資料庫:redis,記憶體,快取在硬碟上
4、非同步
,弊端,共享資料
--加鎖(悲觀鎖)
程式中:服務層()物件鎖,方法鎖
資料庫:整個表加鎖,給行加鎖,
2、分布式專案:
每乙個塊服務就是系統
建立的分布式鎖:
例項**:
1:redis
的setnx
命令set命令【可重複改】;
set tom 1;
set tom 2;
setnx命令
:setnx tom 1;(加鎖)
setnx tom 2(無法執行);
解鎖:del tom
這種加鎖的思路是, key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 incr 操作進行加一。
然後其它使用者在執行 incr 操作進行加一時,如果返回的數大於 1 ,說明這個鎖正在被使用當中。1、
客戶端a請求伺服器獲取key的值為
1表示獲取了鎖2、
客戶端b也去請求伺服器獲取key的值為
2表示獲取鎖失敗3、
客戶端a執行**完成,刪除鎖4、
客戶端b在等待一段時間後在去請求的時候獲取key的值為
1表示獲取鎖成功5、
客戶端b執行**完成,刪除鎖
$redis->incr($key);
$redis->expire($key, $ttl);
//設定生成時間為1秒
這種機制會造成大量的等待超時:
1:引入訊息中介軟體
activemq
2:zookeeper
上鎖【鎖的是通訊】
高併發系統設計 其它知識(一)
如果系統有使用資料庫,最常想到的全域性唯一id是利用資料庫的自增字段來保證唯一性。這種方法生成的長度不同,並且與資料為互動,效能較差。其它兩個常用的兩個演算法是 uuid與snowflake 演算法1,2可以保證唯一性 演算法3 5除了利用的hash演算法不同外,其它都相同,可以保證區域性唯一,有極...
高併發 高可用
高併發 提高系統併發能力的方法主要有兩種 前者垂直擴充套件可以通過提公升單機硬體效能,或者提公升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分布式架構設計高併發終極解決方案還是後者 水平擴充套件。網際網路分層架構中,各層次水平擴充套件的實踐又有所不同 1 反向 層可以通過 dns輪詢...
高併發 高併發測試筆記
問 高併發測試 一般你們用什麼工具來模擬 10萬級別的客戶端併發?在普通的電腦上可以模擬嗎 10萬併發需要至少10萬的套接字,套接字在核心中占用記憶體100000 6k 2 1g記憶體,系統需要能夠開啟10w個fd。一般的系統能夠能模擬 問 預設每個程序只能開1024個fd,修改後最大可以10w,那...