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

我們一起聊聊前端接口容災

開發 前端
總結下,優點包括不入侵業務代碼,不影響現有業務,隨上隨用,盡可能避免前端純白屏的場景,成本低。劣勢包括使用局限,不適合對數據實效性比較高的業務場景,不支持 IE 瀏覽器。

開篇

你說,萬一接口掛了會怎么樣?

還能咋樣,白屏唄。

有沒有不白屏的方案?

有啊,還挺簡單的。

容我細細細細分析。

原因就是接口掛了,拿不到數據了。那把數據儲存起來就可以解決問題。

思考

存哪里?

第一時間反應瀏覽器本地存儲,想起了四兄弟。

選型對比

特性

cookie

localStorage

sessionStorage

indexDB

數據生命周期

服務器或者客戶端都可以設置、有過期時間

一直存在

關閉頁面就清空

一直存在

數據儲存大小

4KB

5MB

5MB

動態,很大

大于250MB

與服務器通信

每次都帶在header中

不帶

不帶

不帶

兼容性

都支持

都支持

都支持

IE不支持,其他主流都支持

考慮到需要存儲的數據量,5MB 一定不夠的,所以選擇了 IndexDB。

考慮新用戶或者長時間未訪問老用戶,會取不到緩存數據與陳舊的數據。

因此準備上云,用阿里云存儲,用 CDN 來保障。

總結下:線上 CDN、線下 IndexDB。

整體方案

整體流程圖

圖片圖片

CDN

先講講線上 CDN。

通常情況下可以讓后端支撐,本質就是更新策略問題,這里不細說。

我們講講另外一種方案,單獨啟個 Node 服務更新 CDN 數據。

流程圖

圖片圖片

劫持邏輯

劫持所有接口,判斷接口狀態與緩存標識。從而進行更新數據、獲取數據、緩存策略三種操作

通過配置白名單來控制接口存與取

axios.interceptors.response.use(
      async (resp) => {
        const { config } = resp
        const { url } = config
        // 是否有緩存tag,用于更新CDN數據。目前是定時服務在跑,訪問頁面帶上tag
        if (this.hasCdnTag() && this.isWhiteApi(url)) {
          this.updateCDN(config, resp)
        }
        return resp;
      },
      async (err) => {
        const { config } = err
        const { url } = config
        // 是否命中緩存策略
        if (this.isWhiteApi(url) && this.useCache()) {
          return this.fetchCDN(config).then(res => {
            pushLog(`cdn緩存數據已命中,請處理`, SentryTypeEnum.error)
            return res
          }).catch(()=>{
           pushLog(`cdn緩存數據未同步,請處理`, SentryTypeEnum.error)
          })
        }
      }
    );

緩存策略

累計接口異常發生 maxCount 次,打開緩存開關,expiresSeconds 秒后關閉。

緩存開關用避免網絡波動導致命中緩存,設置了閥值。

/*
* 緩存策略
*/
useCache = () => {
  if (this.expiresStamp > +new Date()) {
    const d = new Date(this.expiresStamp)
    console.warn(`
    ---------------------------------------
    ---------------------------------------
    啟用緩存中
    關閉時間:${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}
    ---------------------------------------
    ---------------------------------------
    `)
    return true
  }
  this.errorCount += 1
  localStorage.setItem(CACHE_ERROR_COUNT_KEY, `${this.errorCount}`)
  if (this.errorCount > this.maxCount) {
    this.expiresStamp = +new Date() + this.expiresSeconds * 1000
    this.errorCount = 0
    localStorage.setItem(CACHE_EXPIRES_KEY, `${this.expiresStamp}`)
    localStorage.removeItem(CACHE_ERROR_COUNT_KEY)
    return true
  }
  return false
}

唯一標識

根據 method、url、data 三者來標識接口,保證接口的唯一性

帶動態標識,譬如時間戳等可以手動過濾

/**
 * 生成接口唯一鍵值
*/
generateCacheKey = (config) => {
  // 請求方式,參數,請求地址,
  const { method, url, data, params } = config;
  let rawData = ''
  if (method === 'get') {
    rawData = params
  }
  if (method === 'post') {
    rawData = JSON.parse(data)
  }
  // 返回拼接key
  return `${encodeURIComponent([method, url, stringify(rawData)].join('_'))}.json`;
};

更新數據

