Exploración y práctica de JD Unified Head and Tail Management System | Equipo técnico de JD Cloud

Fondo del sistema

P: ¿Cuánto tiempo lleva revisar la redacción de un sitio web? Para un sitio web personal pequeño, se estima que es muy simple, y se puede modificar y publicar en unos minutos. Pero, ¿y si quieres modificar la redacción de cientos de sitios web? Entonces se estima que necesitamos aumentar la demanda de productos, programar el desarrollo para I+D y realizar pruebas para la verificación de regresión. Debido a la gran cantidad de aplicaciones involucradas, y cada aplicación tiene sus propias necesidades de investigación y desarrollo, es posible que no sea posible programar rápidamente revisiones de redacción. Entonces, parece un requisito muy simple, pero cuando hay muchas aplicaciones y departamentos involucrados, se convierte en una pesadilla para los gerentes de producto. Especialmente para los grandes sitios web de compras como Jingdong Mall, hay muchos sistemas comerciales detrás de cada página web que navega, y es mantenido por un equipo de I + D dedicado. Con el fin de mantener un estilo de página web unificado, cada sistema empresarial suele utilizar el mismo encabezado y final de página, que llamamos encabezado y final comunes.

Por ejemplo, la imagen de arriba es la cola de la página que JD.com usa actualmente de manera uniforme. Si desea modificar la redacción o los enlaces en la cola, debe presionar a cientos de sistemas y equipos de I + D para programar revisiones y lanzarlas. Para resolver este problema, nació el sistema unificado de administración de encabezados y colas de JD.com, que básicamente realizó una modificación de cinco minutos del contenido público de encabezados y colas de JD.com.

En la actualidad, los logros del sistema unificado de cabeza a cola son los siguientes:

Diseño general de la arquitectura del sistema

El sistema completo incluye principalmente dos partes. La primera parte es el fondo de administración, que se utiliza principalmente para administrar los archivos públicos de cabecera y cola y los sistemas empresariales de Jingdong, configurar la relación entre los sistemas comerciales y los archivos públicos de cabecera y cola, y distribuir la cabecera pública y los archivos finales. archivos de cola para sistemas empresariales. . La segunda parte es el cliente de encabezado y final, que se utiliza principalmente para obtener los archivos de encabezado y final en los que se basa el sistema comercial, luego analizar y representar la página, y generar el contenido de la última versión de los archivos de encabezado y final. Para hacer frente a los sistemas comerciales desarrollados en diferentes versiones de lenguajes, los clientes principales y finales se dividen en clientes Java y clientes Nginx. El cliente Java soporta principalmente sistemas empresariales desarrollados en el lenguaje Java. No solo puede analizar y procesar HTML estático, sino que también admite motores de plantillas de página de análisis como JSP/Velocity/FreeMarker/Thymeleaf. El cliente de Nginx es compatible con los sistemas comerciales desarrollados en lenguajes distintos de Java e implementa las funciones de análisis de plantillas de página y presentación de encabezados y colas públicos de sistemas que no son de Java.

Diseño e implementación de antecedentes de gestión.

Todo el fondo de administración se da cuenta de la separación de los extremos delantero y trasero, el extremo trasero es responsable de proporcionar la interfaz HTTP y el extremo frontal solo es responsable de la representación de la página. El fondo de gestión se divide en módulos, principalmente divididos en tres módulos, incluido el módulo de gestión de archivos, el módulo de gestión de aplicaciones y el módulo de centro personal.

  • módulo de gestión de archivos

Proporciona la función de mantenimiento de los archivos públicos de cabecera y cola, que pueden crear y guardar el contenido HTML público de cabecera y cola en el fondo de administración, e implementa el control de versiones para los archivos públicos de cabecera y cola. Los usuarios pueden editar, publicar y revertir la cabecera. y archivos de cola en el fondo de gestión y así sucesivamente.

  • Módulo de gestión de aplicaciones

Proporciona la función de mantenimiento del sistema comercial. Los usuarios pueden agregar nuevas aplicaciones en segundo plano de administración, crear un entorno de configuración, agregar relaciones de configuración públicas de principio a fin en las que se basan los sistemas comerciales y ver la información de la aplicación y el cliente de principio a fin. solicitar información a la que acceden las aplicaciones empresariales.

  • Módulo de centro personal

