国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

高并發服務的幾條優化經驗

數據庫
本篇文章討論了高并發服務在面對大流量時的一些基本注意事項和應對的點,當然實際線上的比目前的更復雜,這里只是給出幾條建議。

如何優化高并發服務,這里指的是qps在20萬以上的在線服務,注意不是離線服務,在線服務會存在哪些挑戰呢?

無法做離線緩存,所有的數據都是實時讀的 大量的請求會打到線上服務,對于服務的響應時間要求較高,一般都是限制要求在300ms以內,如果超過這個時間那么對用戶造成的體驗就會急劇下降數據量較大,單次如果超過50W的qps,單條1kb,50萬就是5GB了,1分鐘30G,對于底層的數據存儲與訪問都有巨大的壓力~

如何應對這些棘手的問題,本篇文章來討論一下。

一、向關系型數據庫sayno

一個真正的大型互聯網面向c端的服務都不會直接使用數據庫作為自己的存儲系統,無論你是采用的是分庫分表還是底層用了各種優秀的連接池等,mysql/oracle在面對大型在線服務是存在天然的劣勢,再如何優化,也難以抵擋qps大于50萬流量帶來的沖擊。

所以換個思路,我們必須使用nosql類緩存系統,比如redis/mermCache等作為自己的"數據庫",而mysql等關系型數據庫只是一種兜底,用于異步去寫作為數據查詢的備份系統。

場景舉例:京東雙11主會場,上架了部分商品,這部分商品都是在會場開始上架的時候直接寫入redis中的,當上架完成之后,通過異步消息寫入到mysql中。面向c端的查詢都是直接讀redis,而不是數據庫.而b端的查詢,可以走數據庫去查詢。這部分流量不是很高,數據庫絕對可以抵擋的住。

二、多級緩存

都知道緩存是高并發提高性能的利器之一。而如何使用好緩存進而利用好多級緩存,是需要我們去思考的問題。

Redis目前是緩存的第一首選,單機可達6-8萬的qps,在面對高并發的情況下,我們可以手動的水平擴容,以達到應對qps可能無線增長的場景。但是這種做法也存在弊端,因為redis是單線程的,并且會存在熱點問題。雖然redis內部用crc16算法做了hash打散,但是同一個key還是會落到一個單獨的機器上,就會使機器的負載增加,redis典型的存在緩存擊穿和緩存穿透兩個問題,尤其在秒殺這個場景中,如果要解決熱點問題,就變的比較棘手。

這個時候多級緩存就必須要考慮了,典型的在秒殺的場景中,單sku商品在售賣開始的瞬間,qps會急劇上升.而我們這時候需要用memeryCache來擋一層,memeryCache是多線程的,比redis擁有更好的并發能力,并且它是天然可以解決熱點問題的。有了memeryCache,我們還需要localCache,本地緩存,這是一種以內存換速度的方式。本地緩存會接入用戶的第一層請求,如果它找不到,接下來走memeryCache,然后走redis,這套流程下來可以擋住百萬的qps.

三、多線程

我記得在剛開始入行的時候,每次面試都會被問到多線程,那時候是一臉懵逼,多線程有這么厲害嗎?干嘛都說多線程,為什么要使用多線程,不用行不行?

要講明這個道理,我先來說一個實例:曾經我優化過一個接口,很典型的一個場景。原始的方式是循環一個30-40萬的list,list執行的操作很簡單,就是讀redis的數據,讀一次大概需要3ms左右,這是同步的方式,在預覽環境測試,直接30秒+超時。后來優化的方式就是把原有的同步調用改為線程池調用,線程池里的線程數或阻塞隊列大小需要自己調優,最后實測接口rt只需要3秒。足以見多線程的威力。

在多核服務的今天,如果還不用多線程就是對服務器資源的一種浪費。這里需要說一句,使用多線層一定要做好監控,你需要隨時知道線程的狀態,如果線程數和queueSize設置的不恰當,將會嚴重影響業務~ 當然多線程也要分場景,如果為了多線程而多線程反而是一種浪費,因為多線程調度的時候會造成線程在內核態和用戶態之間來回切換,如果使用不當反而會有反作用

四、降級和熔斷

降級和熔斷是一種自我保護措施,這和電路上的熔斷器的基本原理是一樣的,防止電流過大引起火災等,面對不可控的巨大流量請求很有可能會擊垮服務器的數據庫或者redis,使服務器宕機或者癱瘓造成不可挽回的損失。因為我們服務的本身需要有防御機制,以抵擋外部服務對于自身的侵入導致服務受損引起連帶反應。

降級和熔斷有所不同,兩者的區別在于降級是將一些線上主鏈路的功能關閉,不影響到主鏈路.熔斷的話,是指A請求B,B檢測到服務流量多大啟動了熔斷,那么請求會直接進入熔斷池,直接返回失敗。如何抉擇使用哪一個需要在實際中結合業務場景來考慮.

五、優化IO

