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

Este artículo continúa analizando el proceso de inicio.

1 、 ShardLimitValidator

El número máximo de fragmentos en cada nodo del clúster es 1000 de forma predeterminada

2 、 MetadataCreateIndexService

Principalmente responsable de manejar la creación de índices

3 、 Módulo de acción

Hay un parámetro de entrada IndexScopedSettings

Indica algunos valores de parámetros integrados en el nivel de índice, un total de 120, muchos de los cuales se tocan con frecuencia.

Elegimos algunos típicos. como

index.search.slowlog.threshold.fetch.trace -> {Setting@12155} "{
  "key" : "index.search.slowlog.threshold.fetch.trace",
  "properties" : [
    "Dynamic",
    "IndexScope"
  ],
  "is_group_setting" : false,
  "default" : "-1"
}"
index.number_of_shards -> {Setting@12205} "{
  "key" : "index.number_of_shards",
  "properties" : [
    "Final",
    "IndexScope"
  ],
  "is_group_setting" : false,
  "default" : "1"
}"

El fragmento predeterminado es 1

La acción integrada del sistema se colocará en ActionRegistry, y la acción encapsulará varias operaciones de es en este objeto.

public abstract class TransportAction<Request extends ActionRequest, Response extends ActionResponse> 

La declaración de la clase abstracta de nivel superior, sus 2 genéricos, request y return, es la abstracción de cada api que usamos a menudo como el llamador de es. como

public class TransportCreateIndexAction extends TransportMasterNodeAction<CreateIndexRequest, CreateIndexResponse> 
public abstract class HandledTransportAction<Request extends ActionRequest, Response extends ActionResponse>
        extends TransportAction<Request, Response> 
public class TransportBulkAction extends HandledTransportAction<BulkRequest, BulkResponse>
public class TransportSearchAction extends HandledTransportAction<SearchRequest, SearchResponse> 

Además de lo anterior, se agregarán dos configuraciones a la configuración del clúster, una de las cuales es que la creación de índice automática predeterminada es verdadera. ¿No puedes imaginar qué circunstancias no permiten la creación?

La verificación de la solicitud de mapeo, la verificación de la solicitud de alias. Estos dos elementos se obtienen del complemento.

También creará un objeto RestController cuyo propósito principal es enviar solicitudes HTTP y encontrará un controlador adecuado para procesar. Cómo encontrarlo, principalmente basado en el método uri params en la solicitud Finalmente, se encuentra el RestHandler. Esta clase es una interfaz, el método central dentro

@Override
    public final void handleRequest(RestRequest request, RestChannel channel, NodeClient client) throws Exception {
        // execute the action
        action.accept(channel);
}

4 、 Módulo de red

Analice el NetworkPlugin cargado. 4 relacionados

Finalmente obtenido

final Transport transport = networkModule.getTransportSupplier().get();

Los tipos de transporte de objetos instanciados finales son los siguientes

¿Qué hace el transporte?

Se utiliza para manejar las conexiones entre nodos dentro del clúster. Por ejemplo, las solicitudes de consulta, la solicitud de un nodo a otro nodo se completa a través del transporte. Y se realiza de forma asincrónica, lo que no provocará bloqueo de hilo. Su transmisión se basa en tcp,

5 、 UpgradeService

MetadataIndexUpgradeService es principalmente responsable de actualizar los metadatos de los índices restantes a la última versión del clúster actual. El escenario de uso típico es cuando el clúster se actualiza o cuando el índice colgante se importa al clúster.

TemplateUpgradeService describe las plantillas relacionadas, y yo personalmente uso menos plantillas. Sin embargo, se dice que algunas empresas tienen equipos de mantenimiento ES dedicados y hay muchas API relacionadas con plantillas en las API que se utilizan con frecuencia. El servicio describe que cuando un nodo está a punto de unirse al clúster, la plantilla se actualizará cuando el complemento se instale a la mitad.

6 、 RepositoriesModule + SnapshotsService

