Inicio rápido en 10 minutos con Elasticarch, un motor de análisis y búsqueda de datos masivo

Autor: jeremyshi, ingenieros de desarrollo de antecedentes de Tencent TEG

1. Antecedentes

Con el rápido desarrollo de las tecnologías de la información, como Internet móvil, Internet de las cosas y la computación en la nube, la cantidad de datos se ha disparado. Hoy en día, podemos encontrar fácilmente la información que queremos de los datos masivos, que es inseparable de la ayuda de la tecnología de los motores de búsqueda. Especialmente el mecanismo de indexación, recuperación y clasificación entre ellos, no necesitamos comprender profundamente el complejo principio de recuperación de información detrás, podemos realizar la función básica de recuperación de texto completo. La cantidad de datos alcanza los mil millones y la escala de decenas de miles de millones aún puede devolver resultados de búsqueda en segundos. Los problemas reales que nos preocupan, como la tolerancia a desastres del sistema, la seguridad de los datos, la escalabilidad y la capacidad de mantenimiento, se pueden resolver de manera eficaz en Elasticsearch, que ocupa el primer lugar en el campo de los motores de búsqueda de código abierto.

2. Introducción a Elasticsearch

Elasticsearch (ES) es un motor de análisis de búsqueda distribuido de código abierto basado en Lucene, que puede indexar y recuperar datos casi en tiempo real. Tiene las características de alta confiabilidad, facilidad de uso y comunidad activa, y se usa ampliamente en escenarios como la recuperación de texto completo, el análisis de registros y el análisis de monitoreo. Debido a la alta escalabilidad, el clúster se puede expandir a una escala de cien nodos para procesar petabytes de datos. Las operaciones de escritura, consulta, gestión de clústeres y otras se pueden realizar a través de una API RESTful simple. Además de la búsqueda, también proporciona funciones de análisis estadístico ricas. Y el paquete oficial de expansión de funciones XPack satisface otras necesidades, como cifrado de datos, alarmas, aprendizaje automático, etc. Además, los complementos personalizados, como la copia de seguridad de COS, la segmentación de QQ, etc., se pueden utilizar para cumplir con requisitos funcionales específicos. A continuación se presenta principalmente la arquitectura y los principios básicos de ES.

2.1 Arquitectura y principio de Elasticsearch

Clúster de Elasticsearch

Conceptos básicos :

  • Clúster "Clúster": consiste en nodos ES desplegados en múltiples máquinas para procesar conjuntos de datos más grandes y lograr una alta disponibilidad.

  • Nodo "Nodo": proceso ES en la máquina, se pueden configurar diferentes tipos de nodos.

  • Nodo maestro: se utiliza para seleccionar el maestro del clúster. Uno de los nodos sirve como nodo maestro, responsable de la gestión de metadatos del clúster, como la creación de índices, y los nodos que se van para unirse al clúster.

  • Nodo de datos "Nodo de datos": Responsable del almacenamiento de datos de índice.

  • Índice "Índice": una colección lógica de datos de índice, que puede ser análoga a la base de datos de datos relacionales.

  • "Fragmentación" de fragmentos: subconjuntos de datos de índice. Al asignar fragmentos a diferentes nodos en el clúster, se logra la expansión horizontal de datos. Para resolver el problema de las capacidades de procesamiento de CPU, memoria y disco insuficientes de un solo nodo.

  • Fragmento principal "Fragmento principal": la fragmentación de datos adopta el modo maestro-esclavo y los fragmentos reciben operaciones de índice.

  • Fragmento de réplica "fragmento de réplica": una copia del fragmento principal para mejorar el rendimiento de las consultas y lograr una alta fiabilidad de los datos. Cuando el fragmento principal es anormal, uno de los fragmentos de réplica se promoverá automáticamente al nuevo fragmento principal. Para que sea más fácil para todos entender el modelo de datos en ES, compárelo con la base de datos relacional MySQL:

Categoría del modelo de datos

Como puede verse en el diagrama de arquitectura anterior, la arquitectura ES es muy concisa. El descubrimiento automático incorporado realiza el descubrimiento de Zen. Cuando se inicia un nodo, puede unirse al clúster poniéndose en contacto con la lista de miembros del clúster. Uno de los nodos sirve como nodo principal para la gestión de metadatos del clúster y mantiene la distribución de fragmentos entre los nodos. Cuando un nuevo nodo se une al clúster, el nodo maestro migrará automáticamente algunos fragmentos al nuevo nodo para equilibrar la carga del clúster.

