自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

改了配置,不想重啟,怎么整?

開(kāi)發(fā) 開(kāi)發(fā)工具 前端
不重啟服務(wù),重新載入配置的常見(jiàn)方式有3這么幾種,不難但很使用,花1分鐘和大家說(shuō)一說(shuō)。

有個(gè)水友在知識(shí)星球提問(wèn):沈老師,我們有個(gè)連接超時(shí)的配置,平時(shí)是300毫秒,雙11壓力上來(lái)了,數(shù)據(jù)庫(kù)變慢了,平均請(qǐng)求處理時(shí)間增加到了500毫秒,于是我們決定將連接超時(shí)改為1000毫秒,但這個(gè)過(guò)程需要重啟服務(wù),會(huì)影響正在執(zhí)行的請(qǐng)求。有什么好辦法,不重啟服務(wù),就能夠修改配置么?

不妨設(shè),讀取與設(shè)置超時(shí)的偽代碼如下:

  1. // 從配置文件中讀取超時(shí)配置 
  2. timeout = CGlobalConf::readFileConf(“timeout”); 
  3. // 設(shè)置請(qǐng)求超時(shí)閾值 
  4. CConnectionPool::setTimeout(timeout); 

不重啟服務(wù),重新載入配置的常見(jiàn)方式有3這么幾種,不難但很使用,花1分鐘和大家說(shuō)一說(shuō)。

方案一:發(fā)信號(hào)觸發(fā)配置重載

這種方法無(wú)需加入任何組件,新增一個(gè)信號(hào)捕捉函數(shù),來(lái)處理配置的重新載入。

  1. // 服務(wù)啟動(dòng)時(shí),設(shè)置ctrl+c回調(diào)函數(shù) 
  2. signal(SIGINT, sigint_shenjian_process); 
  3.   
  4. // 捕獲ctrl+c時(shí),執(zhí)行配置重新載入動(dòng)作 
  5. void sigint_shenjian_process(int){ 
  6.          //從配置中讀取超時(shí)配置 
  7.          timeoutCGlobalConf::readFileConf(“timeout”); 
  8.          //設(shè)置請(qǐng)求超時(shí)閾值 
  9.          CConnectionPool::setTimeout(timeout); 
  10.   

當(dāng)需要變更配置時(shí),只需要:

  • 修改配置文件;
  • 發(fā)送信號(hào),觸發(fā)配置重新載入;

畫(huà)外音:啥,不知道如何向服務(wù)發(fā)信號(hào)?

方案二:檢測(cè)配置文件變化,自動(dòng)重新載入

這種方法無(wú)需手動(dòng)發(fā)送信號(hào),修改完配置文件,自動(dòng)檢測(cè),自動(dòng)載入,需要加入文件監(jiān)控組件。

畫(huà)外音:這類(lèi)組件開(kāi)源的也不少。

文件監(jiān)控組件如何能監(jiān)控文件的變化呢?

別想復(fù)雜了,可以定期檢查文件的md5或者last_modify_time。

  1. // 服務(wù)啟動(dòng)時(shí),初始化 
  2. CFileMonitor::init(){ 
  3.  // 獲取初始md5 
  4.  old_md5=xxx
  5.   
  6. // 啟動(dòng)一個(gè)進(jìn)程,監(jiān)控文件變化 
  7. CFileMonitor::start(){ 
  8.  while(1){ // 循環(huán)檢查 
  9.  // 獲取最新md5 
  10.  now_md5=xxx
  11.  // 比對(duì)md5是否變化,如果變化 
  12.  if(now_md5!=old_md5){ 
  13.          //從配置中讀取超時(shí)配置 
  14.          timeoutCGlobalConf::readFileConf(“timeout”); 
  15.          //設(shè)置請(qǐng)求超時(shí)閾值 
  16.          CConnectionPool::setTimeout(timeout); 
  17.          //修改md5 
  18.          old_md5=now_md5
  19.  } 
  20.  // 一秒后再檢查 
  21.  sleep(1000); 
  22.  } 

方案三:配置中心,配置變化時(shí)回調(diào)

次方案拋棄了配置文件,需要引入配置中心:

  • 所有服務(wù)從配置中心拿配置;
  • 必須從配置中心后臺(tái)修改配置;
  • 配置修改,配置中心回調(diào)引用了相關(guān)配置的服務(wù);
  1. // 服務(wù)啟動(dòng)時(shí),從配置中心獲取配置,并注冊(cè)回調(diào)函數(shù) 
  2. timeout = CConfCenter::(“timeout”, callback_shenjian); 
  3. // 設(shè)置請(qǐng)求超時(shí)閾值 
  4. CConnectionPool::setTimeout(timeout); 
  5.   
  6. void callback_shenjian(timeout){ 
  7.          //在配置中心修改配置時(shí),會(huì)收到回調(diào) 
  8.          CConnectionPool::setTimeout(timeout); 
  9.   

修改配置,不重啟服務(wù),上面三種方式都很常見(jiàn),不難但實(shí)用。

畫(huà)外音:特別是前兩種方式,瞬間就能實(shí)現(xiàn)。

希望大家有收獲。

【本文為51CTO專(zhuān)欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2020-09-26 22:12:01

配置重啟文件

2017-06-15 08:02:02

庫(kù)存扣減查詢(xún)

2012-10-15 09:22:24

云數(shù)據(jù)存儲(chǔ)云存儲(chǔ)云數(shù)據(jù)存儲(chǔ)成本

2018-05-23 07:14:10

整合數(shù)據(jù)中心運(yùn)維管理

2021-01-06 09:12:00

MySQL數(shù)據(jù)庫(kù)架構(gòu)

2013-02-28 11:00:51

IE10瀏覽器

2010-03-30 10:02:09

陳曉薇

2013-12-03 16:38:35

vSphere HA虛擬機(jī)

2022-11-29 10:33:15

Kubectl命令pod

2025-01-21 11:46:26

2021-07-29 07:51:43

工具 HappensBefore

2015-11-12 10:56:13

2021-03-18 10:35:04

MySQL數(shù)據(jù)庫(kù)架構(gòu)

2021-04-02 09:50:28

MySQL數(shù)據(jù)庫(kù)架構(gòu)

2015-06-15 11:21:03

密碼

2021-08-11 11:25:22

happens - bJava代碼

2013-08-12 15:10:50

GoogleGoogle總部

2021-06-10 14:34:02

鴻蒙HarmonyOS應(yīng)用

2022-04-20 09:50:44

CTO技術(shù)管理職業(yè)發(fā)展

2020-03-02 19:51:40

戴爾
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)