精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

通過FastCGI Cache實現服務降級

運維 系統運維
關于FastCGI Cache,以前很多朋友已經做過分享,說點與眾不同的:雖然使用了緩存,但出于實時性考慮,正常情況下緩存都是被穿透的,只有在出現異常情況的時候才查詢。本文總結了通過FastCGI Cache實現服務降級的方法。

在自然界中,很多生物面臨生死考驗的時候,往往會做出驚人的反應,其中最為大家熟知的當屬壁虎,危難關頭,與其坐以待斃,不如斷尾求生,通過自殘來換取活下去的希望。對于互聯網項目而言,同樣存在著很多生死考驗,比如:訪問量激增;數據庫宕機等等,此時如果沒有合理的降級方案,那么結局必然是死路一條。

 

任何問題一旦脫離了實際情況,便失去了討論的意義。在繼續之前,不妨先介紹一下案例的背景情況:一個PHP網站,以讀為主,原本躲在CDN后面,運行很穩定,后來新增了很多強調實時性的需求,便去掉了CDN,進而導致系統穩定性受到影響。因為歷史包袱重,所以完全廢棄以前的架構顯得并不現實,解決方案***能夠盡可能透明,不能對原有架構造成沖擊,最終我選擇了通過FastCGI Cache實現服務降級的方案。

關于FastCGI Cache,以前很多朋友已經做過分享,比如:超群莿鳥棲草堂,概念性的東西我就不再贅述了,說點與眾不同的:雖然使用了緩存,但出于實時性考慮,正常情況下緩存都是被穿透的,只有在出現異常情況的時候才查詢,架構圖如下:

Degradation

Degradation