El nodo se une al clúster

Los clústeres distribuidos inevitablemente tienen fallas en los nodos. El nodo principal detectará periódicamente el estado de supervivencia de otros nodos del clúster. Cuando un nodo falla, lo sacará del clúster. Y restaure automáticamente los fragmentos en el nodo fallido en otros nodos. Cuando el fragmento principal falla, uno de los fragmentos de réplica se promocionará como fragmento principal. Otros nodos también detectarán el nodo maestro activo. Cuando el nodo maestro falla, se activará el protocolo integrado tipo Raft para seleccionar el maestro, y se establecerá el número mínimo de nodos maestros candidatos para evitar la división del cerebro del clúster.

El nodo abandona el clúster

Además de la gestión de clústeres, la lectura y escritura de datos de índices también es una parte importante de nuestra preocupación. ES adopta una arquitectura peer-to-peer, cada nodo guarda la cantidad total de información de enrutamiento fragmentada, es decir, cada nodo puede recibir lecturas y escrituras del usuario. Por ejemplo, si se envía una solicitud de escritura al nodo 1, la solicitud de escritura usa el valor hash del ID del documento para determinar en qué fragmento primario escribir de forma predeterminada. Aquí, se supone que el fragmento 0 está escrito. Después de escribir el fragmento principal P0, la solicitud de escritura se reenvía al nodo del fragmento réplica R0 en paralelo. Cuando el nodo del fragmento réplica confirma que la escritura es correcta, vuelve al cliente para informar el éxito de la escritura para garantizar la seguridad de los datos. Y antes de escribir, asegurará la cantidad de copias del número de quórum para evitar datos escritos inconsistentes causados ​​por la partición de red.

Operación de escritura

La consulta adopta la búsqueda distribuida. Por ejemplo, después de que se envía una solicitud al nodo 3, la solicitud se reenvía al nodo donde se encuentra el fragmento principal o réplica del índice. Por supuesto, si escribe y consulta ambos con información de campo de enrutamiento. La solicitud solo se enviará a algunos fragmentos, evitando el escaneo completo de fragmentos. Una vez que estos nodos completan la consulta, los resultados se devuelven al nodo solicitante y el nodo solicitante recopila los resultados de cada nodo y los devuelve al cliente.

Operación de consulta

2.2 Principio de Lucene

Después de presentar los principios básicos de los clústeres de ES, presentemos brevemente a Lucene, el motor de almacenamiento subyacente de ES. En primer lugar, Lucene es una biblioteca de recuperación de información de alto rendimiento que proporciona funciones básicas de indexación y recuperación. ES resuelve los problemas de confiabilidad y administración distribuida de clústeres sobre esta base y finalmente forma un sistema de búsqueda de texto completo productizado.

El problema central que resuelve Lucene es la búsqueda de texto completo. A diferencia de los métodos de recuperación tradicionales, la recuperación de texto completo evita todo el análisis de contenido durante la consulta. Por ejemplo, después de que se escriben los datos, el contenido del campo del documento escrito se divide en palabras para formar una tabla de diccionario y una tabla invertida asociada a ella. Al realizar consultas, el resultado de la segmentación de palabras clave coincide directamente con el contenido de la tabla del diccionario y se obtiene la lista de documentos relacionados para obtener rápidamente el conjunto de resultados. Y a través de las reglas de clasificación, los documentos con un alto grado de coincidencia se muestran primero.

Índice invertido

Para acelerar la velocidad de indexación, Lucene adopta la estructura de árbol LSM y primero almacena en caché los datos del índice en la memoria. Cuando el espacio de memoria ocupa mucho o alcanza un cierto tiempo, los datos en la memoria se escribirán en el disco para formar un archivo de segmento de datos (segmento). El archivo de segmento contiene varios archivos como diccionario, tabla invertida, datos de campo, etc.

Estructura del árbol LSM

Para ser compatible con el rendimiento de escritura y la seguridad de los datos, por ejemplo, para evitar que los datos del búfer de memoria se pierdan debido a un fallo de la máquina. ES escribe el registro de transacciones Translog mientras escribe en la memoria. Los datos en la memoria generarán periódicamente nuevos archivos de segmento, que se pueden abrir y leer escribiendo en la memoria caché del sistema de archivos con una sobrecarga más baja para una búsqueda casi en tiempo real.

