色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-02-09 15:32 ? 次閱讀

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

無法做離線緩存,所有的數據都是實時讀的

大量的請求會打到線上服務,對于服務的應時間要求較高,一般都是限制要求在300ms以內,如果超過這個時間那么對用戶造成的體驗就會急劇降

數據量較大,單次如果超過50W的qps,單條1kb,50萬就是5GB了,1分鐘30G,對于底層的數據存儲與問都有巨大的壓力~

如何應對這些棘手的問題,本篇博客來討論一下

一:向關系型數據庫 say no

一個真正的大型互聯網面向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這樣的利器方便我們排查問題,但是對于一些比較復雜的場景,還是需要日志來記錄程序的數據.但是在高流量的場景中,如果全量打印日志對于線上來說就是一種災難,有以下缺點:

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

大量的日志需要輸出,占用了程序IO,增加了接口的RT(響應時間) 如果需要解決這個問題,我們可以利用限流組件來實現一個基于限流的日志組件,令牌桶算法可以限制打印日志的流量,比如一秒只允許打印一條日志 - 基于白名單的日志打印,線上配置了白名單用戶才可以打印出來,節省了大量了無效日志輸出

總結

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

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 緩存
    +關注

    關注

    1

    文章

    240

    瀏覽量

    26699
  • 數據庫
    +關注

    關注

    7

    文章

    3818

    瀏覽量

    64498
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19703

