PHP actual combat kong para hacer arquitectura de microservicio cuatro (equilibrio dinámico de carga)

Prefacio

El equilibrio de carga es una tecnología de red informática que la utilizamos para distribuir la carga entre los recursos de la red para optimizar el uso de los recursos y evitar la sobrecarga.

Método de equilibrio de carga proporcionado por kong

Kong proporciona métodos basados ​​en DNS y Ring-balancer (balanceador de anillo), que se puede configurar sin un servidor DNS. Este capítulo se centrará en Ring-balancer.

Balanceador de anillos

Cuando se usa un ecualizador de anillo, no se requiere un servidor DNS y Kong actúa como un registro de servicios, agregando y eliminando servicios y solicitudes a través de API.

Este ecualizador circular se configura a través de upsteam y target.
En el negocio, podemos recopilar múltiples direcciones de servicio y puertos para formar un objetivo.
El nombre de host virtual es upsteam. Proxy a estos destinos a través de hosts virtuales.

例如: 
target -> 192.168.1.2:8887    192.168.1.2:8888    192.168.1.6:8889 
upsteam -> www.lalahost.com

Algoritmo de equilibrio

El balanceador de anillo proporciona los siguientes algoritmos:
round-robin, hash consistente y conexiones mínimas.

algoritmo defecto descripción
round robin Proporcionar sondeos ponderados distribuidos uniformemente para los objetivos.
hash consistente Basado en hash consistente para maximizar la tasa de aciertos objetivo
conexiones-mínimas Seleccione el objetivo con el menor número de conexiones y péselo de acuerdo con el peso del objetivo

Balanceo de carga

Ejemplo de implementación de Nginx

Este ejemplo se puede comparar con el código de Kong y el efecto es consistente.

upstream upstream01 {
    
    
	server localhost:8888 weight=10;
	server localhost:8889 weight=100;
}

server {
    
    
	listen	80;
	location /api/ {
    
    
		proxy_pass http://upstream01 ;
	}
}

Implementación del ecualizador de anillo Kong

Agregar ascendente y objetivo

<?php 
/**
 * @author: 飘逸的罗伯特
 */


//1. 创建名字为 upstream01 的 upstream
$upstream_data = [
	'name' => 'upstream01',
];
http_request('http://hz12.cn:8001/upstreams', $upstream_data);



//2. 创建项目对应的target,此处创建两个
$target_data = [
	'target' => 'hz12.cn:8888',  //服务地址
	'weight' => 10  			 //权重
];
http_request('http://hz12.cn:8001/upstreams/upstream01/targets', $target_data);


$target_data = [
	'target' => 'hz12.cn:8889',
	'weight' => 100
];
http_request('http://hz12.cn:8001/upstreams/upstream01/targets', $target_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;
}

Equivalente a

upstream upstream01 {
	server localhost:8888 weight=10;
	server localhost:8889 weight=100;
}

Agregar servicio y ruta

<?php 
/**
 * @author: 飘逸的罗伯特
 */

//创建service
$services_data = [ 
	'name' => 'service01',	//服务名称
	'host' => 'upstream01'  //设置对应的upstream名字
];
http_request('http://hz12.cn:8001/services', $services_data);


//创建route
$route_data = [
	'name'  => 'route01',	//路由名称
	'paths' => [
		'/api'    			//可访问服务的路由地址
	]
];
http_request('http://hz12.cn:8001/services/service01/routes', $route_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;
}

Equivalente a

server {
	listen	80;
	location /api/ {
		proxy_pass http://upstream01 ;
	}
}

resultado de ejecución

准备测试demo
我分别在hz12.cn:8888与hz12.cn:8889服务器上准备测试demo,站点根目录下新建demo.php,内容分别为8888与8889

访问我的服务器 ->  http://hz12.cn:8000/api

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45111820/article/details/114096978
Recomendado
Clasificación