實現的關鍵點在于通過error_page處理異常,并且完成服務降級:

  1. limit_conn_zone $server_name zone=perserver:1m; 
  2. error_page 500 502 503 504 = @degradation; 
  3. fastcgi_cache_path /tmp 
  4.        levels=1:2 
  5.        keys_zone=degradation:100m 
  6.                    inactive=10d 
  7.                    max_size=10g
  8. upstream php { 
  9.     server 127.0.0.1:9000; 
  10.     server 127.0.0.1:9001; 
  11. server { 
  12.     listen 80; 
  13.     limit_conn perserver 1000; 
  14.     server_name *.xip.io; 
  15.     root /usr/local/www; 
  16.     index index.html index.htm index.php; 
  17.     location / { 
  18.         try_files $uri $uri/ /index.php$is_args$args; 
  19.     } 
  20.     location ~ \.php$ { 
  21.         set $cache_key $request_method://$host$request_uri; 
  22.         set $cache_bypass "1"; 
  23.         if ($arg_degradation = "on") { 
  24.             set $cache_bypass "0"; 
  25.         } 
  26.         try_files $uri =404
  27.         include fastcgi.conf; 
  28.         fastcgi_pass php; 
  29.         fastcgi_intercept_errors on; 
  30.         fastcgi_next_upstream error timeout; 
  31.         fastcgi_cache degradation; 
  32.         fastcgi_cache_lock on; 
  33.         fastcgi_cache_lock_timeout 1s; 
  34.         fastcgi_cache_valid 200 301 302 10h; 
  35.         fastcgi_cache_min_uses 10; 
  36.         fastcgi_cache_use_stale error 
  37.                                 timeout 
  38.                                 invalid_header 
  39.                                 updating 
  40.                                 http_500 
  41.                                 http_503; 
  42.         fastcgi_cache_key $cache_key; 
  43.         fastcgi_cache_bypass $cache_bypass; 
  44.         add_header X-Cache-Status $upstream_cache_status; 
  45.         add_header X-Response-Time $upstream_response_time; 
  46.     } 
  47.     location @degradation { 
  48.         rewrite . $request_uri?degradation=on last; 
  49.     } 

插播一個小技巧:設置域名時用到了xip.io,有了它就不用設置hosts了,方便調試。

代碼里用到的都是Nginx缺省包含的功能,我們可以看作是一個通用版,不過對照我們架構圖中的目標就會發現:它沒有實現全局激活緩存的功能。如何實現呢?最簡單的方法就是通過單位時間內出錯次數的多少來判斷系統健康以否,設置相應的閾值,一旦超過限制就全局激活緩存,通過Lua我們可以實現一個定制版:

  1. lua_shared_dict fault 1m; 
  2.  
  3. limit_conn_zone $server_name zone=perserver:1m; 
  4.  
  5. error_page 500 502 503 504 = @degradation; 
  6.  
  7. fastcgi_cache_path /tmp 
  8.                    levels=1:2 
  9.                    keys_zone=degradation:100m 
  10.                    inactive=10d 
  11.                    max_size=10g
  12.  
  13. upstream php { 
  14.     server 127.0.0.1:9000; 
  15.     server 127.0.0.1:9001; 
  16. init_by_lua ' 
  17.     get_fault_key = function(timestamp) 
  18.         if not timestamp then 
  19.             timestamp = ngx.time() 
  20.         end 
  21.         return os.date("fault:minute:%M", timestamp) 
  22.     end 
  23.     get_fault_num = function(timestamp) 
  24.         local fault = ngx.shared.fault 
  25.         local key = get_fault_key(timestamp) 
  26.         return tonumber(fault:get(key)) or 0 
  27.     end 
  28.     incr_fault_num = function(timestamp) 
  29.         local fault = ngx.shared.fault 
  30.         local key = get_fault_key(timestamp) 
  31.         if not fault:incr(key, 1) then 
  32.             fault:set(key, 1, 600) 
  33.         end 
  34.     end 
  35. '; 
  36. server { 
  37.     listen 80; 
  38.     limit_conn perserver 1000; 
  39.     server_name *.xip.io; 
  40.     root /usr/local/www; 
  41.     index index.html index.htm index.php; 
  42.     location / { 
  43.         rewrite_by_lua ' 
  44.             if ngx.var.arg_degradation then 
  45.                 return ngx.exit(ngx.OK) 
  46.             end 
  47.  
  48.             local ok = true 
  49.  
  50.             for i = 0, 1 do 
  51.                 local num = get_fault_num(ngx.time() - i * 60) 
  52.                 if num > 1000 then 
  53.                     ok = false 
  54.                     break 
  55.                 end 
  56.             end 
  57.            if not ok then 
  58.                 local query = "degradation=on" 
  59.                 if ngx.var.args then 
  60.                     ngxngx.var.args = ngx.var.args .. "&" .. query 
  61.                 else 
  62.                     ngx.var.args = query 
  63.                 end 
  64.             end 
  65.         '; 
  66.         try_files $uri $uri/ /index.php$is_args$args; 
  67.     } 
  68.     location ~ \.php$ { 
  69.         set $cache_key $request_method://$host$request_uri; 
  70.  
  71.         set $cache_bypass "1"; 
  72.         if ($arg_degradation = "on") { 
  73.             set $cache_bypass "0"; 
  74.         } 
  75.         try_files $uri =404
  76.         include fastcgi.conf; 
  77.         fastcgi_pass php; 
  78.         fastcgi_intercept_errors on; 
  79.         fastcgi_next_upstream error timeout; 
  80.         fastcgi_cache degradation; 
  81.         fastcgi_cache_lock on; 
  82.         fastcgi_cache_lock_timeout 1s; 
  83.         fastcgi_cache_valid 200 301 302 10h; 
  84.         fastcgi_cache_min_uses 10; 
  85.         fastcgi_cache_use_stale error 
  86.                                 timeout 
  87.                                 invalid_header 
  88.                                 updating 
  89.                                 http_500 
  90.                                 http_503; 
  91.         fastcgi_cache_key $cache_key; 
  92.         fastcgi_cache_bypass $cache_bypass; 
  93.         add_header X-Cache-Status $upstream_cache_status; 
  94.         add_header X-Response-Time $upstream_response_time; 
  95.     } 
  96.     location @degradation { 
  97.         content_by_lua ' 
  98.             if ngx.var.arg_degradation then 
  99.                 return ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR) 
  100.             end 
  101.             local res = ngx.location.capture( 
  102.                 ngx.var.request_uri, {args = "degradation=on"
  103.             ) 
  104.             ngx.status = res.status 
  105.             for name, value in pairs(res.header) do 
  106.                 ngx.header[name] = value 
  107.             end 
  108.             ngx.print(res.body) 
  109.             incr_fault_num() 
  110.         '; 
  111.     } 

說明:實際上真實案例中緩存鍵名的獲取邏輯有點復雜,鑒于篇幅所限一切從簡。

當系統正常時,運行于動態模式,數據通過PHP-FPM渲染;當系統異常時,全局緩存被激活,運行于靜態模式,數據通過緩存渲染。通過測試發現,系統在從正常切換到異常時,因為舍棄了PHP-FPM,所以RPS從一千躍升到一萬。這讓我想起兒時看圣斗士的情景:每當不死鳥一輝被敵人擊倒后,他總能重新站起來,并爆發出更大的能量。

此外需要說明的是:在發生故障的時候,如果出現大量緩存過期的情況,那么由于涉及到緩存的重建,所以依然會和PHP-FPM發生交互行為,這可能會影響性能,此時沒有特別好的解決辦法,如果Nginx版本夠的話,可以考慮激活fastcgi_cache_revalidate,如此一來,PHP-FPM一旦判斷系統處于異常情況,那么可以直接返回304實現緩存續期。

通過FastCGI Cache實現服務降級,這是一個***的方案么?非也!它甚至有些丑陋,比如說多臺服務器時,會導致大量冗余的緩存,此外磁盤IO也需要注意。雖然這不是一個***的方案,但是它簡單,正符合我解決棘手問題時的慣用打法:先用一個土鱉一點的方案緩解問題,再用一個***的方案解決問題。稍后我會考慮使用Memcached,加上一致性哈希來替換FastCGI Cache,實現一個相對***的服務降級方案。

責任編輯:黃丹 來源: 火丁筆記
相關推薦

2013-04-25 10:01:35

Nginx

2025-04-17 02:00:00

2025-06-09 07:46:44

服務降級高并發

2024-11-29 16:02:17

2018-08-01 14:20:11

微服務架構人工智能

2025-03-26 00:58:14

2021-03-16 08:31:59

微服務Sentinel雪崩效應

2017-11-16 15:45:25

服務降級熔斷

2017-07-03 09:50:07

Spring Clou微服務架構

2016-12-19 11:33:26

2023-05-05 18:38:33

多級緩存Caffeine開發

2023-02-27 13:41:04

apt-get軟件包

2023-08-03 08:52:10

緩存數據逐出數據

2012-09-25 11:47:48

FacebookCache服務器

2025-04-03 10:04:53

服務降級分布式系統系統

2024-01-30 18:10:25

2023-06-20 08:10:00

2014-11-04 10:34:27

JavaCache

2022-10-26 15:22:31

React組件User組件

2024-05-17 12:48:58

點贊
收藏

51CTO技術棧公眾號

天堂v在线观看| 日本一二三区在线| 久久免费看视频| 日韩av高清在线观看| 久久精品视频va| 国产精品成人免费一区久久羞羞| 欧美a级在线观看| 国产精品午夜在线观看| 精品久久久久久亚洲| 黄色一级片在线| 思热99re视热频这里只精品| 欧美吞精做爰啪啪高潮| 日本大胆人体视频| 男人天堂资源在线| 国产综合色在线视频区| 98精品国产高清在线xxxx天堂| 国产伦精品一区二区三区视频女| 亚洲91网站| 色呦呦一区二区三区| 国产高潮呻吟久久久| 特级丰满少妇一级aaaa爱毛片| 性xx色xx综合久久久xx| 色偷偷av亚洲男人的天堂| 亚洲少妇一区二区三区| a成人v在线| 欧美视频免费在线| 路边理发店露脸熟妇泻火| 黄色软件在线| 99久久精品国产网站| 91久久久国产精品| 欧美精品一二三四区| 狠狠综合久久| 欧美成人免费大片| youjizz亚洲女人| 亚洲国产精品嫩草影院久久av| 日韩一级完整毛片| 亚洲xxx在线观看| 日韩欧美一区二区三区免费观看| 香蕉久久一区二区不卡无毒影院| 手机成人av在线| av影片在线看| 91一区一区三区| 国产精品伊人日日| 亚洲av永久纯肉无码精品动漫| 久久99精品国产麻豆婷婷| 欧美在线一级视频| 青青国产在线观看| 亚洲美女少妇无套啪啪呻吟| 免费99精品国产自在在线| 手机免费观看av| 成人一区不卡| 色偷偷噜噜噜亚洲男人的天堂| wwwww黄色| 久久国产亚洲| www.日韩.com| av最新在线观看| 偷偷www综合久久久久久久| 最近2019中文字幕一页二页| 人成免费在线视频| 午夜久久免费观看| 精品中文字幕在线| 久久久久无码国产精品不卡| 精品盗摄一区二区三区| 中文字幕在线看视频国产欧美| 日本黄色片在线播放| 在线观看国产成人| 免费看欧美女人艹b| 国产精品久久久久一区二区 | www.精品视频| 国产成人啪午夜精品网站男同| 成人综合av网| 香蕉视频黄色片| 国产欧美日韩精品一区| 一区不卡字幕| 亚洲婷婷噜噜| 懂色av一区二区三区| 人妻无码视频一区二区三区| 91成人在线| 欧美一卡二卡三卡四卡| 国产精品久久久久久在线观看| 婷婷亚洲成人| 色综合影院在线| 韩剧1988免费观看全集| 在线视频日韩一区| 一级欧美视频| 亚洲国产91色在线| 阿v天堂2014| 国产精品porn| 国产精品第100页| 国产高清免费av| 99久久精品国产精品久久| 日本三级中国三级99人妇网站| 日本成人网址| 午夜成人免费视频| 免费一级特黄录像| 伊人精品综合| 中文字幕日韩视频| 国产一级一片免费播放| 石原莉奈在线亚洲三区| 成人在线精品视频| 日韩亚洲视频在线观看| 亚洲人午夜精品天堂一二香蕉| 欧美精品自拍视频| 日韩一级视频| 日韩国产精品一区| 少妇久久久久久被弄高潮| 国产亚洲毛片在线| 97久久人人超碰caoprom欧美| 深夜福利在线观看直播| 亚洲三级久久久| 成人性生生活性生交12| 精品久久ai| 欧美大尺度激情区在线播放| 久久国产乱子伦精品| 福利一区二区在线观看| 一区二区成人国产精品 | 国产精品色婷婷视频| 国内爆初菊对白视频| 中文字幕亚洲一区二区av在线| 欧美s码亚洲码精品m码| 538任你躁精品视频网免费| 日韩中文字幕在线观看| 香蕉影院在线观看| 成人午夜激情影院| 欧美日韩视频免费在线观看| 亚洲成人av观看| 亚洲第一色在线| 九九视频在线观看| 韩国av一区二区三区在线观看| 日韩高清dvd| 中文字幕乱码在线播放| 日韩欧美国产一区二区三区| 九九热久久免费视频| 久久精品五月| 国产麻豆综合| 国产欧美日韩视频一区二区三区| 欧美性videos| 欧美性猛交一区二区三区精品| free性中国hd国语露脸| 一区在线观看| 国产精品乱码| 97蜜桃久久| 亚洲第一区在线观看| 日本a在线观看| 成人丝袜18视频在线观看| 国产 国语对白 露脸 | 国产超碰91| 欧美人与禽猛交乱配| 欧美一区二区三区免费大片 | 亚洲伊人网站| 久久精品中文字幕一区二区三区| 高端美女服务在线视频播放| 亚洲精品福利在线观看| 国产精品午夜影院| 久久久久久久久久美女| 91视频免费版污| 日韩精品欧美| 91色精品视频在线| 欧美家庭影院| 日韩精品免费在线视频| 无码人妻丰满熟妇奶水区码| 国产欧美一区在线| 国产精品v日韩精品v在线观看| 999精品色在线播放| 国产日本欧美一区| 制服丝袜中文字幕在线| 欧美变态凌虐bdsm| 五月婷婷亚洲综合| 欧美国产综合一区二区| 色婷婷激情视频| 欧美视频不卡| 久久精品美女| 国产香蕉久久| 欧美另类精品xxxx孕妇| 免费观看国产精品| 色老汉一区二区三区| 国产午夜精品福利视频| 国产一区二区美女诱惑| 日本午夜激情视频| 成人在线免费观看视频| 96sao精品视频在线观看| 国产精品yjizz视频网| 亚洲视频欧洲视频| 国产成人精品一区二三区四区五区| 亚洲一区免费观看| 无码 人妻 在线 视频| 韩国成人在线视频| av动漫在线看| 亚洲无中文字幕| 久久亚洲国产精品日日av夜夜| 国模私拍国内精品国内av| 九九热99久久久国产盗摄| 亚洲av毛片成人精品| 欧美日韩一级视频| 国产第一页在线播放| 国产精品热久久久久夜色精品三区| 不卡的一区二区| 丝袜美腿亚洲综合| 91.com在线| 不卡一区综合视频| 精品伦理一区二区三区| 日韩在线电影| 国产成人av在线播放| 青草在线视频| 久久久国产一区二区| 欧美精品少妇| 亚洲精品在线观看视频| 91无套直看片红桃| 一本一本大道香蕉久在线精品 | 欧美精品一区二区三区久久久竹菊| 看欧美日韩国产| 97久久综合区小说区图片区| 国产精品一区久久久| 忘忧草在线影院两性视频| 久久中文字幕视频| 福利视频在线导航| 精品亚洲一区二区三区| 国内精品偷拍视频| 欧美伦理视频网站| av首页在线观看| 精品国产91久久久久久| 久久综合激情网| 亚洲日本在线看| 四虎国产成人精品免费一女五男| 久久欧美一区二区| 99久久人妻精品免费二区| 国产精品2024| 天天操精品视频| 麻豆国产欧美一区二区三区| 久久久免费视频网站| 亚洲大黄网站| 日本香蕉视频在线观看| 久久久久久久久久久9不雅视频| 日韩福利视频| 精品国产91乱码一区二区三区四区| 精品国产一区二区三区免费| xxxx日韩| 国产日韩二区| 青青操综合网| 欧美乱偷一区二区三区在线| 日韩动漫一区| 久久精品日产第一区二区三区| 久久中文资源| 狠狠综合久久av| 奇米影视777在线欧美电影观看 | 色诱av手机版| 国产成人av电影在线| 国产麻豆剧传媒精品国产| 国产成人av一区二区三区在线 | 色一区在线观看| 国产精品视频一区在线观看| 午夜视频在线观看一区二区 | 欧美人与性禽动交精品| 奇米狠狠一区二区三区| 日韩av电影免费在线观看| blacked蜜桃精品一区| 日韩精品久久一区| 日韩一级毛片| 天堂а√在线中文在线| 合欧美一区二区三区| 成人黄色av片| 日日摸夜夜添夜夜添亚洲女人| 三级a在线观看| 精品在线一区二区三区| 色综合久久久无码中文字幕波多| 成人一区二区三区| 中文字幕国产综合| 国产精品久久综合| 久久久无码精品亚洲国产| 午夜精品福利一区二区三区av | 亚洲欧洲高清| 国产精品看片资源| 不卡精品视频| 精品福利影视| 青青草91久久久久久久久| 特级黄色录像片| 五月天丁香视频| 欧美一区二区三区不卡| 亚洲国产精品视频在线| 精品香蕉在线观看视频一| a级在线观看视频| 国产成人一二片| 欧美日韩在线一区二区三区| 青青草国产成人a∨下载安卓| 中文字幕免费高| 国产精品婷婷| www.污网站| 91免费观看在线| 人人澡人人澡人人看| 婷婷综合在线观看| 中文字幕在线日亚洲9| 欧美精品一区二区三区很污很色的| 久草视频视频在线播放| 久久在线精品视频| 涩涩视频在线播放| 亚洲一区中文字幕在线观看| 性人久久久久| 青青视频免费在线观看| 视频精品一区二区| 亚洲精品激情视频| 国产精品视频观看| 九九精品免费视频| 日韩一区二区视频在线观看| 欧洲毛片在线| 欧美夫妻性生活视频| 97人人做人人爽香蕉精品| 成人免费观看网站| 婷婷伊人综合| 久久久久久香蕉| 成人丝袜18视频在线观看| 二区三区四区视频| 色狠狠av一区二区三区| 亚洲第一视频在线| 久久韩剧网电视剧| 国产精品久久久久av电视剧| 国产日韩精品推荐| 午夜日韩视频| 无套白嫩进入乌克兰美女| 国产人成一区二区三区影院| 女人十八岁毛片| 精品久久久久99| 大地资源网3页在线观看| 国产精品久久久久久久久男| 亚洲免费毛片| 欧美久久久久久久久久久久久 | 成人h片在线播放免费网站| 久久爱www成人| 男人的天堂狠狠干| 成人av免费观看| 久久精品一区二区三| 91精品婷婷国产综合久久| 91福利在线视频| 国产精品久久久久久久久久久久久| 麻豆一区二区| 欧美国产亚洲一区| www.欧美日韩国产在线| 久久机热这里只有精品| 欧美大黄免费观看| 18+激情视频在线| 91精品在线看| 亚洲国产一区二区在线观看| 尤物网站在线看| 亚洲少妇最新在线视频| av网站在线免费看| 欧美情侣性视频| www.成人网| 成人在线免费在线观看| 91一区二区三区在线观看| 日本视频www| 精品亚洲一区二区三区四区五区| 超碰在线公开| 欧美黑人3p| 日韩国产一区二| 青青草华人在线视频| 欧美日本乱大交xxxxx| 毛片免费不卡| 99久久综合狠狠综合久久止 | 久久久免费观看| 欧美一级全黄| 国产xxxxx视频| 一区在线中文字幕| www.av网站| 97**国产露脸精品国产| 久久综合欧美| 日本在线播放一区二区| 一区二区三区日韩欧美| 黄片毛片在线看| 欧美在线影院在线视频| 精品国产乱码久久久久久蜜坠欲下| 国产aaaaa毛片| 亚洲男人的天堂av| 亚洲欧美丝袜中文综合| 国产精品成人免费电影| 亚洲成人日韩| 中文字幕一区三区久久女搜查官| 一本色道久久综合亚洲精品按摩| 午夜小视频在线| 国产超碰91| 奇米888四色在线精品| 午夜国产福利一区二区| 日韩精品欧美激情| 性欧美video另类hd尤物| 欧美精品久久久久久久自慰| 久久精品人人爽人人爽| av免费观看在线| 日韩美女免费观看| 自由日本语亚洲人高潮| 国产美女喷水视频| 欧美精品日韩一区| 麻豆蜜桃在线观看| 在线成人性视频| 99久久精品国产网站| 国产精品特级毛片一区二区三区| 久久久久久久999| 成人三级视频| 西西大胆午夜视频| 9191成人精品久久| 亚洲欧美韩国| 蜜臀精品一区二区| 国产精品美女久久久久久久|