很多人都會忽視IO這個問題,頻繁的建聯和斷聯都是對系統的重負。在并發請求中,如果存在單個請求的放大效那么將會使io呈指數倍增加。舉個例子,比如主會場的商品信息,如果需要商品的某個具體的詳情,而這個詳情需要調用下游來單個獲取。

隨著主會場商品的熱賣,商品越來越多,一次就要經過商品數X下游請求的數量,在海量的qps請求下,IO數被占據,大量的請求被阻塞,接口的響應速度就會呈指數級下降。所以需要批量的請求接口,所有的優化為一次IO

六、慎用重試

重試作為對臨時異常的一種處理的常見手法,常見應對的方式是請求某個服務失敗或者寫數據庫了重新再試,使用重試一定要注意以下幾點:

  • 控制好重試次數
  • 重試的間隔時間得衡量好
  • 是否重試要做到配置化。

之前我們線上出了一個bug,kafka消費出現了嚴重的lag,單詞消耗時間是10幾秒,看代碼之后發現是重試的次數過多導致的,并且次數還不支持配置化修改,所以當時的做法只能是臨時改代碼后上線.重試作為一種業務的二次嘗試,極大提升了程序的請求success,但是也要注意以上幾點。

七、邊界case的判斷和兜底

作為互聯網老手,很多人寫出的代碼都不錯,但是在經歷過幾輪的故障review之后發現很多釀成重大事故的代碼背后都是缺少對一些邊界問題的處理,所犯的錯誤非常簡單,但是往往就是這些小問題就能釀成大事故。

曾經review過一次重大的事故,后來發現最終的原因居然是沒有對空數組進行判空,導致傳入下游的rpc是空的,下游直接返回全量的業務數據,影響數百萬用戶。這個代碼改動起來很簡單,但是是令人需要反省的,小小的不足釀成了大禍

八、學會優雅的打印日志

日志作為追溯線上問題的最佳利器,可謂保留bug現場的唯一來源。雖然有arthas這樣的利器方便我們排查問題,但是對于一些比較復雜的場景,還是需要日志來記錄程序的數據,但是在高流量的場景中,如果全量打印日志對于線上來說就是一種災難,有以下缺點:

(1) 嚴重占用磁盤,估算以下,如果接口的qps在20萬左右,日志一秒就幾千兆,一天下來就是上千GB

(2) 大量的日志需要輸出,占用了程序IO,增加了接口的RT(響應時間) 如果需要解決這個問題:

  • 我們可以利用限流組件來實現一個基于限流的日志組件,令牌桶算法可以限制打印日志的流量,比如一秒只允許打印一條日志;
  • 基于白名單的日志打印,線上配置了白名單用戶才可以打印出來,節省了大量了無效日志輸出。

總結

本篇文章討論了高并發服務在面對大流量時的一些基本注意事項和應對的點,當然實際線上的比目前的更復雜,這里只是給出幾條建議,希望我們在高并發的路上保持敬畏,繼續探索.更好的深耕C端服務,做更好的互聯網應用。


責任編輯:趙寧寧 來源: ITPUB
相關推薦

2021-07-13 09:45:13

高并發項目經驗

2013-01-30 10:12:24

NginxNginx優化高并發

2014-08-08 13:30:44

Nginx

2021-01-13 05:27:02

服務器性能高并發

2021-05-24 09:28:41

軟件開發 技術

2018-09-11 08:37:05

高并發服務器優化

2019-10-30 16:54:08

golangredis數據庫

2018-06-29 09:06:26

高并發服務器優化

2021-07-07 14:20:15

高并發服務數據庫

2016-12-28 14:16:25

京東高并發系統設計

2018-02-27 14:30:17

2018-05-13 22:23:32

2019-12-03 10:46:07

PHP高并發架構

2021-07-28 13:28:43

高并發RPC服務端

2021-08-02 13:08:56

高并發服務

2010-05-31 14:56:11

2018-07-13 10:18:28

Linux服務器經驗

2019-06-28 10:55:04

預熱高并發并發高

2023-08-01 09:00:00

高并發性能優化

2025-03-31 10:42:31

點贊
收藏

51CTO技術棧公眾號

