限流算法目前程序開發(fā)過程常用的限流算法有兩個:漏桶算法和令牌桶算法。
創(chuàng)新互聯(lián)專注于寧陜網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供寧陜營銷型網(wǎng)站建設,寧陜網(wǎng)站制作、寧陜網(wǎng)頁設計、寧陜網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務,打造寧陜網(wǎng)絡公司原創(chuàng)品牌,更為您提供寧陜網(wǎng)站排名全網(wǎng)營銷落地服務。
漏桶算法
漏桶算法的原理比較簡單,請求進入到漏桶中,漏桶以一定的速率漏水。當請求過多時,水直接溢出??梢钥闯觯┩八惴梢詮娭葡拗茢?shù)據(jù)的傳輸速度。如圖所示,把請求比作是水滴,水先滴到桶里,通過漏洞并以限定的速度出水,當水來得過猛而出水不夠快時就會導致水直接溢出,即拒絕服務。
圖片來自網(wǎng)絡
漏桶的出水速度是恒定的,那么意味著如果瞬時大流量的話,將有大部分請求被丟棄掉(也就是所謂的溢出)。
令牌桶算法
令牌桶算法的原理是系統(tǒng)以一定速率向桶中放入令牌,如果有請求時,請求會從桶中取出令牌,如果能取到令牌,則可以繼續(xù)完成請求,否則等待或者拒絕服務。這種算法可以應對突發(fā)程度的請求,因此比漏桶算法好。
圖片來自網(wǎng)絡
漏桶算法和令牌桶算法的選擇
兩者的主要區(qū)別漏桶算法能夠強行限制處理數(shù)據(jù)的速率,不論系統(tǒng)是否空閑。而令牌桶算法能夠在限制數(shù)據(jù)的平均處理速率的同時還允許某種程度的突發(fā)流量。如何理解上面的含義呢?漏桶算法,比如系統(tǒng)吞吐量是 120/s,業(yè)務請求 130/s,使用漏斗限流 100/s,起到限流的作用,多余的請求將產(chǎn)生等待或者丟棄。對于令牌桶算法,每秒產(chǎn)生 100 個令牌,系統(tǒng)容量 200 個令牌。正常情況下,業(yè)務請求 100/s 時,請求能被正常被處理。當有突發(fā)流量過來比如 200 個請求時,因為系統(tǒng)容量有 200 個令牌可以同一時刻處理掉這 200 個請求。如果是漏桶算法,則只能處理 100 個請求,其他的請求等待或者被丟棄。
只能在應用層做并發(fā),數(shù)據(jù)庫層不允許并發(fā)。設想一下,如果你的主鍵ID是自動遞增的,兩條數(shù)據(jù)同時插入,那么他們的ID豈不是相同了?這豈不與主鍵的規(guī)則沖突?所以sql語句的執(zhí)行永遠都是隊列式的,你只能提高sql處理的性能。
mysql的最大連接數(shù)默認是100, 這個數(shù)值對于并發(fā)連接很多的數(shù)據(jù)庫應用是遠遠不夠的,當連接請求大于默認連接數(shù)后,就會出現(xiàn)無法連接數(shù)據(jù)庫的錯誤,因此我們需要把它適當調(diào)大一些。
調(diào)節(jié)方法為:
1.linux服務器中:改my.cnf中的值就行了
2.Windows服務器中(我用的):??
在文件“my.ini”中找到段 ? [mysqld],在其中添加一行 ?
max_connections=200 ? ? ? ? ### ? 200可以更改為想設置成的值.??
然后重啟"mysql"服務。
/mysqladmin所在路徑/mysqladmin -uroot -p variables
輸入root數(shù)據(jù)庫賬號的密碼后可看到
| max_connections | 1000 |
其他需注意的:
在編程時,由于用mysql語句調(diào)用數(shù)據(jù)庫時,在每次之執(zhí)行語句前,會做一個臨時的變量用來打開數(shù)據(jù)庫,所以你在使用mysql語句的時候,記得在每次調(diào)用完mysql之后就關閉mysql臨時變量。
另外對于訪問量大的,可以考慮直接寫到文本中,根據(jù)預測的訪問量,先定義假若是100個文件文件名依次為1.txt,2.txt...100.txt。需要的時候,再對所有文本文件中的數(shù)據(jù)進行分析,再導入數(shù)據(jù)庫。
方法一:進入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改為 max_connections=1000 服務里重起MYSQL即可
方法二:MySQL的最大連接數(shù)默認是100客戶端登錄:mysql -uusername -ppassword
設置新的最大連接數(shù)為200:mysql set GLOBAL max_connections=200
顯示當前運行的Query:mysql show processlist
顯示當前狀態(tài):mysql show status
退出客戶端:mysql exit
查看當前最大連接數(shù):mysqladmin -uusername -ppassword variables
使用mysql異步查詢,需要使用mysqlnd作為PHP的MySQL數(shù)據(jù)庫驅動。 使用MySQL異步... 如果創(chuàng)建的線程過多,則會造成線程切換引起系統(tǒng)負載過高。Swoole中的異步MySQL其...