/**
 * 更新cdn緩存數據
*/
updateCDN = (config, data) => {
  const fileName = this.generateCacheKey(config)
  const cdnUrl = `${this.prefix}/${fileName}`
  axios.post(`${this.nodeDomain}/cdn/update`, {
    cdnUrl,
    data
  })
}

Node定時任務

構建定時任務,用 puppeteer 去訪問、帶上緩存標識,去更新 CDN 數據

import schedule from 'node-schedule';

const scheduleJob = {};

export const xxxJob = (ctx) => {
  const { xxx } = ctx.config;
  ctx.logger.info(xxx, 'xxx');
  const { key, url, rule } = xxx;
  if (scheduleJob[key]) {
    scheduleJob[key].cancel();
  }
  scheduleJob[key] = schedule.scheduleJob(rule, async () => {
    ctx.logger.info(url, new Date());
    await browserIndex(ctx, url);
  });
};

export const browserIndex = async (ctx, domain) => {
  ctx.logger.info('browser --start', domain);
  if (!domain) {
    ctx.logger.error('domain為空');
    return false;
  }
  const browser = await puppeteer.launch({
    args: [
      '--use-gl=egl',
      '--disable-gpu',
      '--no-sandbox',
      '--disable-setuid-sandbox',
    ],
    executablePath: process.env.CHROMIUM_PATH,
    headless: true,
    timeout: 0,
  });
  const page = await browser.newPage();
  await page.goto(`${domain}?${URL_CACHE_KEY}`);
  await sleep(10000);
  // 訪問首頁所有查詢接口
  const list = await page.$$('.po-tabs__item');
  if (list?.length) {
    for (let i = 0; i < list.length; i++) {
      await list[i].click();
    }
  }
  await browser.close();
  ctx.logger.info('browser --finish', domain);
  return true;
};

效果

手動 block 整個 domain,整個頁面正常展示

圖片圖片

IndexDB

線上有 CDN 保證了,線下就輪到 IndexDB 了,基于業務簡單的增刪改查,選用 localForage 三方庫足矣。

axios.interceptors.response.use(
      async (resp) => {
        const { config } = resp
        const { url } = config
        // 是否有緩存tag,用于更新CDN數據。目前是定時服務在跑,訪問頁面帶上tag
        if (this.hasCdnTag() && this.isWhiteApi(url)) {
          this.updateCDN(config, resp)
        }
        if(this.isIndexDBWhiteApi(url)){
          this.updateIndexDB(config, resp)
        }
        return resp;
      },
      async (err) => {
        const { config } = err
        const { url } = config
        // 是否命中緩存策略
        if (this.isWhiteApi(url) && this.useCache()) {
          return this.fetchCDN(config).then(res => {
            pushLog(`cdn緩存數據已命中,請處理`, SentryTypeEnum.error)
            return res
          }).catch(()=>{
           pushLog(`cdn緩存數據未同步,請處理`, SentryTypeEnum.error)
           if(this.isIndexDBWhiteApi(url)){
             return this.fetchIndexDB(config).then(res => {
              pushLog(`IndexDB緩存數據已命中,請處理`, SentryTypeEnum.error)
              return res
            }).catch(()=>{
             pushLog(`IndexDB緩存數據未同步,請處理`, SentryTypeEnum.error)
            })
           }
          })
        }
      }
    );

總結

總結下,優點包括不入侵業務代碼,不影響現有業務,隨上隨用,盡可能避免前端純白屏的場景,成本低。劣勢包括使用局限,不適合對數據實效性比較高的業務場景,不支持 IE 瀏覽器。

接口容災我們也是剛弄不久,有許多細節與不足,歡迎溝通交流。

接口容災本意是預防發生接口服務掛了的場景,我們不會很被動。原來是P0的故障,能被它降低為 P2、P3,甚至在某些場景下都不會有用戶反饋。

責任編輯:武曉燕 來源: 政采云技術
相關推薦

2024-11-27 08:47:12

2025-05-26 03:15:00

接口高可用框架

2023-08-10 08:28:46

網絡編程通信

2023-06-30 08:18:51

敏捷開發模式

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2025-03-13 05:00:00

2024-07-26 09:47:28

2022-10-08 00:00:05

SQL機制結構

2022-02-23 08:41:58

NATIPv4IPv6

2022-09-22 08:06:29

計算機平板微信