Se utiliza para registrar varios registros de operaciones de usuarios en segundo plano de administración, incluidas operaciones de archivos y operaciones de aplicaciones, y proporciona una función de consulta de registro de operaciones. También realiza el procesamiento de aprobación en línea para la operación de publicación de archivos de encabezado y cola públicos.

Diseño e implementación de clientes cabeza y cola

El trasfondo de administración de cabeza y cola presentado anteriormente ha realizado la creación, el mantenimiento y el control de versiones de los archivos de cabeza y cola, y cómo el sistema comercial se basa en hacer referencia a estos archivos de cabeza y cola es el problema que debemos enfrentar en el siguiente paso. En primer lugar, el problema que debemos resolver es cómo distribuir los archivos de cabeza y cola creados en el fondo de gestión de cabeza y cola a cada sistema empresarial. En la actualidad, existen principalmente dos métodos, a saber, el método de empuje del sistema de cabeza y cola y el método de extracción del sistema empresarial.

  • Método de empuje del sistema de cabeza y cola:

Significa que cada servidor en cada sistema comercial debe usarse como servidor, y los sistemas de cabeza y cola se usan como el cliente. Cuando los archivos de cabeza y cola en los sistemas de cabeza y cola se actualicen, se conectarán activamente al servidores de cada sistema empresarial.Después de que la conexión sea exitosa, el contenido más reciente de los archivos de cabecera y cola se envía al sistema empresarial. Para garantizar que los clientes del sistema principal y final puedan establecer conexiones con cada servidor del sistema comercial en cualquier momento, el sistema comercial debe monitorear un puerto fijo y brindar servicios en todo momento; de lo contrario, existirá el riesgo de fallar al empujar el archivos de cabeza y cola. El entorno real es que JD.com tiene muchos sistemas comerciales y el entorno de implementación también es diverso, así como diferentes lenguajes de desarrollo. Si desea desarrollar el servidor de cabeza a cola, primero debe resolver el problema de los idiomas cruzados. JD.com actualmente usa Java, Js, Php, Golang y Lua para el desarrollo. Necesitamos proporcionar y mantener la cabeza Versiones de servidor a cola en cinco idiomas. Además, debido a la gran cantidad de puertos monitoreados por el sistema comercial, los servidores de cabeza y cola enfrentarán el riesgo de ocupación de puertos al iniciarse, lo que también hará que los servidores de cabeza y cola no se inicien normalmente, de modo que la cabeza y la cola los archivos de cola no se pueden actualizar. Sin embargo, este método también tiene ventajas, es decir, solo cuando el archivo de encabezado debe actualizarse, se establece una conexión para enviarlo. Los archivos de encabezado y cola no solo pueden actualizarse y tener efecto en tiempo real, sino también guardar el servidor recursos.

  • Método de extracción del sistema empresarial:

Este método es justo lo contrario del método de empuje del sistema de cabeza a cola.Usar el sistema de cabeza a cola como servidor puede resolver el problema de falla al iniciar debido a la ocupación del puerto, pero aún enfrenta el problema de cruce versiones de cliente de idioma. Sin embargo, a través de nuestra investigación y análisis de sistemas comerciales, básicamente todos los sistemas comerciales utilizan Nginx como un proxy inverso, y este Nginx nos brinda la posibilidad de admitir sistemas comerciales en varios idiomas. Luego, solo necesita desarrollar una versión de Java del cliente de encabezado y cola para introducir y extraer los archivos de encabezado y cola en el sistema de negocios de Java. Sin embargo, este método también tiene desventajas, es decir, los clientes de cabeza y cola no saben cuándo se actualizarán los archivos de cabeza y cola, y los clientes de cabeza y cola solo pueden sondear regularmente los sistemas de cabeza y cola para verificar si la cabeza y la cola los archivos de cola se actualizan, y si los archivos se actualizan, se extraerán Nuevo contenido de encabezado y archivo de cola. Esto hará que los archivos de encabezado y final no se actualicen en tiempo real, y el sondeo regular también consumirá ciertos recursos del servidor y de la red.

