[Análisis del código fuente] El proceso de inicio de la búsqueda elástica 8.0.0 (2)

Inmediatamente después del artículo anterior

1. Crea un objeto NodeClient

Recopile los archivos de configuración de todos los objetos involucrados hasta ahora, nuevamente en forma de colección de lista,

final List<Setting<?>> additionalSettings = new ArrayList<>();

Luego, se crea un objeto NodeClient como parámetro. Si Node es una representación estática de un nodo, NodeClient es una representación dinámica de un nodo y se ejecutarán varias acciones. ¿Qué es una acción? Hablemos de ella en la escena correspondiente. Aquí se puede entender simplemente como consulta, nuevo documento y otras acciones

2. Analizar complemento

El complemento es un punto de extensión para que los desarrolladores personalicen funciones en es. Después de leer el directorio de archivos del complemento del disco, ahora necesitamos extraer el complemento de tipo ScriptPlugin para su funcionamiento.

No sé cuánto sabe sobre las operaciones de es api, si ha utilizado scripts de es, como la api a continuación, elimine los resultados de la consulta

jiaowu_school/_delete_by_query
{
    "query": {
        "match_all": {}
    }
}

O actualice los resultados de la consulta

Estas son las dos apis que suelo usar en mi desarrollo diario Estas dos apis corresponden a las palabras clave de Script aquí.

Habrá el concepto de contexto en el módulo de secuencia de comandos, que puede entenderse simplemente como información que ha dominado antes de realizar la operación.

Acerca de la introducción detallada del guión, puede abrir un artículo separado para presentarlo. Dado que se trata del comienzo, no puede presentarlo en exceso.

Poner en memoria después de analizar

public final Map<String, ScriptEngine> engines;
public final Map<String, ScriptContext<?>> contexts;

El siguiente es el complemento de análisis AnalysisPlugin

Relacionado con el tokenizador, como cómo segmentar, cómo filtrar está relacionado con el registro en este paso

El siguiente paso es encapsular Settings en un módulo, que incluye algunos parámetros integrados del clúster, etc., todos encapsulados en objetos SettingsModule 

public SettingsModule(
            Settings settings,
            List<Setting<?>> additionalSettings,
            List<String> settingsFilter,
            Set<SettingUpgrader<?>> settingUpgraders) {
        this(
            settings,
            additionalSettings,
            settingsFilter,
            settingUpgraders,
            ClusterSettings.BUILT_IN_CLUSTER_SETTINGS,
            IndexScopedSettings.BUILT_IN_INDEX_SETTINGS);
    }

También se ha creado NetworkService Durante el proceso de creación, se juzgará de acuerdo con la configuración si el usuario ha definido el método de obtención de la dirección del host. De forma predeterminada, la interfaz definitivamente no está implementada ni definida por sí misma.

El siguiente paso es averiguar los complementos relacionados con el comportamiento de la administración del clúster en los complementos, y todos estos complementos implementan la interfaz ClusterPlugin.

4 por defecto

Hasta ahora, con la configuración del clúster, el nombre del clúster y el grupo de subprocesos, puede encapsular un objeto ClusterService para la administración del clúster. Necesita conocer el estado del clúster y agregar un oyente para monitorear los eventos del clúster, como cuando El nodo local se convierte en el nodo principal o ya no es el nodo principal.

Las estadísticas de cierta información durante la operación del clúster también encapsulan el objeto ClusterInfoService, pero son principalmente resultados estáticos.

Como marco, es necesita monitorear cierta información y encapsula específicamente el servicio de monitoreo ¿Qué recursos son principalmente monitoreados?

public MonitorService(Settings settings, NodeEnvironment nodeEnvironment, ThreadPool threadPool) throws IOException {
        this.jvmGcMonitorService = new JvmGcMonitorService(settings, threadPool);
        this.osService = new OsService(settings);
        this.processService = new ProcessService(settings);
        this.jvmService = new JvmService(settings);
        this.fsService = new FsService(settings, nodeEnvironment);
    }

Situación de recolección de basura de JVM, elementos básicos del sistema operativo, información de proceso, información de JVM, información del sistema de archivos

Todos se recopilan en unidades de bits de 1 s

3. Análisis de módulos importantes

A continuación, se encapsula un ClusterModule y aquí se procesan la configuración y los servicios relacionados con el clúster, lo que afecta a todo el clúster. En otras palabras, el ClusterInfoService mencionado anteriormente también es parte del ClusterModule. Y se puede ver que muchos de los objetos anteriores se crean para la preparación de ClusterModule.

Al construir el objeto, además de utilizar los objetos que se han creado anteriormente, este entorno también creará algunas colecciones de decisiones integradas, que son una colección de varios AllocationDeciders. En la actualidad, no sé qué asignar, pero Estos AllocationDeciders pueden entenderse como algunas reglas en sus respectivos escenarios, y pueden reasignarse solo si se cumplen estas reglas. Luego, se crea la asignación fragmentada y, finalmente, el conjunto de decisiones y la asignación fragmentada se unifican en AllocationService para su gestión.

El siguiente paso es el análisis del IndexesModule.

Cuando tratamos con índices, debemos lidiar con problemas relacionados con el mapeo, y lo primero que debemos hacer al crear IndicatorsModule es obtener mapeadores integrados, actualmente hay 25 tipos

Se requiere que el MapperPlugin cargado desde el disco no pueda ser el mismo que los 25 existentes, y también se coloca en los mapeadores finales.

¿Qué significa el mapeador de metadatos? Como se muestra

Estos 2 mapeadores son el contenido más importante del módulo de índice

Supongo que te gusta

Origin blog.csdn.net/weixin_39394909/article/details/108352914
Recomendado
Clasificación