最新要闻
- 暴雪关停国服后 CEO发声:游戏行业被亚洲主宰 东西方竞争不平衡
- 累计交付27万台 李想:理想成为国内家庭消费者首选豪华SUV
- 世界最新:高通全球首发5G NR-Light基带:主打中端物联网、峰值速率220兆
- 城市行驶每公里仅1毛钱!理想L7出行成本不足宝马X5十分之一
- 宗申新款电动车闪电侠发布:续航超200公里 仪表盘可手机投屏
- 环球观速讯丨丢失两年的手机半夜仍被人试图解锁 被系统远程拍下照片
- 网友吐槽快递派送延误 韵达总部:人手紧张正调配
- 《狂飙》蜚声海外 英国小伙们沉迷剧集无法自拔:竟被打斗画面吸引
- 今日热文:大货车实线变道 女子科三被别停挂科当场发飙
- 全球热消息:土耳其一城市震后被海水倒灌:汽车泡在水里
- 环球观焦点:漂浮在数万米高空 你见到的“不明飞行物”:很可能就是一只气球
- 一加Ace 2支持双频GPS:发布会上没讲 结果被很多网友误伤
- 【天天播资讯】太火爆!ChatGPT多次因访问量激增而宕机
- 要闻:14年了:“千年老二”微软终于有机会扳倒谷歌搜索
- 热消息:微星推出Cubi 5 12M迷你主机:仅0.66L、配备双网口
- 世界热点评!女生应聘被问是否单身!当事公司:要求单身正常 将起诉举报者
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
(七)elasticsearch 源码之元数据CulsterState
1.概述
前面几篇讲述了es的许多重要的逻辑,这些逻辑都涉及到一个非常核心的类ClusterState,本文来看下ClusterState包括什么信息。
2.ClusterState
从注解中我们看到,CusterState表示整个集群的状态,其中的数据都是不可变的(除了RoutingTable),并且只能由master节点来更新。
(资料图片)
CusterState 支持diff接口,用来生成增量信息。
主要字段如下:
// CulsterState private final long version; // 版本号 private final String stateUUID; // 状态uuid private final RoutingTable routingTable; // 路由表 private final DiscoveryNodes nodes; // 所有的发现节点 private final MetaData metaData; // 元数据 private final ClusterBlocks blocks; // 一些限制,用来阻止非法操作 private final ImmutableOpenMap customs; // 自定义 private final ClusterName clusterName; // 集群名称 private final boolean wasReadFromDiff; private final int minimumMasterNodesOnPublishingMaster; // built on demand private volatile RoutingNodes routingNodes; // 路由信息的copy
RoutingTable 即全局的路由表,是索引路由表IndexRoutingTable的迭代器
public class RoutingTable implements Iterable, Diffable { public static final RoutingTable EMPTY_ROUTING_TABLE = builder().build(); private final long version; // index to IndexRoutingTable map private final ImmutableOpenMap indicesRouting;
索引路由表 IndexRoutingTable 是分片路由表 IndexShardRoutingTable的迭代器
public class IndexRoutingTable extends AbstractDiffable implements Iterable { private final Index index; // 索引 private final ShardShuffler shuffler; // 洗牌器 // note, we assume that when the index routing is created, ShardRoutings are created for all possible number of // shards with state set to UNASSIGNED private final ImmutableOpenIntMap shards; // 分片路由信息 private final List allActiveShards; // 所有活跃分片的路由信息
IndexShardRoutingTable 包含了主分片和复制分片的信息
public class IndexShardRoutingTable implements Iterable { final ShardShuffler shuffler; // 洗牌器 final ShardId shardId; // shard id is a int final ShardRouting primary; // 主分片 final List primaryAsList; final List replicas; // 复制分片 final List shards; // 分片 final List activeShards; // 活跃分片 final List assignedShards; // 已分配的分片 final Set allAllocationIds; final boolean allShardsStarted;
DiscoveryNodes 表示所有发现节点
public class DiscoveryNodes extends AbstractDiffable implements Iterable { public static final DiscoveryNodes EMPTY_NODES = builder().build(); private final ImmutableOpenMap nodes; // 节点 private final ImmutableOpenMap dataNodes; // 数据节点 private final ImmutableOpenMap masterNodes; // master节点 private final ImmutableOpenMap ingestNodes; private final String masterNodeId; // master节点id private final String localNodeId; // 本地节点id private final Version minNonClientNodeVersion; private final Version maxNonClientNodeVersion; private final Version maxNodeVersion; private final Version minNodeVersion;
public class DiscoveryNode implements Writeable, ToXContentFragment { ... private final String nodeName; // 节点名称 private final String nodeId; // 节点id private final String ephemeralId; // 临时id private final String hostName; // 主机信息 private final String hostAddress; private final TransportAddress address; // transport 地址 private final Map attributes; private final Version version; private final Set roles;
MetaData代表元数据,包括一些配置,index mapping
public class MetaData implements Iterable, Diffable, ToXContentFragment { ... private final String clusterUUID; // cluster uuid private final boolean clusterUUIDCommitted; private final long version; // 版本号 private final CoordinationMetaData coordinationMetaData; // 节点发现元数据 private final Settings transientSettings; // 各类设置 private final Settings persistentSettings; private final Settings settings; private final DiffableStringMap hashesOfConsistentSettings; private final ImmutableOpenMap indices; // 索引元数据map private final ImmutableOpenMap templates; // 索引模版map private final ImmutableOpenMap customs; // 自定义map private final transient int totalNumberOfShards; // Transient ? not serializable anyway? // 分片总数 private final int totalOpenIndexShards; // open的分片总数 private final String[] allIndices; // 所有的索引 private final String[] allOpenIndices; // 所有打开的索引 private final String[] allClosedIndices; // 所有关闭的索引 private final SortedMap aliasAndIndexLookup; // name -> alias/index map
ClusterBlock表示在特定状态下对集群的一些禁止操作,比如在集群恢复阶段不可读写
public class ClusterBlocks extends AbstractDiffable { public static final ClusterBlocks EMPTY_CLUSTER_BLOCK = new ClusterBlocks(emptySet(), ImmutableOpenMap.of()); private final Set global; // 全局的block private final ImmutableOpenMap> indicesBlocks; // 索引级别的block private final EnumMap levelHolders; // 根据level对上面的block进行分类
3.builder模式
ClusterState使用了builder模式,builder模式对于修改复杂的数据对象非常方便。先定义一个内部类,属性和数据对象相同
// ClusterStatepublic static class Builder { private final ClusterName clusterName; private long version = 0; private String uuid = UNKNOWN_UUID; private MetaData metaData = MetaData.EMPTY_META_DATA; private RoutingTable routingTable = RoutingTable.EMPTY_ROUTING_TABLE; private DiscoveryNodes nodes = DiscoveryNodes.EMPTY_NODES; private ClusterBlocks blocks = ClusterBlocks.EMPTY_CLUSTER_BLOCK; private final ImmutableOpenMap.Builder customs; private boolean fromDiff; private int minimumMasterNodesOnPublishingMaster = -1; public Builder(ClusterState state) { this.clusterName = state.clusterName; this.version = state.version(); this.uuid = state.stateUUID(); this.nodes = state.nodes(); this.routingTable = state.routingTable(); this.metaData = state.metaData(); this.blocks = state.blocks(); this.customs = ImmutableOpenMap.builder(state.customs()); this.minimumMasterNodesOnPublishingMaster = state.minimumMasterNodesOnPublishingMaster; this.fromDiff = false; } ... public Builder metaData(MetaData metaData) { this.metaData = metaData; return this; // 返回当前builder对象 } ... public ClusterState build() { if (UNKNOWN_UUID.equals(uuid)) { uuid = UUIDs.randomBase64UUID(); } return new ClusterState(clusterName, version, uuid, metaData, routingTable, nodes, blocks, customs.build(), minimumMasterNodesOnPublishingMaster, fromDiff); // 返回主类对象 }
初始化和修改对象时进行链式修改,然后build,避免了传统的new, set, set...的写法
ClusterState initialClusterState = ClusterState.builder(ClusterName.CLUSTER_NAME_SETTING.getDefault(Settings.EMPTY)) .metaData(metaData).routingTable(routingTable).nodes (nb).build(); // 链式写法
4.总结
本文简单描述了ClusterState的数据结果,展示了builder模式的运用。
(七)elasticsearch 源码之元数据CulsterState
暴雪关停国服后 CEO发声:游戏行业被亚洲主宰 东西方竞争不平衡
累计交付27万台 李想:理想成为国内家庭消费者首选豪华SUV
世界最新:高通全球首发5G NR-Light基带:主打中端物联网、峰值速率220兆
城市行驶每公里仅1毛钱!理想L7出行成本不足宝马X5十分之一
消息!drf认证/权限/频率/分页-过滤-排序
报道:【时间基准】NTP网络时钟服务器助力智能农业系统
快播:C和Python实现快速排序-三数中值划分选择主元(非随机)
宗申新款电动车闪电侠发布:续航超200公里 仪表盘可手机投屏
环球观速讯丨丢失两年的手机半夜仍被人试图解锁 被系统远程拍下照片
网友吐槽快递派送延误 韵达总部:人手紧张正调配
《狂飙》蜚声海外 英国小伙们沉迷剧集无法自拔:竟被打斗画面吸引
今日热文:大货车实线变道 女子科三被别停挂科当场发飙
全球热消息:土耳其一城市震后被海水倒灌:汽车泡在水里
环球观焦点:漂浮在数万米高空 你见到的“不明飞行物”:很可能就是一只气球
一加Ace 2支持双频GPS:发布会上没讲 结果被很多网友误伤
【天天播资讯】太火爆!ChatGPT多次因访问量激增而宕机
程序员常用的6款效率工具,准时下班不是梦
世界看点:春节假期“清零”,任务管理飞项快速助你回到高效状态
全球最新:win10系统,软件不可用,无法调用摄像头
Linux内核跟踪和性能分析
要闻:14年了:“千年老二”微软终于有机会扳倒谷歌搜索
热消息:微星推出Cubi 5 12M迷你主机:仅0.66L、配备双网口
世界热点评!女生应聘被问是否单身!当事公司:要求单身正常 将起诉举报者
【全球时快讯】近50年来首次!日本沙滩惊现大量沙丁鱼 原因未知:开排核废水、也要大地震?
最新资讯:国产车开门红:1月比亚迪称王 大众沦落第三 合资腰斩
03-Pandas详解
今日热讯:ChatGPT能做什么?零基础教你免费使用ChatGPT和账号注册
当前速看:美团面试失败后,翻了两年前的面试题,发现根本不是一个难度的
当前简讯:Linux安装
Spring Boot发送GET/POST请求——RestTemplate的基本使用
当前报道:自研指令集没有侵权MIPS 国产CPU龙芯赢了:摆脱官司
当前讯息:自燃车辆引燃邻车 损失谁来赔?法院释疑
天天最新:基于 eBPF 的 Serverless 多语言应用监控能力建设
世界最新:构建亿级别的消息推送基础模型
全球热文:Linux开源工具之nethogs命令介绍
精选!COBOL教程_编程入门自学教程_菜鸟教程-免费教程分享
华硕发布新款Vivobook 13 Slate笔记本:Intel 7W超低功耗U
今日精选:3岁女童喊脚疼被确诊癌症晚期:神经母细胞瘤 儿童癌症之王
天天微速讯:剧版《三体》弹幕互动量破2000万!豆瓣涨至8.3分
【热闻】iPhone 15 Ultra狂堆料!价格可能贵出天际
环球热议:全球不足50人!宝鸡发现1例罕见黄金血型:比熊猫血更稀有
环球资讯:ASP.Net Core 教程_编程入门自学教程_菜鸟教程-免费教程分享
ChatGPT保姆级注册教程
group by 、concat_ws()、 group_caoncat()的使用
全球热头条丨Jedis那么低性能,还在用吗? lettuce时代开幕啦
热资讯!阿里IM技术分享(十):深度揭密钉钉后端架构的单元化演进之路
强震已致超7700人遇难!土耳其地震背后的人祸 建筑不达标、豆腐渣工程多
全球热议:全球首架国产大飞机C919首飞三亚 民航最高接待礼“过水门”接风
环球关注:iPhone 15 Pro系列拿到三星顶级屏幕!超出S23系列整整两代
全球消息!高级Excel教程_编程入门自学教程_菜鸟教程-免费教程分享
重点聚焦!Serverless 时代开启,云计算进入业务创新主战场
【天天报资讯】Go的参数是传值还是传引用问题
【环球聚看点】【踩坑记录】单测中@PostConstruct多次执行
免费无广告 微软电脑管家2.7公测版发布:任务栏被意外修改有救了
4599元!佳能EOS R50发布:329克超轻便 支持无裁切6K
天天信息:研发10几年、花费千亿:日本国产大飞机为何失败?就是畸形产物
全球微速讯:LV将涨价?国人排长龙抢购 买万元包像在赶集:世界首富曾感慨中国用户有钱
高级Excel图表教程_编程入门自学教程_菜鸟教程-免费教程分享
Apache ANT 教程_编程入门自学教程_菜鸟教程-免费教程分享
焦点播报:算法学习笔记(15): Trie(字典树)
今日讯!火山引擎 DataTester“智能发布”:覆盖产品研发、测试、上线全流程,一站式智能管理 A/B 实验
DB2教程_编程入门自学教程_菜鸟教程-免费教程分享
马斯克将于3月1日公布特斯拉宏图第三篇章 第二篇章已烂尾
世界观速讯丨国产车企1:1复刻几十年前的MINI外观专利 宝马抗议!结果判了
【独家焦点】真心没想到!五旬男子开车撞上护栏:只因刚割了双眼皮
全球热消息:全世界最后一只袋狼究竟是怎么死的?
民企第一只 京东仓储REIT上市:认购额超718亿元遭疯抢
当前视讯!C#(进制转换) NumberConversion
ChatGPT国内也能用吗?ChatGPT国内镜像站点分享给你们
微动态丨暴躁小钢炮!极氪X实车亮相:零百加速3秒级
环球微速讯:《仙剑奇侠传》《和平精英》梦幻联动:赵灵儿端枪吃鸡
啥身材都能包!真维斯连帽卫衣大促:日常100元 现价50到手
6年来苹果iPhone涨价近50% 还会继续涨 库克不怕没人买
《流浪地球2》导演郭帆:国产科幻片工业流程还是初级 吃饭都会出大错误
童话二分之一的大结局是什么?童话二分之一演员表
金棕色适合什么肤色?金棕色和金栗色茶色的区别有哪些?
回避型人格障碍的表现有哪些?回避型人格障碍怎么治疗?
天天快资讯丨袋鼠云数栈UI5.0焕新升级,全新设计语言DT Design,更懂视觉更懂你!
【世界热闻】芯驿电子发布车载系列产品全新品牌AUMO
速讯:仿制作图《这里是中国》封面
【天天播资讯】spring注解
升学宴是什么意思?学生升学宴家长答谢宴致辞
货柜标准尺寸是多少?货柜集装箱尺寸规格表
淘宝换购是什么意思?淘宝换购的东西是正品吗?
笔记本键盘怎么拆卸?笔记本电脑键盘拆卸方法
ddr2内存条还能用吗?ddr2和ddr3的区别有哪些?
爱奇艺弹幕开关在哪里?爱奇艺怎么关闭弹幕?
手机微信语音电话接不到是什么原因?手机微信语音没有声音是怎么回事?
观点:零跑汽车创始人:有信心在一些环节超越特斯拉
【全球热闻】大六缸白菜价!马自达CX-90售价公布:约27.8万元起
美国计划强制让电动汽车“发声” 20多年的老车也不放过
环球热资讯!冷空气今起发货!江南等地暴雨北方局地暴雪 出行注意
人民日报评智能电视套路收费:广告无法消除、会员一充再充
必应、Edge拥抱ChatGPT 微软一晚大赚5400多亿:AI时代已到
焦点报道:女子网上买iPhone 14收到一堆铁片 京东自营退一赔一
天天日报丨用ChatGPT搞钱年入百万!各路博主发布生财之道 网友回呛
今日讯!比亚迪秦PLUS DM-i 2023冠军版宣布2月10日发布:车机、续航全升级
精选!特斯拉跌落神坛?辅助驾驶横评仅得第七
必知必会的设计原则——依赖倒置原则