Escritura de almacenamiento en búfer y persistencia

3. Escenarios de la aplicación Elasticsearch

Los escenarios de uso típicos de ES incluyen análisis de registros, análisis de tiempos, búsqueda de texto completo, etc.

3.1 Escenario de análisis de registros en tiempo real

Los registros son un formato de datos de amplia base en la industria de Internet. Los registros típicos incluyen registros de operaciones utilizados para localizar problemas comerciales, como registros lentos y registros anormales; registros comerciales utilizados para analizar el comportamiento de los usuarios, como los clics de los usuarios y registros de acceso; y registros de auditoría para el análisis del comportamiento de seguridad.

La ecología elástica proporciona una solución de registro completa. Mediante una implementación simple, puede crear un servicio completo de análisis de registros en tiempo real. ES Ecology resuelve perfectamente los requisitos del escenario de análisis de registros en tiempo real, lo que también es una razón importante para el rápido desarrollo de ES en los últimos años. Los registros generalmente se encuentran en el nivel decenas desde la generación hasta el acceso, lo que es muy eficiente en comparación con las decenas de minutos y horas de las soluciones tradicionales de big data. La capa inferior de ES admite estructuras de datos como el índice invertido y el almacenamiento de columnas, de modo que las capacidades de búsqueda y análisis muy flexibles de ES se pueden utilizar en escenarios de registro. Con las capacidades de análisis interactivo de ES, incluso en el caso de billones de registros, el tiempo de respuesta de búsqueda de registros es de segundos. El proceso básico del procesamiento de registros incluye: recolección de registros -> limpieza de datos -> almacenamiento -> análisis visual. Elastic Stack ayuda a los usuarios a completar la gestión de enlace completo del procesamiento de registros a través de una solución de registro completa.

Enlace de análisis de registros

entre ellos:

  • Recopilación de registros: el componente ligero de recopilación de registros, FileBeat, lee los archivos de registros comerciales en tiempo real y envía datos a componentes posteriores como Logstash.

  • Análisis de texto: utilice análisis regulares y otros mecanismos para convertir datos de texto de registro en datos estructurados. Puede utilizar el servicio Logstash independiente o el módulo de procesamiento de datos ligero incorporado de Elasticsearch Ingest Pipeline para completar la limpieza y conversión de datos.

  • Almacenamiento de datos: almacenamiento de datos persistente a través de la plataforma de análisis y búsqueda de Elasticsearch, que proporciona capacidades de análisis y búsqueda de texto completo.

  • Análisis visual: a través de la rica interfaz gráfica, puede buscar y analizar datos de registro, como el componente de visualización Kibana.

Componente de visualización Kibana

3.2 Escenario de análisis de secuencia de tiempo Los datos de secuencia de tiempo son datos que registran los cambios de estado del equipo y del sistema en orden cronológico. Los datos típicos de series de tiempo incluyen datos de índices de monitoreo de servidores tradicionales, datos de monitoreo de desempeño del sistema de aplicaciones, hardware inteligente, datos de sensores industriales de IoT, etc. Ya en 2017, también exploramos escenarios de análisis de series de tiempo basados ​​en ES. El escenario de análisis de tiempo tiene las características de alta escritura concurrente, baja latencia de consulta y análisis multidimensional. Debido a que ES tiene las capacidades de expansión de clúster, escritura por lotes, enrutamiento de lectura y escritura, fragmentación de datos, etc., el clúster único en línea más grande ha alcanzado más de 600 nodos, capacidad de escritura de 1000w / s, curva única o línea de tiempo única. El retardo de la consulta se puede controlar a 10 ms. Además, ES proporciona capacidades de análisis estadístico multidimensionales flexibles, que permiten la visualización y el monitoreo para realizar análisis estadísticos flexibles basados ​​en regiones y módulos comerciales. Además, ES admite el almacenamiento en columna, una alta relación de compresión y el ajuste a pedido del número de copias, lo que puede lograr menores costos de almacenamiento. Finalmente, los datos de series de tiempo también se pueden visualizar fácilmente a través de los componentes de Kibana.

Panel de visualización de datos de series de tiempo

