Apollo浅解3

news2024/9/24 23:31:41

目录

Namespace

Item

Namespace与Item

Namespace修改

界面操作

存储逻辑

更新Item

创建Item 

 删除Item

Namespace发布

界面操作

 存储逻辑

发布版本

发布顺序

题外


Namespace

Namespace是配置项的集合,类似于一个配置文件的概念。官网解释的更为全面,具体参看

Apollo核心概念之“Namespace” (apolloconfig.com)

Namespace对应的ApolloConfigDB 的Namespace表结构如下

其中NamespaceName字段取值规律如下

  • Namespace的类型为properties时,取值为“名字”
  • Namespace的类型为非properties时,取值为“名字.类型”,例如flowCtrl.yml

索引信息如下 

Namespace表唯一索引是包含AppId、ClusterName、NamespaceName字段,表明Namespace字段是

  • 应用隔离:不同应用的同名Namespace对应俩条不同的记录,是俩个不同的Namespace,配置项和值都可以不一致
  • 集群隔离:同应用的不同集群的同名Namespace对应俩条不同的记录,是俩个不同的Namespace,配置项和值都可以不一致。但由于同属同一个AppNamespace,命名空间的类型(Format)是一致的

Item

配置文件可以存储多个配置,每个配置称为配置项。Namespace对应配置文件的概念,那么配置项就对应Item,包括key,value字段,以键值对的形式存储配置,记录配置最新的值。对应ApolloConfigDB.Item表

 每条Item记录通过NamespaceId与Namespace关联,一个Item只属于一个Namespace,一个Namespace可以拥有多个Item。

其中key的取值规律为

  • 关联当Namespace的类型非properties时,key值默认为content,例如上图中Id为3的Item记录,对应的Namespace类型为xml
  • 当Namespace的类型为properties时,key取值为配置项名称

LineNum字段表示,当前item在关联的Namespace中配置项的排序位置。下图Item adress、name、sex的lineNum值分别为1、2、3

Namespace与Item

一个Item只属于一个Namespace,一个Namespace可以拥有多个Item,通过在ApolloConfigDB.Item表中的NamespaceId建立item与Namespace关联关系。查询应用下所有Item的sql如下

SELECT
	t.AppId,
	t.ClusterName,
	t.NamespaceName,
	t1.NamespaceId,
	t1.Id AS itemId,
	t1.LineNum,
	t1.`Key`,
	t1.`Value`
FROM
	ApolloConfigDB.Namespace t,
	ApolloConfigDB.Item t1
WHERE
	t.Id = t1.NamespaceId
AND t.IsDeleted = 0
AND t1.IsDeleted = 0
ORDER BY
	t.AppId,
	t1.NamespaceId,
	t1.LineNum

执行结果如下

Namespace修改

界面操作

对Namespace修改其实是对Namespace关联的某个Item修改。修改过程中系统会记录修改的历史记录。portalUI中命名空间的【更改历史】可以查看。

 包括更改类型、被修改的Item的key、旧值、新值、说明。

存储逻辑

修改历史是如何存储的呢?存储在ApolloConfigDB.Commit表中

 记录是以命名空间为单位,通过AppId、ClusterName、NamespaceName来定位到唯一的命名空间,ChangeSets字段以json对象记录本次修改中变动的Item数据,包括三部分

  • "createItems":[],记录新增Item数组     
  • "updateItems":[],记录更新的Item数组 
  • "deleteItems":[],记录删除的Item数组 

更新Item

更新Item sex的值为female2,并且增加说明“this is comment”

commit表新增记录的ChangeSets值如下,包含了Item sex修改前和修改后的对应ApolloConfigDB.Item表里的记录

{
"createItems":[],
"updateItems":[
		{
		"oldItem":{"namespaceId":1,"key":"sex","value":"female","lineNum":3,"id":18,"isDeleted":false,"deletedAt":0,"dataChangeCreatedBy":"apollo","dataChangeCreatedTime":"2022-12-28 20:24:40","dataChangeLastModifiedBy":"apollo","dataChangeLastModifiedTime":"2022-12-28 20:24:40"},
		"newItem":{"namespaceId":1,"key":"sex","value":"female2","comment":"this is comment","lineNum":3,"id":18,"isDeleted":false,"deletedAt":1672483560987,"dataChangeCreatedBy":"apollo","dataChangeCreatedTime":"2022-12-28 20:24:40","dataChangeLastModifiedBy":"apollo","dataChangeLastModifiedTime":"2022-12-31 18:46:01"}
		}
	      ],
"deleteItems":[]
}

创建Item 

新增Item nickname,commit表新增记录的ChangeSets值如下,包含了新增的item对应ApolloConfigDB.Item表里的记录

{
"createItems":[
		{
		  "namespaceId":7,"key":"nickname","value":"大王","lineNum":1,"id":23,"isDeleted":false,"deletedAt":0,"dataChangeCreatedBy":"apollo","dataChangeCreatedTime":"2022-12-31 15:16:43","dataChangeLastModifiedBy":"apollo","dataChangeLastModifiedTime":"2022-12-31 15:16:43"
		}
	      ],
"updateItems":[],
"deleteItems":[]
}

 删除Item