Finalmente, después de una consideración exhaustiva, elegimos el método de extracción del sistema comercial para distribuir los archivos de cabeza y cola. Con el fin de resolver el problema del lenguaje cruzado del sistema comercial, proporcionamos dos versiones del cliente principal y final, a saber, el cliente principal y final de Nginx y el cliente principal y final de Java, que básicamente cumplen con la función de extracción del cliente principal y final. archivos de cola de todos los sistemas de negocio. Pero la forma en que el sistema comercial hace referencia a estos archivos de encabezado y cola implica una tecnología SSI (inclusión de página web del lado del servidor). A continuación se presentará cómo los clientes de cabeza y cola de los dos métodos pueden resolver el problema de extraer los archivos de cabeza y cola y SSI.

  • Cliente principal y final de Nginx

Este método utiliza principalmente el módulo SSI de Nginx para extraer los archivos de cabeza y cola y el problema de SSI. El módulo ngx_http_ssi_module es un filtro en Nginx, que procesa el comando SSI (inclusión del lado del servidor) en la respuesta que pasa por él. El comando incluido se usa actualmente y el ejemplo de configuración es el siguiente:

  <!--# include file="/fragment/footer.html" -->

Las páginas en el sistema comercial se refieren a los archivos de cabecera y cola que se mantienen en el sistema de cabecera y cola a través de esta instrucción de configuración, pero esta instrucción de configuración requiere que estos archivos realmente existan en el servidor antes de que puedan ser cargados y reemplazados por Nginx. Por lo tanto, esta configuración por sí sola no puede importar los archivos de encabezado y final configurados en el sistema de encabezado y final. También es necesario convertir el nombre del archivo introducido por el comando include en una URL, y luego ir al servidor del sistema de encabezado y final para solicitar los archivos de cabecera y cola de la versión correspondiente. Por lo tanto, la reescritura de URL de Nginx y la configuración del proxy inverso se utilizan aquí para resolver el problema de extraer los archivos de cabeza y cola. En este punto, de hecho, se ha realizado una función SSI completa de archivo de encabezado y final, y la página que contiene los archivos de encabezado y final también se puede mostrar completamente en el sistema comercial.

Sin embargo, todavía hay algunos problemas. Las solicitudes de archivos de encabezado y final aquí se activan pasivamente cuando el usuario navega por la página, y Nginx también solicita los archivos de encabezado y final a través de la sincronización de proxy inverso, por lo que el tiempo de respuesta del encabezado y Los sistemas de cola afectan directamente a las páginas del sistema comercial. El tiempo de carga, si los sistemas principal y final se agotan, las páginas del sistema comercial también se agotarán y el tráfico de la página del sistema comercial (incluida la página de inicio de JD, la página de detalles comerciales) todos golpean los sistemas de cabeza y cola, que es el tráfico que los sistemas de cabeza y cola no pueden soportar. Por lo tanto, necesitamos reducir el volumen de solicitudes del sistema comercial, y el contenido de estos archivos de encabezado y cola no cambia con demasiada frecuencia, por lo que se puede usar Nginx para agregar un proxy_cache de caché local. Cuando el usuario navega por la página del sistema comercial, primero se solicitan los archivos de encabezado y cola en el caché local y, una vez que expira el tiempo de caché, se solicita al sistema de encabezado y cola que obtenga los archivos de encabezado y cola más recientes. A través de la configuración del caché de proxy Nginx, miles de solicitudes de usuario se optimizan a una sola solicitud dentro del tiempo de caché del servidor de cada sistema comercial, lo que reduce en gran medida la presión de solicitud de los sistemas de cabeza y cola. Al mismo tiempo, la configuración proxy_cache_use_stale se utiliza para reducir el riesgo de que el sistema comercial dependa de los sistemas de cabeza y cola. Incluso si los sistemas de cabeza y cola están inactivos, no afectará la carga y visualización de los archivos de cabeza y cola. del sistema empresarial. El siguiente es un ejemplo de configuración parcial del cliente Nginx:

location ~ ^/fragment/ {
    proxy_cache header_cache;
    proxy_cache_key $uri;
    proxy_cache_valid 200 1m;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
    proxy_cache_lock on;
    proxy_cache_lock_timeout 1s;
    proxy_connect_timeout 1s;
    proxy_ignore_headers Set-Cookie Cache-Control;
    proxy_hide_header Cache-Control;
    proxy_hide_header Set-Cookie;
    # 参考头尾系统中配置,请注意区分测试环境和生产环境,返回的文件内容默认都是UTF-8编码内容,如果需要GBK编码内容需要在env后面拼接参数?charset=GBK
    # 只需要替换{appId} {token} 和 {env}
    rewrite ^/fragment/(.*) /open/fragment/$1/Nginx/$nginx_version/$server_addr/{appId}/{token}/{env} break;
    proxy_set_header Accept-Encoding "";
    add_header X-Cache-Status $upstream_cache_status;
    proxy_pass   http://xxx.jd.local;
}
  • Cliente de cabeza y cola de Java

