主頁 > 軟體設計 > php實戰kong做微服務架構六(主動健康檢查與熔斷)

php實戰kong做微服務架構六(主動健康檢查與熔斷)

2021-03-01 10:47:52 軟體設計

php實戰kong做微服務架構六(主動健康檢查與熔斷)

  • 序言
  • 健康檢查
  • 主動檢查
  • 熔斷
    • 恢復
  • 優缺點
  • 業務應用
  • 源代碼
  • 作者最后的話

序言

通過上篇你應該了解到了如何使用kong實作動態的負載均衡,以及kong提供的環形均衡器的作用,

本篇將在環形均衡器的基礎上,講解如何實作健康檢查與熔斷,

健康檢查

在當下復雜的網路環境與現實環境眾多因素的影響中,單臺主機發生故障的幾率大大提升,我們在現實業務中,需要了解每臺主機的情況,

一個大栗子:
  1. 我們的作業如同路面施工者,
  2. 對壞的路面需要維修,
  3. 同時在壞的路面前方防止障礙物,讓車輛避過,行駛在安全無危險的路面上,
大栗子決議:
  1. 開開心心上班的你
  2. 發現某個服務器宕機了
  3. 將流量引到其他服務器

在這里kong允許我們檢查上游服務所配置的多個目標是否在正常作業,如果出現目標作業失敗現象,流量將被引導向正常作業目標,

kong將檢查部分分為主動檢查與被動檢查(斷路器),

主動檢查

kong將定期主動請求http與https目標,并對目標回應判斷其健康與否,并且自動在環形均衡器中禁止此目標,

熔斷

此處稱為被動健康檢查,是我們常說的斷路器,當發生問題后可以主動斷開連接,本篇將稱呼其為被動健康檢查,

kong將請求轉發到目標后,當目標變得無回應,斷路器將檢查到這一問題,并將之標記為不健康,kong提供的環形均衡器將跳過這一目標,達到熔斷的目的,
在這里插入圖片描述

恢復

通過kong提供的管理員API可以非常方便的回復目標健康狀態,
注意:

  1. kong不會主動恢復標記健康,需人工操作,
  2. 恢復后廣播所有節點,節點重置健康記錄,恢復服務,

優缺點

  1. 被動檢查不消耗額外流量,是在對目標正常訪問程序中標記的,主動檢查需要額外的定時檢查,
  2. 主動檢查無需人工操作,被動檢查需要我們操作api恢復,
  3. 主動檢查會將健康目標配置為探測端點,環形均衡器將向配置為探測端點的每個網路端點轉發流量,被動則無需,

業務應用

在具體業務中,我們一般將兩種方式結合起來,

  1. 被動檢查檢測目標健康狀態,實行標記,
  2. 主動檢查在目標不健康時應用,這個時候目標可以自行啟動,環形均衡器正常分配流量,

emmm所以嘛~~被動恢復的api本篇不介紹^^

源代碼

健康檢查是在upstream上開啟配置的,

<?php 
/**
 * @author: 飄逸的羅伯特
 */


//創建名字為 upstream02 的 upstream
$upstream_data = [
	'name' => 'upstream01',
	'healthchecks.active.type' => 'http'   			//探頭配置  此處可選【http https tcp】 默認http

	//============================================主動檢查============================================
	'healthchecks.active.http_path' => '/' 			//主動檢測get http請求使用路徑  
	'healthchecks.active.timeout' => 1,    			//主動檢查超時時間   此處設定1秒  
	'healthchecks.active.concurrency' => 10, 		//同時主動檢查目標數量設定
	'healthchecks.active.healthy.interval' => 0, 	//健康目標主動檢查每隔幾秒進行    0表示不進行
	'healthchecks.active.unhealthy.interval' => 1,  //不健康目標主動檢查每隔幾秒進行  此處設定1秒

	'healthchecks.active.unhealthy.timeouts' => 10, //主動檢查認為目標不健康的超時時間

	//一起配合使用  當檢測到回應為對應狀態碼指定次數,將標記目標為健康
	'healthchecks.active.healthy.successes' => 1,   			//主動檢查認為目標健康的成功次數
	'healthchecks.active.healthy.http_statuses' => [200, 302], 	//主動檢查健康狀態碼

	//一起配合使用  當檢測到回應為對應狀態碼指定次數,將標記目標為不健康
	'healthchecks.active.unhealthy.http_failures' => 1, 		//主動檢查認為目標不健康的失敗次數
	'healthchecks.active.unhealthy.http_statuses' => [500,505], //主動檢查不健康狀態碼


	//============================================被動檢查============================================
	'healthchecks.passive.unhealthy.timeouts' => 10, 				//被動檢查認為目標不健康的超時時間
	
	//一起配合使用  當檢測到回應為對應狀態碼指定次數,將標記目標為健康
	'healthchecks.passive.healthy.successes' => 1, 					//被動檢查認為目標健康的成功次數
	'healthchecks.passive.healthy.http_statuses' => [200, 302], 	//被動檢查健康狀態碼

	'healthchecks.passive.unhealthy.http_failures' => 1, 			//被動檢查認為目標不健康的成功次數
	'healthchecks.passive.unhealthy.http_statuses' => [500,505], 	//被動檢查不健康狀態碼s
]; 
http_request('http://hz12.cn:8001/upstreams', $upstream_data);

 
/**
 * 發送post請求
 * @param  [string] $url      請求地址
 * @param  [array]  $postdata post引數
 * @return [ar]           [description]
 */
function http_request($url, $postdata=[]){
	$curl = curl_init();

	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);

	$data = curl_exec();
	curl_close($curl);

	return $data;
}

作者最后的話

運行效果與上篇一致,宕機的目標不會被分配到流量,恢復作業的目標將重新被分配流量,
emmmm就不截圖了~~

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/264817.html

標籤:其他

上一篇:SAP官方幫助網站,help.sap.com 背后那些事兒

下一篇:DDD(領取驅動設計)系列主題之DDD常用架構模式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more