删除Item address,commit表新增记录的ChangeSets值如下,包含了删除的item对应ApolloConfigDB.Item表里的记录

{
"createItems":[],
"updateItems":[],
"deleteItems":[
		{
		  "namespaceId":1,"key":"address","value":"HaiXiaDaDao88Hao,nanjingbank,pukou","comment":"","lineNum":1,"id":1,"isDeleted":true,"deletedAt":1672485861879,"dataChangeCreatedBy":"apollo","dataChangeCreatedTime":"2022-05-15 13:28:20","dataChangeLastModifiedBy":"apollo","dataChangeLastModifiedTime":"2022-12-31 19:24:21"
		}
	          ]
}

Namespace发布

界面操作

 Namespace的发布是以命名空间为单位,发布特定命名空间后,该命名空间包含的所有Item都会被发布。发布历史可以在portalUI中命名空间的右上角【发布历史】菜单查看

页面左侧记录了该命名空间发布记录,页面右侧记录了该命名空间每次发布后的所有Item最新值与本次发布前后存在变动的item的新旧值对比。

存储逻辑

发布版本

发布版本是如何存储的呢?存储在ApolloConfigDB.Release中        

发布版本记录以命名空间为单位,仍然是通过AppId、ClusterName、NamespaceName三个字段确定唯一的命名空间。Configurations字段是以json对象的形式记录本次发布后该命名空间所有Item的值。其他字段均为Apollo常用的表字段。

发布顺序

一个命名空间发布多次后,多个发布版本又是如何记录发布顺序的呢?

发布顺序通过ApolloConfigDB.ReleaseHistory表记录版本依赖来实现

 其中版本依赖的记录以命名空间为单位,仍然是通过AppId、ClusterName、NamespaceName三个字段确定唯一的命名空间。其中ReleaseId记录当前的发布版本id,对应ApolloConfigDB.Release的id字段,PreviousReleaseId字段记录该发布版本依赖的前前一个发布版本id,也对应ApolloConfigDB.Release的id字段。通过这俩个字段实现将发布版本串联起来,展示完整的发布顺序。

 如上图应用4am的application命名空间的发布顺序是0->1->2->3->9->25->28->36,其中0表示最初始的版本历史,无实际意义。对应ApolloConfigDB.Release表记录

题外

其实简单实现方式可以直接通过ApolloConfigDB.Release的t.DataChange_CreatedTime排序即可查看到特定命名空间的发布历史,SQL如下

SELECT
	*
FROM
	ApolloConfigDB. RELEASE t
ORDER BY
	t.AppId,
	t.ClusterName,
	t.NamespaceName,
	t.DataChange_CreatedTime;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01 flv 的 binary 解析

想要看一下 这个 flv 的格式主要因素为 rtsp视频服务 转换为 rtmp服务 转换为前端可用的服务 , 然后 里面有 flv.js 的代码, 因为之前出现了一些问题 flvjs 播放 ws 服务代理的不存在的 rtsp 连接, Cannot read properties of null (reading ‘flushStashedSamples‘) 然后看了…

Codeforces Round #664 (Div. 2) C. Boboniu and Bit Operations