Aunque el cliente del método Nginx presentado anteriormente ha resuelto el problema de SSI de los archivos de encabezado y cola, debido a que el proceso SSI de Nginx se activa cuando el usuario visita la página, es una llamada sincrónica durante el proceso de solicitud del usuario. se agrega, seguirá afectando el tiempo de respuesta de la página. Entonces, para resolver este problema de pérdida de rendimiento, desarrollamos especialmente una versión Java del cliente principal y final para realizar la función SSI de los archivos principal y final. El proceso de inicio de los clientes cabeza y cola es el siguiente:

En primer lugar, el sistema empresarial debe introducir el cliente principal y final de Java para confiar en el paquete jar y, a continuación, configurar el ID de la aplicación, el token de acceso, el identificador del entorno, la ruta de la plantilla de página y el nombre del sufijo del archivo de plantilla en el sistema principal y final. Una vez completada la configuración, los clientes principales y secundarios se iniciarán junto con el sistema empresarial. Durante el proceso de inicio, el cliente de cabeza y cola primero descargará los archivos de cabeza y cola configurados en el sistema de cabeza y cola al directorio local del servidor del sistema comercial y luego iniciará un subproceso asíncrono para sondear el sistema de cabeza y cola de la solicitud y detecte la actualización de los archivos de cabeza y cola, si hay un cambio en los archivos de cabeza y cola, descargue directamente los últimos archivos de cabeza y cola al directorio local.

Una vez que los archivos de encabezado y cola se descargan localmente, el cliente de encabezado y cola escaneará y cargará todos los archivos de plantilla que contengan instrucciones SSI en la memoria de acuerdo con la ruta de la plantilla de página y el nombre del sufijo en la configuración, y creará archivos de respaldo de estos archivos de plantilla. Luego, analice el comando de inclusión en el archivo de plantilla de acuerdo con el archivo de plantilla cargado en la memoria y, finalmente, cargue el contenido de los archivos de encabezado y final a través del nombre de archivo configurado por el comando incluido para el reemplazo, generando así un nuevo archivo de plantilla. Una vez que se completa el análisis de la plantilla, registre e inicie un observador de archivos de encabezado y final, que se usa especialmente para monitorear si los archivos de encabezado y final están actualizados.Si hay una actualización, el contenido de la plantilla en la memoria se analiza nuevamente para generar un nuevo archivo de plantilla. Este proceso se lleva a cabo básicamente cuando se inicia el sistema comercial, por lo que cuando el usuario solicita la página del sistema comercial, el sistema comercial puede devolver directamente el archivo de plantilla, evitando el procesamiento de SSI durante el proceso de solicitud del usuario y básicamente logrando la pérdida cero del negocio. del rendimiento del sistema.

Autor: Jingdong Retail Cao Zhifei

Fuente: Comunidad de desarrolladores de JD Cloud

Los graduados de la Universidad Popular Nacional robaron la información de todos los estudiantes de la escuela para construir un sitio web de puntuación de belleza, y han sido detenidos criminalmente.La nueva versión de Windows de QQ basada en la arquitectura NT se lanza oficialmente.Estados Unidos restringirá el uso de China de Amazon, Microsoft y otros servicios en la nube que brindan capacitación en modelos de IA. Se anunciaron proyectos de código abierto para detener el desarrollo de funciones LeaferJS , el puesto técnico mejor pagado en 2023, lanzado: Visual Studio Code 1.80, una biblioteca de gráficos 2D de código abierto y potente , compatible funciones de imagen de terminal . El número de registros de subprocesos ha superado los 30 millones. "Cambio" deepin adopta Asahi Linux para adaptarse a la clasificación de la base de datos Apple M1 en julio: Oracle aumenta, abriendo el puntaje nuevamente
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4090830/blog/10086970
Recomendado
Clasificación