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有这些

  1. ModulesBuilder modules = new ModulesBuilder();
  2. modules.add(new Version.Module(version));
  3. modules.add(new CircuitBreakerModule(settings));
  4. // plugin modules must be added here, before others or we can get crazy injection errors...
  5. for (Module pluginModule : pluginsService.nodeModules()) {
  6. modules.add(pluginModule);
  7. }
  8. modules.add(new PluginsModule(pluginsService));
  9. modules.add(new SettingsModule(this.settings));
  10. modules.add(new NodeModule(this));
  11. modules.add(new NetworkModule(namedWriteableRegistry));
  12. modules.add(new ScriptModule(this.settings));
  13. modules.add(new EnvironmentModule(environment));
  14. modules.add(new NodeEnvironmentModule(nodeEnvironment));
  15. modules.add(new ClusterNameModule(this.settings));
  16. modules.add(new ThreadPoolModule(threadPool));
  17. modules.add(new DiscoveryModule(this.settings));
  18. modules.add(new ClusterModule(this.settings));
  19. modules.add(new RestModule(this.settings));
  20. modules.add(new TransportModule(settings, namedWriteableRegistry));
  21. if (settings.getAsBoolean(HTTP_ENABLED, true)) {
  22. modules.add(new HttpServerModule(settings));
  23. }
  24. modules.add(new IndicesModule());
  25. modules.add(new SearchModule());
  26. modules.add(new ActionModule(false));
  27. modules.add(new MonitorModule(settings));
  28. modules.add(new GatewayModule(settings));
  29. modules.add(new NodeClientModule());
  30. modules.add(new ShapeModule());
  31. modules.add(new PercolatorModule());
  32. modules.add(new ResourceWatcherModule());
  33. modules.add(new RepositoriesModule());
  34. modules.add(new TribeModule());

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

  1. @Override
  2. protected void configure() {
  3. bind(DynamicSettings.class).annotatedWith(ClusterDynamicSettings.class).toInstance(clusterDynamicSettings.build());
  4. bind(DynamicSettings.class).annotatedWith(IndexDynamicSettings.class).toInstance(indexDynamicSettings.build());
  5. bind(ClusterInfoService.class).to(clusterInfoServiceImpl).asEagerSingleton();
  6. bind(GatewayAllocator.class).asEagerSingleton();
  7. bind(AllocationService.class).asEagerSingleton();
  8. bind(DiscoveryNodeService.class).asEagerSingleton();
  9. bind(OperationRouting.class).asEagerSingleton();
  10. bind(MetaDataCreateIndexService.class).asEagerSingleton();
  11. bind(MetaDataDeleteIndexService.class).asEagerSingleton();
  12. .......
  13.  
  14. }

3.Services

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

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

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

Node内部架构图的更多相关文章

  1. Atitit jOrgChart的使用  组织架构图css html

    Atitit jOrgChart的使用  组织架构图css html 1. 项目要做组织架构图,要把它做成自上而下的树形结构,于是决定1 2. Html导入 以来的css js1 2.1. 数据来源 ...

  2. graphviz 绘制架构图

    架构图: 1.依赖调用关系.(类似文献引用关系, graphviz 自动将每一次调用升一次层级) 2.依赖调用可能是上下层级调用,也可能是同层级引用. 需人工去梳理出这些关系 3. 引用多的用颜色标识 ...

  3. 五分钟!用python绘制漂亮的系统架构图

    Diagrams 是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标: AWS.Azure.GCP.K8s.阿里云 和 Oracle 云 基 ...

  4. .Net Core with 微服务 - 架构图

    上一次我们简单介绍了什么是微服务(.NET Core with 微服务 - 什么是微服务 ).介绍了微服务的来龙去脉,一些基础性的概念.有大佬在评论区指出说这根本不是微服务.由于本人的能力有限,大概也 ...

  5. 飞达资讯App总体介绍及关系架构图

    飞达资讯App总体介绍: 下图为飞达资讯App的关系架构图: 该App关系架构图所需的图片云盘链接地址:http://pan.baidu.com/s/1gfHIe4b 提取密码:x1nr 该App的云 ...

  6. 关于SAP4.7的几个架构图

    http://blog.itpub.net/92530/viewspace-154881/ 1.SAP基本架构图 2.SAP的应用层的工作进程架构图 3.SAP的内存类型图 4.SAP数据访问架构图 ...

  7. android系统架构图

    android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和Linux核心层. 1.应用程序 Andr ...

  8. MyBatis架构图

    MyBatis架构 MyBatis依赖的jar不多,而且代码行数也没多少,其中使用了大量的设计模式,值得好好学习.下图是MyBatis的一张架构图,来自Java框架篇—Mybatis 入门. Myba ...

  9. struts2原理架构图

    struts2 原理架构图

随机推荐

  1. ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器。用springframework自带的便可

    ssh框架从页面传中文发生乱码时怎么解决,就是添加一个字符编码拦截器.用springframework自带的便可

  2. 移动端滚动方案:better-scroll

    BetterScroll 是什么 BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件.它的核心是借鉴的 iscroll (opens new window) 的实现, ...

  3. vue+el-element中根据文件名动态创建dialog的方法

    背景 在项目中使用对话框的通常做法是把对话框封装成组件,在使用的地方引入,然后添加到template,使用visible.sync控制对话框的显示/隐藏,监听confirm事件处理用户点击确定.如下: ...

  4. SpringBoot整合Light Security框架

    官方git地址:https://gitee.com/itmuch/light-security/tree/master 引入maven <dependency> <groupId&g ...

  5. 【LeetCode】771. Jewels and Stones 解题报告

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 数组count 字典Counter 日期 题目地址 ...

  6. GCD (hdu 5726)

    GCD Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  7. 第三十一个知识点:Game Hopping证明

    第三十一个知识点:Game Hopping证明 关于安全证明, 目前主流的方法有安全归约证明 (由 single game 实现) 和 Game Hopping (由 game sequence 实现 ...

  8. 「算法笔记」FHQ-Treap

    右转→https://www.cnblogs.com/mytqwqq/p/15057231.html 下面放个板子 (禁止莱莱白嫖板子) P3369 [模板]普通平衡树 #include<bit ...

  9. Scale-Invariant Error

    目录 概 主要内容 代码 Eigen D., Puhrsch C. and Fergus R. Depth Map Prediction from a Single Image using a Mul ...

  10. WiFi6模块 RW6852-PCIE

    RW6852-PCIE是一款高度集成的模块,支持2T2R 802.11ax解决方案,具有MU-MIMO.无线LAN (WLAN) PCI Express网络接口控制器和HS-UART混合接口.它结合了 ...