精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

jlzzjlzzjlzz亚洲人| 粉嫩精品久久99综合一区| 9lporm自拍视频区在线| 91美女片黄在线| 7777精品视频| 中文字幕av久久爽一区| 日本精品视频| 精品久久久久久久久久久| 日韩欧美一区二区三区四区五区 | 天天色图综合网| 热re99久久精品国99热蜜月| 国产探花精品一区二区| 午夜综合激情| 久久久久999| 网站免费在线观看| 伊人国产精品| 色婷婷精品久久二区二区蜜臀av| 亚洲成人动漫在线| 国内在线免费高清视频| 国产精品911| 国产精品久久久久久五月尺| 日本免费在线播放| 日韩在线二区| 亚洲精品视频在线播放| 可以看的av网址| 国语自产精品视频在线看抢先版结局| 亚洲成人自拍网| 国产91av视频在线观看| 男女污污视频在线观看| 成人综合在线观看| 亚洲一区二区久久久久久| 中文无码精品一区二区三区 | 黑森林福利视频导航| 特级毛片在线| 亚洲欧洲av一区二区三区久久| 久久久综合香蕉尹人综合网 | 国产丝袜一区视频在线观看| 中文字幕无人区二| 精品成人18| 欧美剧在线免费观看网站| 欧美私人情侣网站| 新版的欧美在线视频| 亚洲电影一区二区三区| 国产精品视频二| av免费在线免费观看| 国产精品久久三区| 亚洲一二三区在线| av在线电影网| 亚洲国产精品t66y| 色涩成人影视在线播放| 久蕉在线视频| 国产网站一区二区三区| 欧美一卡2卡3卡4卡无卡免费观看水多多| 国产综合视频在线| 风间由美性色一区二区三区| 99国产高清| 亚洲国产成人在线观看| 国产高清在线观看免费不卡| 亚洲精品欧美一区二区三区| 国产成人a人亚洲精品无码| 国产乱子伦视频一区二区三区 | 日本在线中文字幕一区| 亚洲国产精品va在线看黑人| 欧美肉大捧一进一出免费视频| 久草精品视频| 亚洲人成电影网| 99久久久无码国产精品衣服| 欧美日韩精品一区二区视频| 日韩在线视频观看正片免费网站| 香蕉久久久久久久| 欧美黄色一级视频| 久久乐国产精品| 黄色在线免费观看| 青青草91视频| 91午夜理伦私人影院| 亚洲AV无码一区二区三区少妇| 成人污污视频在线观看| 久久精品aaaaaa毛片| 韩日视频在线| 亚洲精品一卡二卡| 黄色影院一级片| 97精品国产综合久久久动漫日韩 | 免费黄色在线视频网站| 国产精品欧美精品| 国产a级黄色大片| 日韩欧美精品一区二区三区| 欧美亚洲综合网| 亚洲制服在线观看| 首页亚洲中字| 日韩中文娱乐网| 久久中文字幕无码| 日韩精品亚洲专区| 5g国产欧美日韩视频| 韩国av永久免费| 欧美激情中文字幕一区二区| 亚洲天堂第一区| 中文在线а√在线8| 欧美精品一二三| 亚洲第一黄色网址| 香蕉久久网站| 亲爱的老师9免费观看全集电视剧| 国产又黄又爽视频| 91丨porny丨国产入口| 中文字幕乱码一区二区三区| 国产高清中文字幕在线| 欧美色大人视频| av免费观看不卡| 香蕉久久网站| 国产精品久久久久久中文字| 丰满熟妇人妻中文字幕| 国产精品久久久久久久久免费樱桃 | 欧美大片aaaa| 人人做人人澡人人爽欧美| 国产特级aaaaaa大片| 国产日韩成人精品| 男人日女人bb视频| 亚洲一区二区三区免费| 亚洲视频视频在线| 日本三级网站在线观看| 久久黄色级2电影| 欧美另类视频在线| 美洲精品一卡2卡三卡4卡四卡| 欧美三电影在线| 成人免费无码大片a毛片| 女人天堂亚洲aⅴ在线观看| 国产精品亚洲欧美导航| 欧美日韩国产亚洲沙发| 午夜精品在线视频一区| 91亚洲一区二区| 婷婷丁香综合| 国产精品高清免费在线观看| 亚洲av成人精品毛片| 一区二区三区欧美在线观看| 日本精品一区在线| 999成人精品视频线3| 国产精品黄色av| 国产中文字幕在线看| 欧美日韩国产专区| 国产xxxxxxxxx| 亚洲日本激情| 精品视频免费观看| 爱啪啪综合导航| 欧美精品一区二区三区久久久| www.色小姐com| 国产精品一区二区久久不卡| av磁力番号网| 国产一区二区视频在线看| 日韩视频第一页| 97成人在线观看| 国产精品久久二区二区| 亚洲美女爱爱视频| 在线免费观看日本欧美爱情大片| 91欧美激情另类亚洲| 嫩草香蕉在线91一二三区| 欧美日韩国产高清一区二区| 国产又黄又粗的视频| 奇米精品一区二区三区在线观看 | 国产婷婷在线观看| 99精品热视频只有精品10| 麻豆蜜桃91| 成人看片网页| 日韩中文字幕国产| 国产青青草视频| 亚洲一区二区三区免费视频| 第一页在线视频| 亚洲性感美女99在线| 精品国产综合区久久久久久| 正在播放日韩精品| 亚洲香蕉在线观看| 97超视频在线观看| 亚洲成人中文在线| a视频免费观看| 人人爽香蕉精品| 国产资源第一页| 全球av集中精品导航福利| 日韩美女免费线视频| 最新国产在线观看| 日韩精品最新网址| 免费av网站在线| 国产精品久久影院| 免费观看一区二区三区| 美女尤物久久精品| 最新av在线免费观看| 国产精品白浆| 国产精品一区二区三区免费视频 | 亚洲国产精品自拍| 人人妻人人澡人人爽| 国产大陆精品国产| 激情六月丁香婷婷| 欧美一区高清| 欧美日韩国产精品一卡| 久久9999免费视频| 日本欧美一级片| 在线观看av免费| 亚洲人成在线免费观看| 国产片在线播放| 一本大道综合伊人精品热热 | 91精品一区国产高清在线gif| 国产激情一区二区三区在线观看| 日韩在线观看不卡| 久久免费少妇高潮久久精品99| 爱爱爱免费视频在线观看| 精品国产一区二区亚洲人成毛片| 亚洲男人天堂网址| 亚洲福利视频一区二区| 成人欧美一区二区三区黑人一| av电影在线观看一区| 天天色天天综合网| 日韩中文字幕区一区有砖一区| 国产高清www| 国产精品成人一区二区不卡| 欧美高清性xxxxhd| av不卡一区| 91视频国产高清| 草莓视频成人appios| 久久久久久亚洲精品| 日本在线观看免费| 亚洲色图美腿丝袜| 日本高清视频在线| 日韩欧美一二三四区| 中文字幕乱码无码人妻系列蜜桃| 欧美日韩国产激情| 久久亚洲精品大全| 亚洲精品免费在线观看| 日韩一级av毛片| 久久婷婷色综合| 在线天堂www在线国语对白| 国产乱色国产精品免费视频| 日本免费色视频| 麻豆91小视频| 一级特黄性色生活片| 久久激情视频| 99蜜桃臀久久久欧美精品网站| 日韩视频在线一区二区三区 | 亚洲精品一区在线观看| 国产丝袜在线视频| 91精品国产欧美日韩| 97超碰国产在线| 56国语精品自产拍在线观看| 最新黄色网址在线观看| 欧美午夜精品久久久久久超碰| 亚洲天堂视频网站| 欧美性极品xxxx做受| 99热国产在线观看| 精品欧美aⅴ在线网站| 欧美不卡视频在线观看| 精品成人在线视频| 国产超碰人人爽人人做人人爱| 精品国产91久久久| 中文字幕在线看人| 欧美性xxxxx极品少妇| 亚洲精品国产精品乱码视色| 欧美视频一区在线观看| 亚洲天堂一二三| 欧美精品 国产精品| jizz国产视频| 亚洲国产小视频在线观看| 五月婷中文字幕| 亚洲欧美在线免费观看| yjizz视频网站在线播放| 色婷婷av一区二区三区久久| 国产午夜精品久久久久免费视| 久久影院资源网| 欧美日韩在线视频免费观看| 国内伊人久久久久久网站视频 | 日韩欧美亚洲成人| 国产偷人爽久久久久久老妇app| 欧美日韩综合在线免费观看| 国产又黄又大又粗的视频| 精品欧美乱码久久久久久1区2区| 视频一区 中文字幕| 亚洲男人的天堂在线| 高清在线观看av| 久久91精品国产91久久久| heyzo高清在线| 国产国产精品人在线视| av在线精品| 国产欧美日本在线| 国产精品免费不| 黄色高清视频网站| 亚洲九九精品| 91制片厂毛片| 成人免费视频一区| 少妇精品无码一区二区免费视频| 亚洲人成网站影音先锋播放| 日韩成人高清视频| 欧美丝袜丝交足nylons| 亚洲精品久久久久久久久久久久久久 | 中日韩av在线播放| www.av亚洲| 国产又色又爽又高潮免费| 亚洲永久精品国产| 真实新婚偷拍xxxxx| 精品国产不卡一区二区三区| 触手亚洲一区二区三区| 久久艹在线视频| 韩国久久久久久| 99在线视频播放| 日韩一区二区三区免费播放| www.日本少妇| 寂寞少妇一区二区三区| 久久人人爽人人人人片| 综合电影一区二区三区| 亚洲国产成人精品女人久久| 日韩手机在线导航| av国产在线观看| 国产91|九色| 亚洲无线观看| 中文字幕色一区二区| 免费精品视频| 少妇熟女视频一区二区三区 | 国产91在线观看| 人与动物性xxxx| 色悠悠亚洲一区二区| 亚洲国产精品一| 久久精品影视伊人网| 天然素人一区二区视频| 久久久久久久久久久久久久久久av| 亚洲欧美网站在线观看| 国产精品视频黄色| 2021久久国产精品不只是精品| 久久久久成人精品无码| 777欧美精品| 一区二区三区视频网站| 国产成人小视频在线观看| 久久精品论坛| 99在线观看视频免费| 国产精品66部| 男人操女人的视频网站| 欧美一区二区三区色| 日本免费在线视频| 国产日韩精品入口| 欧美一级精品| 一区二区在线播放视频| 久久精品免费在线观看| jizz国产在线观看| 国产偷亚洲偷欧美偷精品| 最新欧美色图| 欧美极品一区二区| 日韩成人午夜电影| 男人操女人动态图| 色噜噜狠狠一区二区三区果冻| 午夜av免费观看| 国产91网红主播在线观看| 中文字幕伦av一区二区邻居| 成人在线免费在线观看| 91在线你懂得| 国产伦精品一区二区三区视频我| 亚洲精品成人久久电影| sese综合| 香蕉久久免费影视| 日本不卡免费在线视频| 粉嫩精品久久99综合一区| 欧美日韩国产美女| 羞羞的视频在线看| 黄色国产精品一区二区三区| 国产亚洲毛片在线| 男人舔女人下部高潮全视频 | 欧美国产日韩另类 | 国产精品999视频| 91丝袜国产在线播放| 国产视频1区2区| 中文字幕精品—区二区| 国产一区二区三区视频在线| 2019日韩中文字幕mv| 91亚洲资源网| 成人免费一级片| 精品国产一区二区三区久久久狼| 国产欧美视频在线| 日本xxxxxxxxxx75| 国产色综合久久| 国产麻豆免费视频| 午夜精品福利视频| 国产精品羞羞答答在线观看| 日本中文字幕精品—区二区| 亚洲乱码中文字幕综合| 日本免费一区视频| 国产精品久久久久久av福利| 911久久香蕉国产线看观看| 国产a级黄色片| 欧美综合色免费| 色综合999| 日本一区二区三区免费看| 国产麻豆一精品一av一免费 | 久久精品女人的天堂av| 免费成人在线观看视频| 日本一区二区不卡在线| 最新日韩中文字幕| 农村少妇一区二区三区四区五区| 无码内射中文字幕岛国片| 亚洲精品乱码久久久久久久久 | 高清精品视频| 久久久久久久久久久久91| 亚洲图片有声小说| 99视频在线观看地址| 精品国产乱码久久久久软件| 精品一区二区在线观看| 制服.丝袜.亚洲.中文.综合懂色| www.日韩av.com| 国产一区二区三区四区大秀|