原文標題:高并發服務的幾條優化經驗

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    android 穩定性并發全平臺社交聊天IM對外合作支持源碼

    穩定性并發全平臺社交聊天IM對外合作支持源碼成熟的消息收發確認機制,支持萬人大群支持開發自定義的消息sdk接口,擴展性超強支持單/群聊,支持紅包/文件等功能模塊 支持朋友圈分享等功能同步增加商城
    發表于 03-28 15:20

    在DragonBoard 410c上實現并發處理TCP服務

    ) testServer.serve_forever()到這里我們就完成了整個測試服務器的搭建,該服務器能夠借助于gevent實現并發的處理,并且支持異常處理,可以在dragonba
    發表于 09-25 15:53

    服務端視角看并發難題

    `所謂服務器大流量并發指的是:在同時或極短時間內,有大量的請求到達服務端,每個請求都需要服務端耗費資源進行處理,并做出相應的反饋。 從
    發表于 11-02 15:11

    高性能并發服務器架構分享

    由于自己正在做一個高性能大用戶量的論壇程序,對高性能并發服務器架構比較感興趣,于是在網上收集了不少這方面的資料和大家分享。希望能和大家交流 msn: ——————————————————————————————————————
    發表于 09-16 06:45

    Lite Actor:方舟Actor并發模型的輕量級優化

    設備的不斷增多,并發模型顯得舉足輕重,本期我們將為大家帶來方舟編譯器對傳統Actor并發模型的輕量級優化。 一、什么是并發模型?在操作系統中,并發
    發表于 07-18 12:00

    Tomcat7性能優化 強力提升網站并發能力

    Tomcat7性能優化 強力提升網站并發能力
    發表于 09-08 08:34 ?9次下載
    Tomcat7性能<b class='flag-5'>優化</b> 強力提升網站<b class='flag-5'>并發</b>能力

    大型網站如何解決并發帶來的問題

    在不使用消息隊列服務器的時候,用戶的請求數據直接寫入數據庫,在并發的情況下數據庫壓力劇增,使得響應速度變慢。
    發表于 06-28 17:07 ?2461次閱讀
    大型網站如何解決<b class='flag-5'>高</b><b class='flag-5'>并發</b>帶來的問題

    一文詳談并發

    并發,幾乎是每個程序員都想擁有的經驗。原因很簡單:隨著流量變大,會遇到各種各樣的技術問題,比如接口響應超時、CPU load升高、GC頻繁、死鎖、大數據量存儲等等,這些問題能推動我們在技術深度上不斷精進。
    的頭像 發表于 06-30 17:18 ?1731次閱讀

    阻抗匹配的幾條經驗分享

    阻抗匹配有點“門當戶對”的意思,輸入輸出阻抗都跟電路的具體設計有關。這里先提供幾條經驗,大家以后可以慢慢理解。
    的頭像 發表于 05-01 16:24 ?7230次閱讀

    幾條for循環的常見優化方式

    前言我們都經常使用一些循環耗時計算的操作,特別是for循環,它是一種重復計算的操作,如果處理不好,耗時就比較大,如果處理書寫得當將大大提高效率,下面總結幾條for循環的常見優化方式。 首先,我們
    的頭像 發表于 08-20 09:36 ?3812次閱讀
    <b class='flag-5'>幾條</b>for循環的常見<b class='flag-5'>優化</b>方式

    服務器的并發能力如何提升?

    服務器的并發能力如何提升? 服務并發能力體現著服務
    的頭像 發表于 03-17 17:07 ?1032次閱讀

    存儲服務器在并發環境下該如何優化

    在這個信息化時代,每時每刻都有人在訪問數據,這就造成了存儲服務器的并發,使得存儲服務器工作的效率變低。
    的頭像 發表于 03-27 15:49 ?644次閱讀

    服務并發的概念

    自己調整系統的相關參數 并發的概念是什么?什么是并發? 對于服務并發的概念,下面幾點是錯誤的定義 ①服務器處理客戶端請求的數量:沒有時間、
    的頭像 發表于 11-10 10:05 ?5067次閱讀
    <b class='flag-5'>服務</b>器<b class='flag-5'>并發</b>的概念

    并發系統的藝術:如何在流量洪峰中游刃有余

    前言 我們常說的三并發可用、高性能,這些技術是構建現代互聯網應用程序所必需的。對于京東618備戰來說,所有的中臺系統服務,無疑都是
    的頭像 發表于 08-05 13:43 ?295次閱讀
    <b class='flag-5'>高</b><b class='flag-5'>并發</b>系統的藝術:如何在流量洪峰中游刃有余

    并發物聯網云平臺是什么

    來看,并發物聯網云平臺需要具備高效的處理能力和優秀的擴展性,以應對大量的并發請求。這通常需要采用分布式架構,比如微服務架構,以及高效的數據處理技術,如流處理、大數據處理等。 其次,從
    的頭像 發表于 08-13 13:50 ?268次閱讀
    主站蜘蛛池模板: 2021年国产精品久久| 接吻吃胸摸下面啪啪教程| 露露的性战k8经典| 99视频在线精品免费观看18| 强伦姧久久久久久久久久| 国产3级在线| 亚洲日韩精品AV中文字幕| 快播电影频道| 处xxxx.88| 亚洲不卡视频| 毛片基地看看成人免费| 成人免费观看在线视频| 亚洲AV无码专区国产乱码网站 | 成人免费在线观看视频| 性欧美videofree中文字幕| 久久九九亚洲精品| 成人亚洲精品| 一个人在线观看免费视频| 欧美同志高清vivoeso| 国产又粗又猛又爽黄老大爷| 99RE6这里只有精品国产AV| 同时和两老师双飞| 美国69xxxx59| 国产一浮力影院| www.伊人网| 伊人最新网址| 丝瓜视频在线免费| 免费人成视频X8X8国产更快乐| 国产精品久久久久久久AV下载| 2020无码最新国产在线观看| 忘忧草下载| 牛牛在线视频| 九九精品在线播放| 国产97精品久久久天天A片| 18禁无遮挡羞羞污污污污免费| 中文字幕亚洲无线码一区| 日日摸天天添天天添无码蜜臀| 久久人妻少妇嫩草AV蜜桃35I| 国产成人综合在线观看网站| 1788vv视频| 亚洲视频成人|