Problem - C - Codeforces 翻译: Boboniu喜欢位操作。他想和你玩个游戏。 Boboniu给你两个序列的非负整数𝑎1𝑎2,…,𝑎𝑛𝑏1,𝑏2,…,𝑏𝑚。 为每个𝑖(1≤&…

FPGA模拟SENSOR,MIPI CSI-2发送图像到RV1126

FPGA模拟SENSOR,MIPI CSI-2发送图像到RV1126 1:FPGA模拟Sensor, 使用MIPI CSI-2 Transmit,发送图像到RV1126。 2:MIPI CSI-2信号LANE,共5对。图像分辨率1920*1080,格式YUV422 8Bit&#xff0c…

整理了上千个 Python 工具库,涵盖24个大方向

Python 生态,向来以各种类库齐全而闻名,这也是这门语言如此受欢迎的重要原因。 今天就给大家分享一下这几天的战果,宵衣旰食,不眠不休的整理了近千个 Python 库,梳理不易啊,收藏的同时,记得点赞…

数据可视化之seaborn绘图

记录一个今天画出来的数据统计图(绝美,当然数据是癌症相关的就不是很美了, 之前一直都用plt.plot,也不太会用 但是现在发现seaborn真的可以 palette sns.color_palette("ocean", 2) sns.kdeplot(datacancer_data,xRadius (worst),shadeTrue…

ext4 extent详解2之内核源码详解

在查看本文前,希望先查看《ext4 extent详解1之示意图演示》这篇文章,有助于理解本文。本文内核源码版本3.10.96,详细内核详细源码注释见https://github.com/dongzhiyan-stack/kernel-code-comment。 什么时候会用到ext4 extent B树呢&#xf…

SQL SERVER 2016安装部署

1:运行SETUP开始安装SQL SERVER 2016。 2:在计划中可以查看支持SQL SERVER 2016安装的软硬件条件等信息。 3:在左侧安装中选择全新SQL Server独立安装或向现有安装添加功能。 4:可以安装指定的版本,Evaluation这个需要…

圣诞节制作一颗HTML的圣诞树吧

目录 前言: 一、vscode里面运行 二、记事本txt保存运行 前言: 来到圣诞节了,那么就可以制作一颗HTML的圣诞树送给朋友,没有编程基础的小白也可以按照步骤操作也可以运行起来代码的 一、vscode里面运行 1.打开vscoede&#x…

Cadence每日一学_13 | 使用 Allegro 制作PCB封装(以STM32为例)

文章目录一、数据手册分析二、新建封装文件Step1. 新建Package SymbolStep2. 设置设计参数Step3. 设置焊盘路径三、放置焊盘四、绘制Place Bound Top五、绘制装配层六、绘制丝印1. 添加芯片边框丝印2. 添加1脚标识3. 添加芯片位号标识一、数据手册分析 焊盘长度:理论…

Github高效搜索方式

Github高效搜索方式 文章目录Github高效搜索方式0、写在前面1、常用的搜索功能1.1 直接搜索1.2 寻找指定用户|大小的仓库1.3 搜索仓库1.4 查找特定star范围的仓库1.5 查找指定主题1.6 查找仓库语言1.7 搜索issue和pull请求2、 傻瓜式搜索3、参考0、写在前面 名词解释 watch&…

【机器学习】深入理解LightGBM

目录:深入理解LightGBM一、LightGBM简介二、LightGBM提出的动机三、 XGBoost的缺点及LightGBM的优化3.1 XGBoost的缺点3.2 LightGBM的优化四、 LightGBM的基本原理4.1 基于Histogram的决策树算法4.1.1 直方图算法4.1.2 直方图做差加速4.2 带深度限制的 Leaf-wise 算…

把连续学习的思路用在基于图像的相机定位问题中( ICCV 2021)

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 点击进入—>3D视觉工坊学习交流群 Continual Learning for Image-Based Camera Localization(2021 ICCV顶会文章) 代码地址:https://github.com/AaltoVision/CL_HSCNet 主要内容: 论文探讨了将连续学习用在视觉定…

Nexus迁移到阿里云效packages

点击右上角sign in登录按钮,登录到nexus中 登录后,会出现设置按钮,如图 点击设置按钮,点击左侧的system,点击API,即可打开restFul接口界面 点击打开 Components 组,找到 /v1/components 接…

【cmake】利用ExternalProject_Add解决第三方库target命名冲突问题

参考 cmake菜谱第八章第一节 我们经常会遇到这种情况: project A 是最外层项目 project B 是A使用的外部库 project C 是A和B使用的外部库 . ├── extern │ ├── B │ │ ├── extern │ │ │ └── C │ │ └── src │ └── C …

JVM本地锁(二)ReentrantLock可重入锁源码解析

什么是可重入锁呢 顾名思义,就是可以重复进入的锁,学过操作系统或者计组的可参照理解pv,或者多重中断。 demo1(){lock(); //第一次锁demo2(){lock(); // 第二次锁unlock(); }unlock();}文章目录ReentrantLocklock 加锁1. ReentrantLock.lock…

1990-2022年6月上市公司高管信息数据

1990-2022年6月上市公司高管信息数据、董监高信息数据 1、时间:1990-2022年6月 2、指标:证券代码、统计截止日期、人员ID、姓名、国籍、籍贯、籍贯所在地区代码、出生地、出生地所在地区代码、性别、年龄、毕业院校、学历、专业、职称、个人简历、是否…

给数组创建视图(浅拷贝)修改视图值影响原数组值修改视图形状不影响原数组形状numpy.view()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 给数组创建视图(浅拷贝) 修改视图值影响原数组值 修改视图形状不影响原数组形状 numpy.view() 对于以下python代码表述错误的一项是? import numpy as np import nu…

代码随想录二刷day5 两数之和 四数相加 (三数之和 四数之和) ->多写几遍(解法双指针放缩)

二刷复习 文章目录二刷复习哈希表和哈希法unordered 和 ordered 的不同242.有效字母的异位词349.两个数组的交集202.快乐数两数之和四数相加2383.赎金信三数之和(这道题需要重复做, 双指针)四数之和哈希表和哈希法 哈希表:这是两…

BGP建邻实验

目录 1.拓扑图 2.要求 3.实验思路 4.主要配置 5.测试 6.实验总结 1.拓扑图 2.要求 每台路由器都有两个环回,一个24的环回,一个32的环回;32的环回用于建邻,24的环回用于用户网段,最终实现所有24的环回可以ping通即…

BeyondCorp 打造得物零信任安全架构

1. 背景 当前,大部分企业都使用防火墙 (firewall) 来加强网络边界安全。然而,这种安全模型是有缺陷,因为当该边界被破坏,攻击者可以相对容易地访问公司的特权内部网。 边界安全模型通常被比作中世纪城堡:城墙厚厚的堡…