• Node内部架构图


    1.Node内部架构图

     先来看一下Node节点的内部实现架构图。

    首先最上层入口是Restful风格和javaTcp风格的API入口,RestFul请求映射到处理器RestControl。JavaApi映射到轻量级的TransportClient或者重量级的NodeClient。所有的外部命令(不管是http还是tcp)最终都转换为统一的Action动作。不同的action动作又都基于底层的种类繁多的Services服务。涉及到索引数据的Service会调用底层封装的Lucene来完成具体操作。最底层的GateWay对应数据的不同存储方式,默认是采用Local FileSystem,即保存到本地.通过配置也可以将索引数据保存到远程的HDFS或者AmazonS3。

    2.Module

    我们知道ES节点是由多个模块组成,这些模块负责其功能。 这些模块有以下两种类型的设置 

    • 静态设置 - 在启动Elasticsearch之前,需要在配置文件(elasticsearch.yml)中配置这些设置。需要更新集群中的所有关注节点以反映这些设置的更改。

    • 动态设置 - 这些设置可以在实时Elasticsearch上设置。

    所有模块都是在node构造的时候加入,主要的module有这些

    ModulesBuilder modules = new ModulesBuilder();
                modules.add(new Version.Module(version));
                modules.add(new CircuitBreakerModule(settings));
                // plugin modules must be added here, before others or we can get crazy injection errors...
                for (Module pluginModule : pluginsService.nodeModules()) {
                    modules.add(pluginModule);
                }
                modules.add(new PluginsModule(pluginsService));
                modules.add(new SettingsModule(this.settings));
                modules.add(new NodeModule(this));
                modules.add(new NetworkModule(namedWriteableRegistry));
                modules.add(new ScriptModule(this.settings));
                modules.add(new EnvironmentModule(environment));
                modules.add(new NodeEnvironmentModule(nodeEnvironment));
                modules.add(new ClusterNameModule(this.settings));
                modules.add(new ThreadPoolModule(threadPool));
                modules.add(new DiscoveryModule(this.settings));
                modules.add(new ClusterModule(this.settings));
                modules.add(new RestModule(this.settings));
                modules.add(new TransportModule(settings, namedWriteableRegistry));
                if (settings.getAsBoolean(HTTP_ENABLED, true)) {
                    modules.add(new HttpServerModule(settings));
                }
                modules.add(new IndicesModule());
                modules.add(new SearchModule());
                modules.add(new ActionModule(false));
                modules.add(new MonitorModule(settings));
                modules.add(new GatewayModule(settings));
                modules.add(new NodeClientModule());
                modules.add(new ShapeModule());
                modules.add(new PercolatorModule());
                modules.add(new ResourceWatcherModule());
                modules.add(new RepositoriesModule());
                modules.add(new TribeModule());

    每个module都从AbstractModule派生而来,在configure中绑定需要用到的各种service

     @Override
        protected void configure() {
            bind(DynamicSettings.class).annotatedWith(ClusterDynamicSettings.class).toInstance(clusterDynamicSettings.build());
            bind(DynamicSettings.class).annotatedWith(IndexDynamicSettings.class).toInstance(indexDynamicSettings.build());
            bind(ClusterInfoService.class).to(clusterInfoServiceImpl).asEagerSingleton();
            bind(GatewayAllocator.class).asEagerSingleton();
            bind(AllocationService.class).asEagerSingleton();
            bind(DiscoveryNodeService.class).asEagerSingleton();
            bind(OperationRouting.class).asEagerSingleton();
            bind(MetaDataCreateIndexService.class).asEagerSingleton();
            bind(MetaDataDeleteIndexService.class).asEagerSingleton();
            .......
      
        }

     3.Services

    通用服务,为action modules 等提供具体业务实现。

    4.gateway的主要职责是用来对数据进行长持久化。

    整个集群重启之后可以通过gateway重新恢复数据。怎么去对所有节点的索引信息进行持久化是个问题,除了索引信息之外,还有ClusterState(集群信息),mapping,索引碎片信息,以及transaction log等信息也是需要进行持久化的,0.11之后的版本新加了LocalGateway(并且是默认配置),加上之前的fs(使用共享文件系统)、hdfs(hadoop 分布式文件系统)、cloud(ec2之类的云存储)。

  • 相关阅读:
    URAL1996 Cipher Message 3(KMP + FFT)
    UVa12633 Super Rooks on Chessboard(容斥 + FFT)
    SPOJ TSUM Triple Sums(FFT + 容斥)
    UVa12298 Super Poker II(母函数 + FFT)
    LA4671 K-neighbor substrings(FFT + 字符串Hash)
    HDU4080 Stammering Aliens(二分 + 后缀数组)
    HDU4609 3-idiots(母函数 + FFT)
    HDU1402 A * B Problem Plus(FFT)
    快速傅里叶变换FFT学习小记
    HDU4971 A simple brute force problem.(强连通分量缩点 + 最大权闭合子图)
  • 原文地址:https://www.cnblogs.com/wzj4858/p/8126656.html
Copyright © 2020-2023  润新知