El módulo RepositoriesModule se crea para preparar la instantánea y la restauración. Las instantáneas se almacenan de forma incremental. Puede almacenar diferentes instantáneas de un índice o diferentes instantáneas de un clúster. ¿Dónde se almacena? Se puede almacenar localmente o en cualquier lugar del disco de la nube. Escriba como se muestra

Cuando se crea SnapshotsService, se registra un controlador para el cambio de estado de la instantánea con el transportservice

También se crea un servicio de instantáneas a nivel de fragmentos, que es responsable de administrar el inicio y la detención de las operaciones de instantáneas en fragmentos.

Luego cree el servicio de restauración RestoreService, que se ocupa principalmente de la restauración de instantáneas

7 、 DiscoveryModule

Este módulo significa que los nodos se encontrarán entre sí para formar un clúster. El escenario principal es cuando se inicia es o se acaba de elegir el nuevo nodo maestro. El proceso de descubrimiento se divide en 2 pasos. El primer paso es proporcionar una lista de hosts de semillas en la configuración. Luego, cada nodo intentará conectarse a las máquinas en la lista y ver si es un nodo o un nodo que tiene el potencial de convertirse en maestro. . El segundo paso, si el primer paso es exitoso, el nodo compartirá la información del nodo candidato maestro que ha obtenido con el nodo conectado exitosamente. Los nodos conectados correctamente también devolverán las direcciones de sus socios una por una. Entonces el nodo intentará conectarse con estas direcciones recién devueltas

8. Inicialización de NodeClient

Clientes que realizan diversas operaciones en el nodo actual

Finalmente, inicialice el controlador HTTP 

De forma predeterminada, casi todas las acciones de es se procesan a través de HTTP. Esta captura de pantalla es solo parcial

public void initRestHandlers(Supplier<DiscoveryNodes> nodesInCluster) {
        List<AbstractCatAction> catActions = new ArrayList<>();
        Consumer<RestHandler> registerHandler = handler -> {
            if (handler instanceof AbstractCatAction) {
                catActions.add((AbstractCatAction) handler);
            }
            restController.registerHandler(handler);
        };
        registerHandler.accept(new RestAddVotingConfigExclusionAction());
        registerHandler.accept(new RestClearVotingConfigExclusionsAction());
        registerHandler.accept(new RestMainAction());
        registerHandler.accept(new RestNodesInfoAction(settingsFilter));
        registerHandler.accept(new RestRemoteClusterInfoAction());
        registerHandler.accept(new RestNodesStatsAction());
        registerHandler.accept(new RestNodesUsageAction());
        registerHandler.accept(new RestNodesHotThreadsAction());
        registerHandler.accept(new RestClusterAllocationExplainAction());
        registerHandler.accept(new RestClusterStatsAction());
        registerHandler.accept(new RestClusterStateAction(settingsFilter));
        registerHandler.accept(new RestClusterHealthAction());
        registerHandler.accept(new RestClusterUpdateSettingsAction());
        registerHandler.accept(new RestClusterGetSettingsAction(settings, clusterSettings, settingsFilter));
        registerHandler.accept(new RestClusterRerouteAction(settingsFilter));
        registerHandler.accept(new RestClusterSearchShardsAction());
        registerHandler.accept(new RestPendingClusterTasksAction());
        registerHandler.accept(new RestPutRepositoryAction());
        registerHandler.accept(new RestGetRepositoriesAction(settingsFilter));
        registerHandler.accept(new RestDeleteRepositoryAction());
        registerHandler.accept(new RestVerifyRepositoryAction());
}

¡Finalmente la instancia de nodo está activa! ! ! ! !

 

9. Resumen

En el proceso de creación del nodo, vi muchos objetos relacionados con la inyección de dependencias, como terminar con Módulo, método de vinculación, etc. Sí, es usa el marco de inyección de dependencias de Guice para completar la dependencia entre varios objetos.

Para el uso detallado de Guice, se necesita información adicional.

Amigos a los que les gusta la búsqueda del código fuente: escalera roja, progresen juntos

Supongo que te gusta

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