Movatterモバイル変換


[0]ホーム

URL:


跳转到内容
维基百科自由的百科全书
搜索

斷路器設計模式

维基百科,自由的百科全书

斷路器是一個現代軟體開發設計模式。用以偵測錯誤,並避免不斷地觸發相同的錯誤(如維護時服務不可用、暫時性的系統問題或是未知的系統錯誤)。

常用時機

[编辑]

假設有個應用程式每秒會與資料庫溝通數百次,此時資料庫突然發生了錯誤,程式設計師並不會希望在錯誤時還不斷地訪問資料庫。因此會在等待TCP連線逾時之前直接處理這個錯誤,並進入正常的結束程序(而非直接結束程式)。簡單來說,斷路器會偵測錯誤並且「預防」應用程式不斷地呼叫一個近乎毫無回應的服務(除非該服務已經安全到可重試連線了)。

概念

[编辑]

斷路器有分簡單與較進階的版本,簡單的斷路器只需要知道服務是否可用。而較進階的版本比起前者更有效率。進階的斷路器帶有至少三個狀態:

  • 關閉:斷路器在預設的情形下是呈現關閉的狀態,而斷路器本身「帶有」計數功能,每當錯誤發生一次,計數器也就會進行「累加」的動作,到了一定的錯誤發生次數斷路器就會被「開啟」,這個時候亦會在內部啟用一個計時器,一旦時間到了就會切換成半開啟的狀態。
  • 開啟:在開啟的狀態下任何請求都會「直接」被拒絕並且拋出異常訊息。
  • 半開啟:在此狀態下斷路器會允許部分的請求,如果這些請求都能成功通過,那麼就意味著錯誤已經不存在,則會被「切換回」關閉狀態並「重置」計數。倘若請求中有「任一」的錯誤發生,則會回復到「開啟」狀態,並且重新計時,給予系統一段休息時間。

效能考量

[编辑]

當安全是個益處,效能也就成為了實作斷路器的一個負面考量。因為需要不斷地檢查一個服務是否安全,且服務不僅會有一個,甚至會以多個方向擴展。

實作範例

[编辑]

PHP

[编辑]

下面是一個以 PHP 來實作的範例。這個範例是將一個 MySQL 伺服器的可用狀態處存進共享記憶體快取(APC)中並在之後以此判斷是否可用。

檢查

[编辑]

下列腳本能以工作排程來不斷地在某時刻執行檢查。

$db=mysql_connect('localhost','user','pass');if($db===false){apc_store('dbUp','已斷線');}else{apc_store('dbUp','可連線');@mysql_close($db);}

在應用程式中使用

[编辑]
if(apc_fetch('dbUp')==='已斷線'){echo"資料庫目前不可用。請在數分鐘後嘗試。";exit;}$db=mysql_connect('localhost','user','pass');$res=mysql_db_query('database','SELECT * FROM table');

外部連結

[编辑]
设计模式
创建型
结构型
行为型
并发模式
架构模式
/分布式
其他模式
书籍
人物
社区
检索自“https://zh.wikipedia.org/w/index.php?title=斷路器設計模式&oldid=62336450
分类:​

[8]ページ先頭

©2009-2025 Movatter.jp