2024-11-28 09:57:50

C#事件發布器

2021-08-12 07:49:24

mysql

2023-03-26 23:47:32

Go內存模型

2023-07-24 09:41:08

自動駕駛技術交通

2023-07-27 07:46:51

SAFe團隊測試

2023-12-28 09:55:08

隊列數據結構存儲
點贊
收藏

51CTO技術棧公眾號

又色又爽又高潮免费视频国产| 国产精选在线观看91| 欧美一区二区三区观看| 超碰精品在线| 在线精品视频一区二区三四| 久久久一二三四| 西西人体44www大胆无码| 秋霞午夜鲁丝一区二区老狼| 色综合久久久888| 亚洲精品午夜视频| 国内露脸中年夫妇交换精品| 欧美亚洲国产一区在线观看网站| www.av91| 成人在线播放免费观看| 久久久亚洲高清| 成人有码在线视频| 男人天堂视频网| 亚洲国产片色| 欧美大片免费观看在线观看网站推荐| 手机看片日韩av| 秋霞在线一区| 日韩精品一区在线观看| 午夜宅男在线视频| 中国色在线日|韩| 亚洲影院久久精品| 亚洲免费在线精品一区| 欧美婷婷久久五月精品三区| 国产精品2024| 91久久久久久国产精品| 天天爱天天做天天爽| 日韩视频在线一区二区三区 | 亚洲大胆视频| 久久精品成人动漫| 九九九视频在线观看| 奇米影视777在线欧美电影观看 | 欧美性极品xxxx做受| av网站大全免费| 无需播放器的av| 亚洲欧美va天堂人熟伦| 精品国产一区二区三区不卡蜜臂| 欧美久久久久久久久中文字幕| 免费黄色福利视频| 国产伦子伦对白在线播放观看| 亚洲精品免费视频| 性欧美18一19内谢| 免费的黄网站在线观看| 国产精品区一区二区三区| 日韩中文字幕一区| 精品一二三区视频| 国产欧美一二三区| 亚洲欧美久久234| av电影在线观看网址| 国产日韩欧美麻豆| 日韩在线电影一区| 91电影在线播放| 国产精品午夜电影| 亚洲一区二区在线免费观看| 成人免费高清在线播放| 国产精品视频麻豆| 400部精品国偷自产在线观看| 性开放的欧美大片| 亚洲欧美日韩系列| 999一区二区三区| 大桥未久在线视频| 日本道在线观看一区二区| 亚洲色图 在线视频| 日本免费成人| 日韩欧美国产午夜精品| 无码国产69精品久久久久网站 | 日韩三级免费观看| 亚洲少妇一区二区三区| 欧美自拍视频| 在线看国产精品| 永久免费看mv网站入口| 在线观看的日韩av| 欧美在线观看日本一区| 在线视频欧美亚洲| 国产高清在线精品| 久久久久欧美| 日韩毛片久久久| 亚洲中国最大av网站| 国产男女免费视频| 91国内外精品自在线播放| 欧美福利视频一区| 日本少妇毛茸茸| 欧美日韩在线网站| 欧美疯狂性受xxxxx另类| 亚洲午夜18毛片在线看| 蜜桃在线一区二区三区| 国产精品久久久久久久久久久久冷| 青青视频在线观| 国产精品国产三级国产三级人妇| 日韩精品在线观看av| 午夜无码国产理论在线| 日韩欧美的一区二区| 免费a级黄色片| 欧美91视频| 国产精品成人免费视频| 成人午夜视频一区二区播放| 国产日产精品一区| 国产精品成人久久电影| 欧美激情三区| 日韩精品免费观看| 夫妻性生活毛片| 国产美女一区| 国产91社区| 日本a级在线| 欧美性猛交xxxx乱大交3| 制服下的诱惑暮生| 久久精品播放| 日韩美女免费视频| 成人无码一区二区三区| 亚洲啪啪综合av一区二区三区| 免费观看成人网| 鲁大师精品99久久久| 久久综合电影一区| 中文字幕一区二区人妻| 久久美女艺术照精彩视频福利播放| 91精品国产毛片武则天| 精品久久福利| 国产午夜精品美女视频明星a级| 久一视频在线观看| 国产精品影视天天线| 性欧美大战久久久久久久免费观看| 成人黄色动漫| 精品国产91乱码一区二区三区| 青青操在线播放| 视频在线观看一区二区三区| 精品日韩欧美| 爱啪啪综合导航| 亚洲国产精品va在线| 日本天堂中文字幕| 国内精品久久久久影院一蜜桃| 日韩电影免费观看高清完整| 亚洲美女炮图| 亚洲欧美在线播放| 欧美一二三区视频| 99久久精品久久久久久清纯| www.av毛片| 老司机aⅴ在线精品导航| 久久久久久久久久久国产| 国产 日韩 欧美 综合| 亚洲综合视频在线观看| 日批视频免费看| 红桃视频国产精品| 国产伦精品一区二区三区照片| 在线网址91| 精品久久久久久最新网址| 久久国产在线视频| 不卡一区二区中文字幕| www国产精品内射老熟女| 一区二区三区日本久久久| 18一19gay欧美视频网站| 亚洲区小说区图片区| 日韩欧美在线一区| 日韩欧美黄色网址| 激情小说亚洲一区| 妞干网在线播放| 欧美三级电影在线| 国产成人精品视频在线| 在线播放麻豆| 欧美一卡二卡三卡| 久久久久久久99| 2024国产精品| 欧美三级理论片| 久久久久久久久99精品大| 91亚色免费| 在线男人天堂| 最好看的2019年中文视频| 国产偷拍一区二区| 精品久久久香蕉免费精品视频| 大又大又粗又硬又爽少妇毛片 | 国产免费成人av| а√天堂8资源在线官网| 精品国产乱子伦一区| 黄色片中文字幕| 亚洲色图视频免费播放| 性久久久久久久久久久| 蜜臀久久99精品久久久久久9| 精品一区二区三区毛片| 欧美aaaaaaaa牛牛影院| 国产欧美精品xxxx另类| 男女在线视频| 中文字幕少妇一区二区三区| 国产高清免费观看| 色狠狠色狠狠综合| 久草综合在线视频| 久久久一区二区三区| 欧美性受xxxx黒人xyx性爽| 国产欧美日韩一区二区三区在线| 亚洲 国产 日韩 综合一区| 亚洲日本va| 国产精品999| 国产丝袜在线观看视频| 永久免费精品影视网站| 内射后入在线观看一区| 欧美性猛交xxxx黑人交| 久久精品视频日本| 亚洲国产精品99久久久久久久久| jjzz黄色片| 久久99久久99| 国产亚洲天堂网| 国产一区二区三区四区老人| 亚洲开发第一视频在线播放| 欧美亚洲tv| 痴汉一区二区三区| 亚洲精品三区| 日本午夜精品理论片a级appf发布| 国产原创视频在线观看| 亚洲日韩第一页| 天天插天天干天天操| 欧美一二三四在线| 无码久久精品国产亚洲av影片| 亚洲大型综合色站| 在线免费看av网站| 日本一区二区三区在线观看| 中文字幕在线播放一区| 国产激情视频一区二区在线观看 | 国产91在线亚洲| 欧美gayvideo| 欧美性色黄大片人与善| 久久久久久毛片免费看| 9a蜜桃久久久久久免费| 未满十八勿进黄网站一区不卡| 国产精品pans私拍| 亚洲一区资源| 欧洲美女免费图片一区| 国产免费拔擦拔擦8x高清在线人| 久久69精品久久久久久久电影好 | 亚洲国产sm捆绑调教视频| 国产尤物在线播放| 国产精品不卡在线观看| 一本在线免费视频| 国产欧美日韩亚州综合| 熟女俱乐部一区二区视频在线| 不卡欧美aaaaa| 精品国产一区在线| 99精品在线观看视频| 日韩综合第一页| eeuss国产一区二区三区| 欧美激情 亚洲| 成人在线综合网| 日本道中文字幕| 91网站视频在线观看| 91视频啊啊啊| 久久品道一品道久久精品| 国产美女免费无遮挡| 亚洲国产高清在线观看视频| 日本猛少妇色xxxxx免费网站| 国产精品女人毛片| 视频国产一区二区| 亚洲欧美日韩在线不卡| 男人的天堂久久久| 亚洲夂夂婷婷色拍ww47| 日韩精品成人在线| 日韩欧美一区视频| 糖心vlog精品一区二区| 欧美精品亚洲一区二区在线播放| 国产精品欧美亚洲| 欧美成人女星排名| 午夜福利视频一区二区| 亚洲色图17p| 欧美性天天影视| 久久久久久69| 伊人久久在线| 91美女片黄在线观| 99久热这里只有精品视频免费观看| 国语精品免费视频| 欧美日韩中字| 97在线免费视频观看| 亚洲经典在线| 日韩av手机版| 国产a级毛片一区| 一本色道久久综合亚洲精品图片| 中文字幕乱码一区二区免费| 国产三级国产精品国产国在线观看 | 成人午夜两性视频| 国产美女撒尿一区二区| 欧美亚洲国产免费| 中文字幕免费一区二区| 日韩av片在线看| 久久66热re国产| 国产精品一级黄片| 国产精品福利电影一区二区三区四区 | 天堂av在线免费| 这里只有视频精品| 日本动漫同人动漫在线观看| 日产精品99久久久久久| 一区二区免费| 日韩性感在线| 亚洲理论在线| 肉色超薄丝袜脚交| 91麻豆福利精品推荐| 欧美日韩黄色网| 欧美性xxxxx极品| 国产高潮在线观看| 自拍偷拍免费精品| 中文字幕在线高清| 91精品视频免费看| 欧美激情在线精品一区二区三区| 91精品国产毛片武则天| 日本v片在线高清不卡在线观看| 91在线看www| 蜜桃av免费在线观看| 免费在线观看国产精品| 黄色日韩网站视频| 亚洲国产精品成人综合久久久| 国产精品成人免费| 成人一级免费视频| 亚洲精品不卡在线| 青春草视频在线| 成人av色在线观看| japanese国产精品| 日韩av片在线看| yourporn久久国产精品| 丝袜美腿小色网| 69久久99精品久久久久婷婷| 男男激情在线| 2021国产精品视频| 成人精品动漫一区二区三区| 大桥未久一区二区三区| 精品一区二区免费在线观看| 大又大又粗又硬又爽少妇毛片| 亚洲一区在线观看网站| 亚洲a视频在线| 欧美另类在线播放| 国产剧情一区二区在线观看| 一区二区三区四区免费视频| 日韩精品五月天| 实拍女处破www免费看| 大荫蒂欧美视频另类xxxx| 免费看av毛片| 久久全国免费视频| 懂色av一区二区| 被灌满精子的波多野结衣| 成人午夜视频免费看| 青娱乐av在线| 精品日韩av一区二区| 乱插在线www| 国产富婆一区二区三区| 黄色国产精品| 欧美极品jizzhd欧美仙踪林| 亚洲成人在线免费| 天天操天天干天天干| 欧美亚洲另类在线| 怕怕欧美视频免费大全| 虎白女粉嫩尤物福利视频| 久久久精品欧美丰满| 波多野结衣影片| 中文字幕日韩精品在线| 91精品网站在线观看| 日韩第一页在线观看| 国产精品亚洲一区二区三区妖精| 少妇影院在线观看| 日韩欧美一卡二卡| av2020不卡| 美女一区视频| 麻豆久久久久久| 久久精品黄色片| 亚洲精品一线二线三线| 热色播在线视频| 日韩av图片| 日本午夜一本久久久综合| 成年人二级毛片| 精品乱人伦小说| 日韩大片欧美大片| 一区在线电影| 成人小视频在线| 精品成人无码久久久久久| 中文字幕最新精品| 高潮久久久久久久久久久久久久| 99精品视频在线看| 国产精品理伦片| 欧美亚洲精品在线观看| 国产成人拍精品视频午夜网站 | 成人黄页网站视频| 久久久99精品视频| 26uuu色噜噜精品一区二区| 中文在线观看免费高清| 超碰97人人做人人爱少妇| 欧美色资源站| 亚洲免费成人在线视频| 精品久久中文字幕久久av| 国产精品一级伦理| 成人91视频| 日韩电影在线观看网站| 永久免费看黄网站| 亚洲日本欧美中文幕| 深夜福利一区| www.日日操| 亚洲国产精品自拍| 欧美一区二区三区在线观看免费| 国产乱码精品一区二区三区不卡| 麻豆精品在线视频| 欧美一级片免费在线观看| 久久精品国亚洲| 国产中文精品久高清在线不| 潘金莲一级淫片aaaaaaa| 色播五月激情综合网| 免费男女羞羞的视频网站在线观看|