3.3 Escenarios del servicio de búsqueda Los escenarios típicos del servicio de búsqueda incluyen la búsqueda de productos básicos en JD.com, Pinduoduo y Mogujie; búsqueda de aplicaciones en tiendas de aplicaciones; búsqueda de sitios web en foros y documentos en línea. En este tipo de escenario, los usuarios están preocupados por el alto rendimiento, baja latencia, alta confiabilidad, calidad de búsqueda, etc. Por ejemplo, un solo servicio debe alcanzar un máximo de 10w + QPS, el tiempo de respuesta promedio de las solicitudes es de 20 ms y el error de consulta es inferior a 100 ms. La alta disponibilidad, como los escenarios de búsqueda, generalmente requiere la disponibilidad de 4 9s y admite la tolerancia a fallas de una sola sala de máquinas. Actualmente, el servicio Elasticsearch en la nube ya es compatible con la recuperación ante desastres multizona y tiene la capacidad de recuperarse en cuestión de minutos después de la falla. A través del índice invertido eficiente de ES, así como la puntuación personalizada, las capacidades de clasificación y los complementos de segmentación de palabras enriquecidas, se cumplen los requisitos de búsqueda de texto completo. En el campo de la recuperación de texto completo de código abierto, ES ha ocupado el primer lugar en la categoría de motores de búsqueda DB-Engines durante muchos años.

Ranking de motores de búsqueda de DB-Engines

4. Servicio Tencent Elasticserch

Existe una gran cantidad de análisis de registros en tiempo real, análisis de datos de series de tiempo y escenarios de demanda de búsqueda de texto completo dentro y fuera de la empresa. En la actualidad, nos hemos asociado con Elastic para proporcionar un servicio de nube ES mejorado por kernel en Tencent Cloud, abreviado como CES. Las mejoras del kernel incluyen el kit comercial Xpack y la optimización del kernel. En el proceso de servicio a empresas y clientes de la nube pública, también se han encontrado muchos problemas y desafíos, como clústeres ultragrandes, decenas de millones de escrituras de datos y escenarios de uso enriquecidos para los usuarios en la nube. A continuación, se presentan principalmente nuestras medidas de optimización a nivel de kernel en términos de disponibilidad, rendimiento y costo.

4.1 Optimización de la usabilidad

Problemas de disponibilidad en tres aspectos, en primer lugar, los sistemas centrales de ES carecen de robustez , que es un problema común del sistema distribuido. Por ejemplo, las consultas anormales y los clústeres de sobrecarga de presión son propensos a las avalanchas. Escalabilidad insuficiente de los clústeres. Por ejemplo, si el número de fragmentos del clúster supera los 10 w, habrá obvios cuellos de botella en la gestión de metadatos. Y la expansión del clúster, el nodo se vuelve a agregar al clúster después de una anomalía, hay un problema de datos desiguales entre los nodos y varios discos duros. En segundo lugar, en términos de tolerancia a desastres, es necesario garantizar que los servicios se puedan restaurar rápidamente en caso de una falla de la red en la sala de computadoras, evitar la pérdida de datos en caso de desastres naturales y restaurar rápidamente los datos después de un mal funcionamiento y otros problemas de confiabilidad y seguridad de los datos. Además, también incluye algunos defectos del sistema ES encontrados en el proceso de operación , como bloqueo del nodo maestro, interbloqueo distribuido, reinicio lento, etc.

Para el problema anterior, la robustez del sistema , nuestro servicio mediante la limitación de máquinas tolerantes a fallas de red, inusual para tales servicios debido a la inestabilidad. Al optimizar la lógica de administración de metadatos del clúster, la capacidad de expansión del clúster se mejora en un orden de magnitud, lo que admite clústeres de nodos de mil niveles y fragmentación de millones de niveles. En términos de equilibrio de clústeres, al optimizar el equilibrio de fragmentos entre nodos y varios discos duros, se garantiza el equilibrio de presión de los clústeres a gran escala.

En términos de soluciones de recuperación ante desastres , implementamos copias de seguridad y recuperación de datos ampliando el mecanismo de complemento ES, que puede realizar copias de seguridad de los datos ES en COS para garantizar la seguridad de los datos; a través de la construcción del sistema de gestión y control, admite la recuperación ante desastres de zonas de disponibilidad cruzada y los usuarios pueden implementar tantos como necesiten. Zona de disponibilidad para tolerar el fallo de una sola sala de ordenadores. El mecanismo de la papelera se adopta para garantizar que los datos del clúster se puedan restaurar rápidamente en escenarios como atrasos o mal funcionamiento. En términos de defectos del sistema, hemos corregido una serie de errores como reinicio continuo, bloqueo maestro y punto muerto distribuido. Entre ellos, la optimización del reinicio continuo puede acelerar la velocidad de reinicio del nodo en más de 5 veces. Problema de bloqueo maestro, lo optimizamos con la versión oficial en ES 6.x.

