[Práctica recomendada] Uso de OpenNJet para lograr la publicación en escala de grises

En el proceso de prueba y lanzamiento de una nueva versión de una aplicación, a menudo es necesario usar algunas cuentas seleccionadas para la verificación primero. Una vez que se completa la verificación, el tráfico comercial se cambia gradualmente a la nueva versión hasta que todo el tráfico se cambia a la nuevo racimo.

La cuenta de prueba se puede detectar de varias maneras, como a través del campo en el encabezado , el valor en la cookie o los parámetros en la URL .

En la configuración y los escenarios de los siguientes capítulos, el campo staffid en el encabezado HTTP se usará como base para evaluar la cuenta de prueba, y la cuenta de 7xxxx se identificará como la cuenta de prueba.

configuración estática inicial

En la configuración inicial, se establecerán dos grupos de flujos ascendentes : backendA y backendB , y el valor de staffid en el encabezado se usará como base para la relación de tráfico a través del comando split_clients , y el 100% del tráfico se configurará para apuntar a el backend backendA .

 split_clients $http_staffid $backend {
     100%    backendA;
     *       backendB;
   }

La configuración completa es la siguiente:

njet.conf
worker_processes auto;
cluster_name app1;
node_name node1;

error_log logs/error.log info;
load_module modules/njt_http_split_clients_2_module.so;
load_module modules/njt_http_dyn_bwlist_module.so;
load_module modules/njt_http_lua_module.so;
load_module modules/njt_dyn_ssl_module.so;
load_module modules/njt_agent_dynlog_module.so;  
load_module modules/njt_http_location_module.so;
helper ctrl modules/njt_helper_ctrl_module.so njet_ctrl.conf;
helper broker modules/njt_helper_broker_module.so ;

events {
    worker_connections  1024;
}

http {
   split_clients $http_staffid $backend {
     100%    backendA;
     *       backendB;
   }

   upstream backendA {
     server 192.168.1.4:18081;
   } 
   upstream backendB {
     server 192.168.2.4:18081;
   } 

   server {
       listen      18080 ssl; 
       ssl_certificate     cert/server.crt;  
       ssl_certificate_key  cert/server.key; 
       server_name www.test.com;
   
       location / {
         proxy_pass http://${backend};
       }
   }
}
njet_ctrl.conf
load_module modules/njt_http_sendmsg_module.so;
load_module modules/njt_ctrl_config_api_module.so; 
load_module modules/njt_helper_health_check_module.so;
load_module modules/njt_http_upstream_api_module.so; 
load_module modules/njt_http_location_api_module.so;
load_module modules/njt_doc_module.so;
load_module modules/njt_http_vtsd_module.so;

error_log logs/error_ctrl.log error;

events {
    worker_connections  1024;
}
http {
    include mime.types;
    access_log off;
    server {
        listen       8081;
        location / {
            return 200 "njet control panel\n";
        }
        location /hc {
            health_check_api;
        }
        location /api {
             api write=on;
        }
        location /kv {
            dyn_sendmsg_kv;
        }
        location /config {
            config_api;
        } 
        location /doc {
            doc_api;
        }
        location /dyn_loc {
           dyn_location_api;
        }  
        location /metrics {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

Pasos de publicación en escala de grises

Ubicación _

Después de implementar la nueva versión en el clúster backendB , agregue una ubicación condicional a través de la API proporcionada por la ubicación dinámica y configure todos los números de trabajo de prueba 7xxxx en la ubicación para acceder a backendB . En las expresiones condicionales proporcionadas por Njet , puede usar $http_* para obtener el valor en el encabezado de la solicitud, y la expresión $http_staffid ~* "7.*" coincidirá con todas las solicitudes cuyo ID de personal sea 7xxxx en el encabezado .

Use el número de trabajo de prueba para probar

Después de agregar la ubicación condicional a través del paso anterior , todos los números de trabajo que no sean 7xxxx seguirán accediendo al backendA del clúster, y todos los números de trabajo 7xxxx como prueba accederán al backendB del clúster .

​​​​​​​​Eliminar la ubicación de la expresión

Cuando se completa la prueba, la ubicación condicional se puede eliminar mediante la API dinámica .

Después de eliminar la ubicación condicional , todo el tráfico se dirige a backendA, incluido el número de trabajador de prueba de 7xxxx .

​​​​​​​​Ajuste gradualmente 100%

Utilice la API de configuración dinámica proporcionada por el módulo para ajustar gradualmente la relación de división.

Por ejemplo , cuando se ajusta a una proporción de 50:50 :

Finalmente ajustado a una proporción de 0 : 100 , todo el tráfico apuntará a backendB

En este momento, la nueva versión de la aplicación se ha implementado y cambiado (A => B). Cuando se publique la próxima versión, se pueden seguir los mismos pasos para completar el cambio (B => A) . 


OpenNJet se basó originalmente en la bifurcación básica NGINX 1.19 y evolucionó de forma independiente. Con la iteración de la versión NGINX, absorbió la actualización de NGINX ascendente y se actualizó a la versión NGINX 1.23.1. OpenNJet tiene las características de alto rendimiento, estabilidad y fácil expansión. , y también resuelve NGINX tiene problemas de larga data, como la dificultad en la configuración dinámica y las funciones de gestión que afectan a los negocios.

Como motor subyacente, OpenNJet puede implementar diferentes formas de productos mediante el uso del mecanismo de carga dinámica, como puerta de enlace API, proxy de mensajes, proxy de entrada y salida, equilibrio de carga, WAF, etc. En la arquitectura nativa de la nube, además de proporcionar la función de puerta de enlace de comunicación norte-sur, OpenNJet también ofrece nuevas funciones, como comunicación este-oeste en la red de servicio, secuestro de tráfico transparente, disyuntor, telemetría e inyección de fallas.

Portal: https://gitee.com/njet-rd

RustDesk 1.2: uso de Flutter para reescribir la versión de escritorio, compatible con la supuesta fuga de arquitectura del modelo GPT-4 de Wayland: contiene 1,8 billones de parámetros, utilizando un modelo experto mixto (MoE) Musk anunció el establecimiento de la empresa xAI deepin V23 adaptó con éxito las afirmaciones del proyecto WSL CentOS " Abierto a todos" Rust 1.71.0 Stable Release React ¿Está teniendo un momento Angular.js? Microsoft lanza una nueva fuente predeterminada, Aptos, para reemplazar CalibriMicrosoft : aumentar los esfuerzos para usar la versión Rust IntelliJ IDEA 2023.1.4 en Windows 11
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/6606114/blog/10089167
Recomendado
Clasificación