伊人久久大香| 亚洲一级片在线观看| 婷婷激情成人| 在线观看精品| 亚洲综合色成人| 亚洲蜜桃av| 青青草久久爱| 亚洲精品日韩丝袜精品| 校园春色欧美| 久久久久久久精| 亚洲欧美日韩不卡一区二区三区| 日本一区二区免费高清| 亚洲色在线视频| 国产精品入口| 91精品国产综合久久久久久久久| 日韩美女在线看免费观看| 欧美视频在线免费| 自拍偷拍 国产| 国产美女精品一区二区三区| 精品国产乱码一区二区三区四区 | 免费黄网在线观看| 亚洲欧美日韩精品久久久久| 男人天堂av片| 免费精品视频在线| 国产视频不卡| 日韩成人精品一区| 午夜精品久久久久久久白皮肤| 成人在线视频播放| 亚洲国产精品成人av| 日本中文在线观看| 在线观看区一区二| 中文字幕av在线| 亚洲综合视频在线| 超级碰碰视频| 亚洲色欲色欲www在线观看| 精品人妻一区二区三区四区在线 | 神马亚洲视频| 亚洲国产成人高清精品| 99reav2| 国产精品国产a| 欧美伦理片在线观看| 91浏览器在线视频| 六月丁香婷婷激情| 91在线视频播放| 国产一级爱c视频| www.欧美亚洲| 国产特级黄色大片| 久久精品男人天堂av| 午夜精品久久久内射近拍高清| 成人小视频免费观看| 91.com在线| 成人一道本在线| 日韩avxxx| 国产精品电影一区二区| 久草一本av| 狠狠色狠色综合曰曰| 黄色小视频在线免费观看| 欧美综合色免费| 国产精品刘玥久久一区| 亚洲国产精品99久久| 电影一区电影二区| 欧美国产精品人人做人人爱| 国产成人精品亚洲线观看| 国产成人啪免费观看软件| 精品亚洲一区二区| 99久久er| 欧美激情视频网站| 成人综合一区| 久久草视频在线看| 狠狠色2019综合网| 肉丝一区二区| 国产一区二区三区视频在线播放| 欧美在线观看一区二区三区| 97久久超碰精品国产| 91嫩草国产丨精品入口麻豆| 国产成人免费视频一区| 亚洲熟妇av一区二区三区| 国产精品色在线| 一个人看的免费视频色| 在线观看中文字幕不卡| 婷婷色在线播放| 欧美www在线| 亚洲精品推荐| 91久久伊人青青碰碰婷婷| 日本欧美一区二区在线观看| 你懂的av在线| 中文字幕一区在线观看视频| 日本电影一区二区在线观看| 亚洲а∨天堂久久精品喷水| 国产在线不卡一区二区三区| 国产精品老女人视频| 99热这里只有成人精品国产| 亚洲精品偷拍视频| 亚洲视频一二三| caoporn国产精品免费视频| 亚洲欧美www| 国产欧美久久一区二区三区| 久久人人爽爽人人爽人人片av| 97se亚洲国产综合自在线观| 中文字幕在线第一页| 亚洲成人动漫在线播放| 日本久久成人网| 老牛影视免费一区二区| 99精品视频在线免费观看| 最新在线地址| 亚洲人成在线观| 伊人久久大香线| 久久综合久久网| 精品久久久久久久久久久久| 涩涩视频在线免费看| 国产精品igao视频| 精品一区二区三区香蕉蜜桃 | 自由色视频.| 亚洲国产精品yw在线观看| 日韩av系列| 亚洲激情一区二区三区| 亚洲精品免费看| 2021中文字幕在线| 国产美女久久精品| 国产jizzjizz一区二区| 视频国产一区二区三区| 日韩在线视频播放| 亚洲精品三级| xxxx影院| 中国人与牲禽动交精品| 欧美破处大片在线视频| 一道本视频在线观看| 亚洲精品永久免费精品| 亚洲精品电影| 美女在线视频一区二区| 亚洲精品一区中文| 欧美三级乱码| 全部孕妇毛片丰满孕妇孕交| 久久韩国免费视频| 老司机午夜精品| 思思99re6国产在线播放| 国产美女久久精品| 中文字幕免费观看一区| 天堂电影一区| 国内精品久久久久久久果冻传媒| 亚洲欧美在线观看| 91在线成人| 亚洲国产高清国产精品| 欧美亚洲精品一区| 97在线精品| 69中国xxxxxxxxx69| 久久久精品久久| 久久国产精品72免费观看| 成人ww免费完整版在线观看| 91久久国产自产拍夜夜嗨| 亚洲一区在线播放| 日本成人a网站| 久久午夜夜伦鲁鲁一区二区| 色偷偷9999www| 国产麻豆成人精品| av免费不卡国产观看| 欧美高清性xxxxhdvideosex| 欧美最猛性xxxxx直播| 天天影视天天精品| 91成人福利在线观看| 57pao成人国产永久免费| 国产91精品入口| 欧美7777| avove在线观看| 亚洲精品有码在线| 国产精品综合二区| 欧美大电影免费观看| 91视频 - 88av| 亚洲人成电影网站色xx| 粉嫩av一区二区三区| 看片一区二区| 国产小视频精品| 97香蕉超级碰碰久久免费的优势| 国产欧美一区二区精品婷婷| 日韩08精品| 性生活免费在线观看| 日产精品久久久一区二区福利| 亚洲视频在线观看三级| 日本一二区不卡| aaa日本高清在线播放免费观看| 久久人人九九| 亚洲精品资源美女情侣酒店| 成人激情动漫在线观看| 4438全国亚洲精品观看视频| 蜜桃视频免费网站| 91免费电影网站| 欧美网站一区二区| 日日夜夜免费精品| 户外露出一区二区三区| 黄色片一级视频| 日本精品视频在线播放| 亚洲高清视频的网址| 亚洲小说欧美另类社区| 亚洲最新无码中文字幕久久| 亚洲精品高清无码视频| 国产精品日日做人人爱| 制服丝袜亚洲色图| 成人av电影免费在线播放| 国产精品美女久久久久久不卡| 69久久久久|