4.2 Optimización del rendimiento

Los problemas de rendimiento , como los escenarios de tiempo representados por los registros y la supervisión, tienen requisitos de rendimiento de escritura muy altos y la simultaneidad de escritura puede llegar a 1000w / s. Sin embargo, descubrimos que el rendimiento de ES se degradará 1+ veces al escribir con una clave principal. En el escenario de la prueba de esfuerzo, se descubre que la CPU no se puede utilizar por completo. Generalmente, los servicios de búsqueda tienen requisitos muy altos para la capacidad de consulta. Generalmente, se requieren 20w QPS, el tiempo de respuesta promedio es menos de 20ms, y los problemas de fallas de consulta causados ​​por GC y un plan de ejecución deficiente deben evitarse tanto como sea posible.

Para solucionar estos problemas. En términos de escritura, para el escenario de deduplicación de clave primaria, usamos los valores máximo y mínimo registrados en el archivo de segmento para realizar la adaptación de consultas para acelerar el proceso de deduplicación de clave primaria, y el rendimiento de escritura se mejora en un 45%. Para obtener más información, consulte Lucene-8980 . Para el problema de que la CPU no se puede utilizar por completo en el escenario de la prueba de esfuerzo, al optimizar la granularidad de bloqueo cuando ES actualiza el Translog para evitar la apropiación de recursos, el rendimiento mejora en un 20%. Para obtener más detalles, consulte ES-45765 / 47790 . También estamos tratando de optimizar el rendimiento de escritura a través de la ejecución vectorizada Al reducir el número de saltos de rama y faltar instrucciones, esperamos que el rendimiento de escritura se duplique.

En términos de consulta, optimizamos la estrategia de fusión de archivos de segmento para activar automáticamente la fusión de archivos de segmento inactivos y converger la cantidad de archivos de segmento para reducir la sobrecarga de recursos y mejorar el rendimiento de la consulta. Poda de consultas basada en los valores máximos y mínimos registrados en cada archivo de segmento, lo que mejora el rendimiento de la consulta en un 40%. A través de la estrategia CBO, evite las operaciones de caché que requieren una gran sobrecarga de caché y causan más de 10 fallos de consulta. Para obtener más información, consulte Lucene-9002 . También incluye optimizar los problemas de rendimiento en la agregación compuesta, realizar operaciones de cambio de página reales y optimizar la agregación con escenarios de clasificación para aumentar el rendimiento de 3 a 7 veces. Además, también estamos tratando de optimizar el rendimiento a través de algún hardware nuevo, como AEP de Intel, Optane, QAT, etc.

4.3 Optimización de costos

El aspecto del costo se refleja principalmente en el consumo de recursos de la máquina en escenarios de series de tiempo representados por logs y monitoreo. Al combinar las estadísticas comerciales típicas de registros en línea y series de tiempo, se encuentra que la relación de costo del disco duro, la memoria y los recursos informáticos es cercana a 8: 4: 1. Se puede concluir que el disco duro y la memoria son la principal contradicción, seguidos del costo de cálculo. Y este tipo de escena de series de tiempo tiene características de acceso obvias, es decir, los datos tienen características calientes y frías. El acceso a los datos de series de tiempo tiene las características de qué tan cerca está y qué tan lejos está. Por ejemplo, la proporción de acceso a los datos en los últimos 7 días puede llegar a más del 95%, mientras que el acceso a los datos históricos es menor, y generalmente es el acceso a información estadística.

En términos de costo del disco duro , debido a que los datos tienen características obvias de frío y calor, adoptamos una arquitectura de separación de frío y calor y usamos una solución de almacenamiento híbrida para equilibrar el costo y el rendimiento. Dado que los datos históricos generalmente son solo estadísticas de acceso, utilizamos un resumen precalculado a cambio de un rendimiento de almacenamiento y consultas, similar a las vistas materializadas. Para no utilizar datos históricos en absoluto, también se puede hacer una copia de seguridad en un sistema de almacenamiento más económico como cos. Otros métodos de optimización incluyen el rendimiento de datos compatible con la estrategia de múltiples discos y la recuperación de desastres de datos, y la eliminación regular de datos caducados mediante la gestión del ciclo de vida.

En términos de costo de la memoria , encontramos que, especialmente para los modelos de almacenamiento grande, solo se usa el 20% de los recursos de almacenamiento y la memoria es insuficiente. Para resolver el problema de la memoria insuficiente, utilizamos la tecnología Off-Heap para mejorar la utilización de la memoria en el montón, reducir la sobrecarga de GC y mejorar la capacidad de un solo nodo para administrar discos. Mueva el FST que representa una gran cantidad de memoria a la administración fuera del montón y evite la copia de datos dentro y fuera del montón almacenando las direcciones de los objetos fuera del montón en el montón. La recuperación de memoria de objetos fuera del montón se realiza a través del mecanismo de referencia débil de Java para mejorar aún más el uso de la memoria. La memoria en pila de 32 GB puede administrar alrededor de 50 TB de espacio en disco, que es 10 veces mayor que la versión nativa, y el rendimiento es el mismo, mientras que la ventaja de GC ha mejorado significativamente.

Además de la optimización a nivel de kernel, a través de la plataforma de gestión y control en la capa de plataforma, soporte para la gestión de recursos de servicio en la nube, gestión de instancias de instancia, etc. para lograr el alojamiento de servicios. Cómodo y rápido, por ejemplo, creación y ajuste de especificaciones. La calidad del servicio está garantizada a través del sistema de monitoreo y herramientas de operación y mantenimiento en la plataforma de soporte de operación y mantenimiento. Y a través de la plataforma de diagnóstico inteligente que está en construcción, se descubren posibles problemas de servicio y se brindan servicios ES estables y confiables tanto interna como externamente.

Dentro de Tencent, hemos liderado la colaboración de código abierto de productos ES para descubrir problemas potenciales y optimizar y mejorar de manera conjunta el ES para evitar errores repetidos por diferentes equipos. Al mismo tiempo, también contribuimos activamente con excelentes soluciones a la comunidad y promovemos el desarrollo de ES con los fanáticos de ES oficiales y comunitarios. El equipo representado por Tencent ES kernel R&D ha presentado más de 60 PR hasta ahora, el 70% de los cuales se han fusionado.Hay 6 colaboradores de la comunidad ES / Lucene en los miembros de PMC colaborativos de código abierto ES de la compañía.

5. Posdata

Elasticsearch se usa ampliamente dentro y fuera de Tencent en escenarios tales como análisis de registros en tiempo real, análisis de datos de series de tiempo y recuperación de texto completo. En la actualidad, la escala de un solo clúster ha alcanzado los 1000 nodos de nivel y el rendimiento de un billón de niveles. Proporcione servicios de análisis y búsqueda de alta confiabilidad, bajo costo y alto rendimiento a través de la versión mejorada del kernel de ES. En el futuro, todavía debemos continuar optimizando ES en términos de disponibilidad, rendimiento y costo. Por ejemplo, el problema de la escalabilidad insuficiente del clúster es admitir la creación de índices al nivel de millones de fragmentos y segundos optimizando la escalabilidad del clúster. Los costos de almacenamiento de ES se están desarrollando actualmente para separar las soluciones de almacenamiento y de computación para reducir aún más los costos y mejorar el rendimiento. Además del problema de los altos costos de uso y mantenimiento, el posterior particionamiento multinivel, el diagnóstico inteligente, etc. se utilizará para mejorar la automatización y las capacidades de autocuración de fallas de ES para reducir el uso del usuario y los costos de mantenimiento. En el futuro, exploraremos en mayor profundidad otras posibilidades de la EE en el campo del análisis multidimensional. Continúe brindando servicios de análisis de búsqueda más valiosos en el campo de big data.

entender mas

Los estudiantes que estén interesados ​​en la tecnología básica de ES pueden escanear el código QR a continuación para discutir e intercambiar con nosotros, y dar la bienvenida a todos a experimentar el servicio Elasticarch en Tencent Cloud.

Supongo que te gusta

Origin blog.csdn.net/Tencent_TEG/article/details/108289003
Recomendado
Clasificación